From 94b6015d7e4b5b93452244073cab8d08ecb2d442 Mon Sep 17 00:00:00 2001 From: xiaoyong931011 <15274802129@163.com> Date: Thu, 25 Aug 2022 16:04:43 +0800 Subject: [PATCH] 20220822 --- src/main/java/cc/mrbird/febs/mall/dto/PayOrderDto.java | 6 ++ src/main/java/cc/mrbird/febs/pay/service/impl/UnipayServiceImpl.java | 23 ++++++- src/main/java/cc/mrbird/febs/pay/service/UnipayService.java | 12 +++ src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallOrderInfoServiceImpl.java | 68 ++++++++++++++-------- src/main/java/cc/mrbird/febs/pay/model/AgreeMentPaySmsDto.java | 13 ++- src/main/java/cc/mrbird/febs/pay/controller/UnipayController.java | 9 ++ 6 files changed, 92 insertions(+), 39 deletions(-) diff --git a/src/main/java/cc/mrbird/febs/mall/dto/PayOrderDto.java b/src/main/java/cc/mrbird/febs/mall/dto/PayOrderDto.java index 9d2094f..e2b1290 100644 --- a/src/main/java/cc/mrbird/febs/mall/dto/PayOrderDto.java +++ b/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; } diff --git a/src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallOrderInfoServiceImpl.java b/src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallOrderInfoServiceImpl.java index 2f2ff02..fa7e82e 100644 --- a/src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallOrderInfoServiceImpl.java +++ b/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: diff --git a/src/main/java/cc/mrbird/febs/pay/controller/UnipayController.java b/src/main/java/cc/mrbird/febs/pay/controller/UnipayController.java index 2a7eada..7a7f3e4 100644 --- a/src/main/java/cc/mrbird/febs/pay/controller/UnipayController.java +++ b/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; diff --git a/src/main/java/cc/mrbird/febs/pay/model/AgreeMentPaySmsDto.java b/src/main/java/cc/mrbird/febs/pay/model/AgreeMentPaySmsDto.java index c166a1a..4dbf055 100644 --- a/src/main/java/cc/mrbird/febs/pay/model/AgreeMentPaySmsDto.java +++ b/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; } diff --git a/src/main/java/cc/mrbird/febs/pay/service/UnipayService.java b/src/main/java/cc/mrbird/febs/pay/service/UnipayService.java index 549ced2..b61ed57 100644 --- a/src/main/java/cc/mrbird/febs/pay/service/UnipayService.java +++ b/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 diff --git a/src/main/java/cc/mrbird/febs/pay/service/impl/UnipayServiceImpl.java b/src/main/java/cc/mrbird/febs/pay/service/impl/UnipayServiceImpl.java index 65e9a09..fc530b3 100644 --- a/src/main/java/cc/mrbird/febs/pay/service/impl/UnipayServiceImpl.java +++ b/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)); -- Gitblit v1.9.1