xiaoyong931011
2022-08-25 94b6015d7e4b5b93452244073cab8d08ecb2d442
20220822
6 files modified
131 ■■■■ changed files
src/main/java/cc/mrbird/febs/mall/dto/PayOrderDto.java 6 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallOrderInfoServiceImpl.java 68 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/pay/controller/UnipayController.java 9 ●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/pay/model/AgreeMentPaySmsDto.java 13 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/pay/service/UnipayService.java 12 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/pay/service/impl/UnipayServiceImpl.java 23 ●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/mall/dto/PayOrderDto.java
@@ -31,4 +31,10 @@
    @ApiModelProperty(value = "支付凭证")
    private String payImage;
    @ApiModelProperty(value = "签约短信验证码")
    private String smsCode;
    @ApiModelProperty(value = "银行卡号")
    private String bankNo;
}
src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallOrderInfoServiceImpl.java
@@ -17,6 +17,7 @@
import cc.mrbird.febs.mall.vo.OrderDetailVo;
import cc.mrbird.febs.mall.vo.OrderListVo;
import cc.mrbird.febs.mall.vo.OrderRefundVo;
import cc.mrbird.febs.pay.model.AgreementPayDto;
import cc.mrbird.febs.pay.model.AgreementSignDto;
import cc.mrbird.febs.pay.model.UnipayDto;
import cc.mrbird.febs.pay.service.IPayService;
@@ -39,6 +40,7 @@
import org.springframework.transaction.annotation.Transactional;
import java.math.BigDecimal;
import java.text.DecimalFormat;
import java.util.*;
/**
@@ -257,7 +259,7 @@
                if("fail" == unipayStr){
                    throw new FebsException("支付失败");
                }else{
                    JSONUtil.parseObj(unipayStr);
//                    JSONUtil.parseObj(unipayStr);
                    JSONObject jsonObject = JSONUtil.parseObj(unipayStr);
                    payResultStr = (String) jsonObject.get("r7_TrxNo");
                    rcResult = (String) jsonObject.get("rc_Result");
@@ -333,31 +335,45 @@
            case "5":
                AgreementSignDto agreementSignDto = new AgreementSignDto();
                agreementSignDto.setOrderNo(orderInfo.getOrderNo());
                unipayService.agreementSign(agreementSignDto);
//                UnipayDto unipayDto = new UnipayDto();
////                unipayDto.setAmount(new BigDecimal("0.01"));
//                unipayDto.setAmount(orderInfo.getAmount());
//                unipayDto.setFrpCode("ALIPAY_H5");
//                unipayDto.setTradeMerchantNo("777180800385820");
//                unipayDto.setOrderNo(orderInfo.getOrderNo());
//                List<MallOrderItem> items = orderInfo.getItems();
//                if(CollUtil.isEmpty(items)){
//                    unipayDto.setProductName("商品");
//                }else{
//                    unipayDto.setProductName(items.get(0).getGoodsName());
//                }
//                String agreementSignStr = "";
//                if("fail" == unipayStr){
//                    throw new FebsException("支付失败");
//                }else{
//                    JSONUtil.parseObj(unipayStr);
//                    JSONObject jsonObject = JSONUtil.parseObj(unipayStr);
//                    payResultStr = (String) jsonObject.get("r7_TrxNo");
//                    rcResult = (String) jsonObject.get("rc_Result");
//                }
                orderInfo.setPayOrderNo(payResultStr);
                orderInfo.setPayMethod("支付宝支付");
//                agentProducer.sendOrderReturn(orderInfo.getId());
                agreementSignDto.setSmsCode(payOrderDto.getSmsCode());
                String agreementSignStr = unipayService.agreementSign(agreementSignDto);
                if("fail" == agreementSignStr){
                    throw new FebsException("支付失败");
                }else{
                    JSONObject jsonObject = JSONUtil.parseObj(agreementSignStr);
                    payResultStr = (String) jsonObject.get("biz_code");
                    if("JS000000" != payResultStr){
                        throw new FebsException("支付失败");
                    }
                }
                AgreementPayDto agreementPayDto = new AgreementPayDto();
                agreementPayDto.setOrderNo(orderInfo.getOrderNo());
                BigDecimal value = orderInfo.getAmount().setScale(2, BigDecimal.ROUND_DOWN);
                DecimalFormat decimalFormat = new DecimalFormat("0.00#");
                String strVal = decimalFormat.format(value);
                agreementPayDto.setOrderAmount(new BigDecimal(strVal));
                agreementPayDto.setOrderTime(DateUtil.now());
                List<MallOrderItem> itemsGoods = orderInfo.getItems();
                if(CollUtil.isEmpty(itemsGoods)){
                    agreementPayDto.setOrderDesc("商品");
                }else{
                    agreementPayDto.setOrderDesc(itemsGoods.get(0).getGoodsName());
                }
                agreementPayDto.setBankNo(payOrderDto.getBankNo());
                String agreementPayStr = unipayService.agreementPay(agreementPayDto);
                if("fail".equals(agreementSignStr)){
                    throw new FebsException("支付失败");
                }else{
                    JSONObject jsonObject = JSONUtil.parseObj(agreementPayStr);
                    payResultStr = (String) jsonObject.get("biz_code");
                    if(!"JS000000".equals(payResultStr)){
                        throw new FebsException("支付失败");
                    }
                }
                orderInfo.setPayMethod("快捷协议支付");
                break;
            default:
src/main/java/cc/mrbird/febs/pay/controller/UnipayController.java
@@ -153,8 +153,12 @@
    @ApiOperation(value = "获取协议支付签约短信", notes = "获取协议支付签约短信")
    @PostMapping(value = "getAgreeMentPaySms")
    public FebsResponse getAgreeMentPaySms(@RequestBody AgreeMentPaySmsDto agreeMentPaySmsDto) {
        unipayService.getAgreeMentPaySms(agreeMentPaySmsDto);
        return new FebsResponse().success().message("申请成功");
        String agreeMentPaySms = unipayService.getAgreeMentPaySms(agreeMentPaySmsDto);
        if("fail".equals(agreeMentPaySms)){
            return new FebsResponse().fail().message("获取失败");
        }else{
            return new FebsResponse().success().message("获取成功");
        }
    }
//    public static void main(String[] args) {
@@ -186,6 +190,7 @@
                    orderInfo.setPayResult("1");
                    orderInfo.setPayTime(DateUtil.parse(pay_success_time));
                    orderInfo.setPayTradeNo(jp_order_no);
                    orderInfo.setPayOrderNo(orderNo);
                    orderInfoMapper.updateById(orderInfo);
                    boolean hasTc = false;
src/main/java/cc/mrbird/febs/pay/model/AgreeMentPaySmsDto.java
@@ -2,6 +2,7 @@
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.math.BigDecimal;
@@ -12,20 +13,22 @@
public class AgreeMentPaySmsDto {
    // 商户订单号
    @ApiModelProperty(value = "订单号")
    private String orderNo;
    // 订单金额;金额保留两位小数
    private BigDecimal orderAmount;
    //创建时间
//    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    private String createdTime;
    // 姓名
    @ApiModelProperty(value = "姓名")
    private String name;
    //证件类型
    @ApiModelProperty(value = "证件类型")
    private String idType;
    //证件号码
    @ApiModelProperty(value = "证件号码")
    private String idCardNum;
    // 银行卡号
    @ApiModelProperty(value = "银行卡号")
    private String bankNo;
    // 手机号
    @ApiModelProperty(value = "手机号")
    private String phone;
}
src/main/java/cc/mrbird/febs/pay/service/UnipayService.java
@@ -6,10 +6,20 @@
import cc.mrbird.febs.pay.model.UnipayDto;
public interface UnipayService {
    /**
     * 聚合支付-微信支付宝
     * @param unipayDto
     * @return
     */
    String unipay(UnipayDto unipayDto);
    /**
     * 协议快捷支付步骤
     * 1快捷协议支付-签约短信接口
     * 2快捷协议支付-签约接口
     * 3快捷协议支付-无短支付接口
     */
    /**
     * 快捷协议支付-签约短信接口
     * @param agreeMentPaySmsDto
     * @return
src/main/java/cc/mrbird/febs/pay/service/impl/UnipayServiceImpl.java
@@ -1,14 +1,18 @@
package cc.mrbird.febs.pay.service.impl;
import cc.mrbird.febs.mall.entity.MallOrderInfo;
import cc.mrbird.febs.mall.mapper.MallOrderInfoMapper;
import cc.mrbird.febs.pay.model.*;
import cc.mrbird.febs.pay.service.UnipayService;
import cc.mrbird.febs.pay.util.*;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.StrUtil;
import cn.hutool.json.JSONUtil;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.codec.digest.DigestUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@@ -44,6 +48,9 @@
    public static final String agreementPayNotifyUrl = "http://47.111.90.145:8800/api/unipay/agreementPayCallBack";
    public static final String p1MerchantNo = "888118000001971";/** 商户编号 */
    public static final String aesKey = "1234567891234567";/** 商户编号 */
    @Autowired
    private MallOrderInfoMapper orderInfoMapper;
    @Override
    @Transactional
