From bb70c6051ae2b9288ff32ac7d00ab70aedb68e1a Mon Sep 17 00:00:00 2001 From: Derran Date: Tue, 30 Apr 2024 17:13:01 +0800 Subject: [PATCH] =?UTF-8?q?=E5=9F=BA=E7=A1=80=E9=85=8D=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../entity/PaymentChannelOrder.java | 3 +++ .../PaymentChannelOrderApplicationService.java | 14 +++++++++++--- .../processor/IChannelPayService.java | 3 ++- .../processor/wechat/WeChatPayProcessor.java | 16 ++++++---------- 4 files changed, 22 insertions(+), 14 deletions(-) diff --git a/dating-agency-mall-entity/src/main/java/com/qniao/dam/domain/aggregate/paymentchannelorder/entity/PaymentChannelOrder.java b/dating-agency-mall-entity/src/main/java/com/qniao/dam/domain/aggregate/paymentchannelorder/entity/PaymentChannelOrder.java index 0977c5a..5e93cae 100644 --- a/dating-agency-mall-entity/src/main/java/com/qniao/dam/domain/aggregate/paymentchannelorder/entity/PaymentChannelOrder.java +++ b/dating-agency-mall-entity/src/main/java/com/qniao/dam/domain/aggregate/paymentchannelorder/entity/PaymentChannelOrder.java @@ -22,6 +22,9 @@ public class PaymentChannelOrder extends Entity { @ApiModelProperty("付款方式") private PaymentMethodEnum paymentMethod; + @ApiModelProperty("openId") + private String openId; + @ApiModelProperty("应用ID") private Long appId; diff --git a/dating-agency-mall-server/src/main/java/com/qniao/dam/application/service/paymentchannelorder/PaymentChannelOrderApplicationService.java b/dating-agency-mall-server/src/main/java/com/qniao/dam/application/service/paymentchannelorder/PaymentChannelOrderApplicationService.java index 7478479..3e2b79b 100644 --- a/dating-agency-mall-server/src/main/java/com/qniao/dam/application/service/paymentchannelorder/PaymentChannelOrderApplicationService.java +++ b/dating-agency-mall-server/src/main/java/com/qniao/dam/application/service/paymentchannelorder/PaymentChannelOrderApplicationService.java @@ -7,6 +7,9 @@ import com.qniao.dam.domain.aggregate.paymentchannelorder.entity.PaymentChannelO import com.qniao.dam.domain.aggregate.paymentorder.entity.PaymentOrder; import com.qniao.dam.domain.aggregate.paymentorder.repository.PaymentOrderRepository; import com.qniao.dam.query.useropenid.UserOpenIdQueryService; +import com.qniao.dau.application.UecServerApplicationService; +import com.qniao.dau.application.request.GetWechatSessionDto; +import com.qniao.dau.application.response.WeChatAppletUserSessionVo; import org.springframework.stereotype.Service; import javax.annotation.Resource; @@ -16,22 +19,27 @@ import java.util.Map; @Service public class PaymentChannelOrderApplicationService { - @Resource - private UserOpenIdQueryService userOpenIdQueryService; @Resource private PaymentOrderRepository paymentOrderRepository; @Resource private PaymentChannelOrderAggregate paymentChannelOrderAggregate; + @Resource + private UecServerApplicationService uecServerApplicationService; /** * todo 旧的付款单失效处理? */ public Map prePay(PaymentChannelOrder paymentChannelOrder, Long userId, List fieldList, Long appFrom) { + // 获取账号 + String jsCode = ThirdPartyField.findFiledValueByKey(ThirdPartyField.JS_CODE, fieldList); + GetWechatSessionDto sessionDto = new GetWechatSessionDto(jsCode, appFrom); + WeChatAppletUserSessionVo sessionVo = uecServerApplicationService.getWechatSession(sessionDto); PaymentOrder paymentOrder = paymentOrderRepository.load(paymentChannelOrder.getTxnOrderId()); + paymentChannelOrder.setOpenId(sessionVo.getOpenid()); paymentChannelOrder.setAmount(paymentOrder.getUnpaidAmount()); paymentChannelOrder.setComment("订单交易"); paymentChannelOrderAggregate.create(paymentChannelOrder); IChannelPayService channelPayService = IChannelPayService.getService(paymentChannelOrder.getPaymentMethod()); - return channelPayService.prepay(paymentChannelOrder, fieldList, appFrom); + return channelPayService.prepay(paymentChannelOrder, sessionVo.getPlatformAppId(), sessionVo.getOpenid()); } } diff --git a/dating-agency-mall-server/src/main/java/com/qniao/dam/application/service/paymentchannelorder/processor/IChannelPayService.java b/dating-agency-mall-server/src/main/java/com/qniao/dam/application/service/paymentchannelorder/processor/IChannelPayService.java index 6f71682..bdd9e80 100644 --- a/dating-agency-mall-server/src/main/java/com/qniao/dam/application/service/paymentchannelorder/processor/IChannelPayService.java +++ b/dating-agency-mall-server/src/main/java/com/qniao/dam/application/service/paymentchannelorder/processor/IChannelPayService.java @@ -4,6 +4,7 @@ import com.qniao.dam.api.command.paymentchannelorder.user.request.ThirdPartyFiel import com.qniao.dam.application.service.paymentchannelorder.processor.wechat.WeChatPayProcessor; import com.qniao.dam.domain.aggregate.paymentchannelorder.entity.PaymentChannelOrder; import com.qniao.dam.domian.aggregate.paymentorder.constant.PaymentMethodEnum; +import com.qniao.dau.application.response.WeChatAppletUserSessionVo; import com.qniao.framework.exception.BizException; import com.qniao.framework.utils.SpringContextUtil; @@ -22,5 +23,5 @@ public abstract class IChannelPayService { } } - public abstract Map prepay(PaymentChannelOrder paymentChannelOrder, List fieldList, Long appFrom); + public abstract Map prepay(PaymentChannelOrder paymentChannelOrder, String platformAppId, String openId); } diff --git a/dating-agency-mall-server/src/main/java/com/qniao/dam/application/service/paymentchannelorder/processor/wechat/WeChatPayProcessor.java b/dating-agency-mall-server/src/main/java/com/qniao/dam/application/service/paymentchannelorder/processor/wechat/WeChatPayProcessor.java index 5f0a7b4..039e769 100644 --- a/dating-agency-mall-server/src/main/java/com/qniao/dam/application/service/paymentchannelorder/processor/wechat/WeChatPayProcessor.java +++ b/dating-agency-mall-server/src/main/java/com/qniao/dam/application/service/paymentchannelorder/processor/wechat/WeChatPayProcessor.java @@ -39,18 +39,14 @@ public class WeChatPayProcessor extends IChannelPayService { @Override public Map prepay(PaymentChannelOrder paymentChannelOrder, - List fieldList, - Long appFrom) { - // 获取账号 - String jsCode = ThirdPartyField.findFiledValueByKey(ThirdPartyField.JS_CODE, fieldList); - GetWechatSessionDto sessionDto = new GetWechatSessionDto(jsCode, appFrom); - WeChatAppletUserSessionVo sessionVo = uecServerApplicationService.getWechatSession(sessionDto); + String platformAppId, + String openId) { try { Map reqParams = new HashMap<>(); reqParams.put("mchid", mchId); reqParams.put("out_trade_no", paymentChannelOrder.getId().toString()); - reqParams.put("appid", sessionVo.getPlatformAppId()); + reqParams.put("appid", platformAppId); reqParams.put("description", paymentChannelOrder.getComment()); reqParams.put("notify_url", notifyUrl); reqParams.put("amount", new HashMap() { @@ -61,7 +57,7 @@ public class WeChatPayProcessor extends IChannelPayService { }); reqParams.put("payer", new HashMap() { { - put("openid", sessionVo.getOpenid()); + put("openid", openId); } }); JSONObject result = wxPayV3Util.doPostWeiXinV3(WXPayV3Util.api_v3_placeAnOrder_url, JSONUtil.toJsonStr(reqParams)); @@ -75,14 +71,14 @@ public class WeChatPayProcessor extends IChannelPayService { long timestamp = System.currentTimeMillis() / 1000; String sign; try { - sign = wxPayV3Util.sign(sessionVo.getPlatformAppId(), timestamp, nonceStr, "prepay_id=" + prepayId); + sign = wxPayV3Util.sign(platformAppId, timestamp, nonceStr, "prepay_id=" + prepayId); } catch (Exception e) { log.error(" sign fail AppV3PayStrategyImpl {}", e.getMessage(), e); throw new BizException("生成签名错误:" + e.getMessage()); } log.info("sign____________________" + sign); Map returnMap = new HashMap<>(); - returnMap.put("appId", sessionVo.getPlatformAppId()); + returnMap.put("appId", platformAppId); returnMap.put("nonceStr", nonceStr); returnMap.put("timeStamp", String.valueOf(timestamp)); returnMap.put("packages", "prepay_id=" + prepayId);