@@ -180,7 +187,7 @@
        map.put("mch_order_no",agreementPayDto.getOrderNo()); // 商户订单号
        map.put("order_amount", agreementPayDto.getOrderAmount()); // 订单金额;金额保留两位小数
        map.put("mch_req_time", agreementPayDto.getOrderTime()); // 订单时间
        map.put("order_desc", agreementPayDto.getOrderDesc()); // 订单时间
        map.put("order_desc", agreementPayDto.getOrderDesc()); // 商品名称
        map.put("callback_url", agreementPayNotifyUrl); // 异步通知地址
        map.put("bank_card_no",  AESUtil.Aes256Encode(agreementPayDto.getBankNo(),aesKey)); // 签约银行卡号
@@ -250,9 +257,15 @@
            e.printStackTrace();
        }
        map.put("mch_order_no", "NO_"+agreeMentPaySmsDto.getOrderNo()); // 商户订单号
        map.put("order_amount", agreeMentPaySmsDto.getOrderAmount()); // 订单金额
        map.put("mch_req_time", agreeMentPaySmsDto.getCreatedTime()); // 下单时间
        MallOrderInfo orderInfo = orderInfoMapper.selectByOrderNo(agreeMentPaySmsDto.getOrderNo());
        map.put("mch_order_no", "NO_"+orderInfo.getOrderNo()); // 商户订单号
        BigDecimal value = orderInfo.getAmount().setScale(2, BigDecimal.ROUND_DOWN);
        DecimalFormat decimalFormat = new DecimalFormat("0.00#");
        String strVal = decimalFormat.format(value);
        map.put("order_amount", strVal); // 订单金额
        map.put("mch_req_time", DateUtil.now()); // 下单时间
        map.put("payer_name",AESUtil.Aes256Encode(agreeMentPaySmsDto.getName(),aesKey)); // 姓名
        map.put("id_type", agreeMentPaySmsDto.getIdType()); // 证件类型
        map.put("id_no", AESUtil.Aes256Encode(agreeMentPaySmsDto.getIdCardNum(),aesKey)); // 证件号码
@@ -323,7 +336,7 @@
            e.printStackTrace();
        }
        map.put("mch_order_no", agreementSignDto.getOrderNo()); // 商户订单号
        map.put("mch_order_no",  "NO_"+agreementSignDto.getOrderNo()); // 商户订单号
        map.put("sms_code", agreementSignDto.getSmsCode()); // 签约短信验证码
        requestParam.setData(JsonUtil.toString(map));