Commit a9acbca78774583a55519397424d7ec6ef3e40ff
1 parent
7b17e3bc
【微信支付回调】: WXLitePayClient.java: 添加 v2和 v3的回调数据处理 WXNativePayClient.java: 添加 v2和 v3的回调数据处理 WXPubPayClient.java: 添加 v2和 v3的回调数据处理
Showing
3 changed files
with
112 additions
and
10 deletions
yudao-framework/yudao-spring-boot-starter-biz-pay/src/main/java/cn/iocoder/yudao/framework/pay/core/client/impl/wx/WXLitePayClient.java
| ... | ... | @@ -12,6 +12,7 @@ import cn.iocoder.yudao.framework.pay.core.client.dto.*; |
| 12 | 12 | import cn.iocoder.yudao.framework.pay.core.client.impl.AbstractPayClient; |
| 13 | 13 | import cn.iocoder.yudao.framework.pay.core.enums.PayChannelEnum; |
| 14 | 14 | import com.github.binarywang.wxpay.bean.notify.WxPayOrderNotifyResult; |
| 15 | +import com.github.binarywang.wxpay.bean.notify.WxPayOrderNotifyV3Result; | |
| 15 | 16 | import com.github.binarywang.wxpay.bean.order.WxPayMpOrderResult; |
| 16 | 17 | import com.github.binarywang.wxpay.bean.request.WxPayUnifiedOrderRequest; |
| 17 | 18 | import com.github.binarywang.wxpay.bean.request.WxPayUnifiedOrderV3Request; |
| ... | ... | @@ -139,13 +140,46 @@ public class WXLitePayClient extends AbstractPayClient<WXPayClientConfig> { |
| 139 | 140 | |
| 140 | 141 | @Override |
| 141 | 142 | public PayOrderNotifyRespDTO parseOrderNotify(PayNotifyDataDTO data) throws WxPayException { |
| 143 | + log.info("微信支付回调data数据:{}", data.getBody()); | |
| 144 | + // 微信支付 v2 回调结果处理 | |
| 145 | + switch (config.getApiVersion()) { | |
| 146 | + case WXPayClientConfig.API_VERSION_V2: | |
| 147 | + return parseOrderNotifyV2(data); | |
| 148 | + case WXPayClientConfig.API_VERSION_V3: | |
| 149 | + return parseOrderNotifyV3(data); | |
| 150 | + default: | |
| 151 | + throw new IllegalArgumentException(String.format("未知的 API 版本(%s)", config.getApiVersion())); | |
| 152 | + } | |
| 153 | + | |
| 154 | + } | |
| 155 | + | |
| 156 | + private PayOrderNotifyRespDTO parseOrderNotifyV3(PayNotifyDataDTO data) throws WxPayException { | |
| 157 | + WxPayOrderNotifyV3Result wxPayOrderNotifyV3Result = client.parseOrderNotifyV3Result(data.getBody(), null); | |
| 158 | + WxPayOrderNotifyV3Result.DecryptNotifyResult result = wxPayOrderNotifyV3Result.getResult(); | |
| 159 | + // 转换结果 | |
| 160 | + | |
| 161 | + return PayOrderNotifyRespDTO | |
| 162 | + .builder() | |
| 163 | + .orderExtensionNo(result.getOutTradeNo()) | |
| 164 | + .channelOrderNo(result.getTradeState()) | |
| 165 | + .successTime(DateUtil.parse(result.getSuccessTime(), "yyyy-MM-dd'T'HH:mm:ssXXX")) | |
| 166 | + .data(data.getBody()) | |
| 167 | + .build(); | |
| 168 | + } | |
| 169 | + | |
| 170 | + private PayOrderNotifyRespDTO parseOrderNotifyV2(PayNotifyDataDTO data) throws WxPayException { | |
| 142 | 171 | WxPayOrderNotifyResult notifyResult = client.parseOrderNotifyResult(data.getBody()); |
| 143 | 172 | Assert.isTrue(Objects.equals(notifyResult.getResultCode(), "SUCCESS"), "支付结果非 SUCCESS"); |
| 144 | 173 | // 转换结果 |
| 145 | - return PayOrderNotifyRespDTO.builder().orderExtensionNo(notifyResult.getOutTradeNo()) | |
| 146 | - .channelOrderNo(notifyResult.getTransactionId()).channelUserId(notifyResult.getOpenid()) | |
| 174 | + return PayOrderNotifyRespDTO | |
| 175 | + .builder() | |
| 176 | + .orderExtensionNo(notifyResult.getOutTradeNo()) | |
| 177 | + .channelOrderNo(notifyResult.getTransactionId()) | |
| 178 | + .channelUserId(notifyResult.getOpenid()) | |
| 147 | 179 | .successTime(DateUtil.parse(notifyResult.getTimeEnd(), "yyyyMMddHHmmss")) |
| 148 | - .data(data.getBody()).build(); | |
| 180 | + .data(data.getBody()) | |
| 181 | + .build(); | |
| 182 | + | |
| 149 | 183 | } |
| 150 | 184 | |
| 151 | 185 | @Override | ... | ... |
yudao-framework/yudao-spring-boot-starter-biz-pay/src/main/java/cn/iocoder/yudao/framework/pay/core/client/impl/wx/WXNativePayClient.java
| ... | ... | @@ -11,6 +11,7 @@ import cn.iocoder.yudao.framework.pay.core.client.dto.*; |
| 11 | 11 | import cn.iocoder.yudao.framework.pay.core.client.impl.AbstractPayClient; |
| 12 | 12 | import cn.iocoder.yudao.framework.pay.core.enums.PayChannelEnum; |
| 13 | 13 | import com.github.binarywang.wxpay.bean.notify.WxPayOrderNotifyResult; |
| 14 | +import com.github.binarywang.wxpay.bean.notify.WxPayOrderNotifyV3Result; | |
| 14 | 15 | import com.github.binarywang.wxpay.bean.order.WxPayNativeOrderResult; |
| 15 | 16 | import com.github.binarywang.wxpay.bean.request.WxPayUnifiedOrderRequest; |
| 16 | 17 | import com.github.binarywang.wxpay.bean.request.WxPayUnifiedOrderV3Request; |
| ... | ... | @@ -117,13 +118,46 @@ public class WXNativePayClient extends AbstractPayClient<WXPayClientConfig> { |
| 117 | 118 | |
| 118 | 119 | @Override |
| 119 | 120 | public PayOrderNotifyRespDTO parseOrderNotify(PayNotifyDataDTO data) throws WxPayException { |
| 121 | + log.info("微信支付回调data数据:{}", data.getBody()); | |
| 122 | + // 微信支付 v2 回调结果处理 | |
| 123 | + switch (config.getApiVersion()) { | |
| 124 | + case WXPayClientConfig.API_VERSION_V2: | |
| 125 | + return parseOrderNotifyV2(data); | |
| 126 | + case WXPayClientConfig.API_VERSION_V3: | |
| 127 | + return parseOrderNotifyV3(data); | |
| 128 | + default: | |
| 129 | + throw new IllegalArgumentException(String.format("未知的 API 版本(%s)", config.getApiVersion())); | |
| 130 | + } | |
| 131 | + | |
| 132 | + } | |
| 133 | + | |
| 134 | + private PayOrderNotifyRespDTO parseOrderNotifyV3(PayNotifyDataDTO data) throws WxPayException { | |
| 135 | + WxPayOrderNotifyV3Result wxPayOrderNotifyV3Result = client.parseOrderNotifyV3Result(data.getBody(), null); | |
| 136 | + WxPayOrderNotifyV3Result.DecryptNotifyResult result = wxPayOrderNotifyV3Result.getResult(); | |
| 137 | + // 转换结果 | |
| 138 | + | |
| 139 | + return PayOrderNotifyRespDTO | |
| 140 | + .builder() | |
| 141 | + .orderExtensionNo(result.getOutTradeNo()) | |
| 142 | + .channelOrderNo(result.getTradeState()) | |
| 143 | + .successTime(DateUtil.parse(result.getSuccessTime(), "yyyy-MM-dd'T'HH:mm:ssXXX")) | |
| 144 | + .data(data.getBody()) | |
| 145 | + .build(); | |
| 146 | + } | |
| 147 | + | |
| 148 | + private PayOrderNotifyRespDTO parseOrderNotifyV2(PayNotifyDataDTO data) throws WxPayException { | |
| 120 | 149 | WxPayOrderNotifyResult notifyResult = client.parseOrderNotifyResult(data.getBody()); |
| 121 | 150 | Assert.isTrue(Objects.equals(notifyResult.getResultCode(), "SUCCESS"), "支付结果非 SUCCESS"); |
| 122 | 151 | // 转换结果 |
| 123 | - return PayOrderNotifyRespDTO.builder().orderExtensionNo(notifyResult.getOutTradeNo()) | |
| 124 | - .channelOrderNo(notifyResult.getTransactionId()).channelUserId(notifyResult.getOpenid()) | |
| 125 | - .successTime(DateUtil.parse(notifyResult.getTimeEnd(), "yyyy-MM-dd'T'HH:mm:ssXXX")) | |
| 126 | - .data(data.getBody()).build(); | |
| 152 | + return PayOrderNotifyRespDTO | |
| 153 | + .builder() | |
| 154 | + .orderExtensionNo(notifyResult.getOutTradeNo()) | |
| 155 | + .channelOrderNo(notifyResult.getTransactionId()) | |
| 156 | + .channelUserId(notifyResult.getOpenid()) | |
| 157 | + .successTime(DateUtil.parse(notifyResult.getTimeEnd(), "yyyyMMddHHmmss")) | |
| 158 | + .data(data.getBody()) | |
| 159 | + .build(); | |
| 160 | + | |
| 127 | 161 | } |
| 128 | 162 | |
| 129 | 163 | @Override | ... | ... |
yudao-framework/yudao-spring-boot-starter-biz-pay/src/main/java/cn/iocoder/yudao/framework/pay/core/client/impl/wx/WXPubPayClient.java
| ... | ... | @@ -12,6 +12,7 @@ import cn.iocoder.yudao.framework.pay.core.client.dto.*; |
| 12 | 12 | import cn.iocoder.yudao.framework.pay.core.client.impl.AbstractPayClient; |
| 13 | 13 | import cn.iocoder.yudao.framework.pay.core.enums.PayChannelEnum; |
| 14 | 14 | import com.github.binarywang.wxpay.bean.notify.WxPayOrderNotifyResult; |
| 15 | +import com.github.binarywang.wxpay.bean.notify.WxPayOrderNotifyV3Result; | |
| 15 | 16 | import com.github.binarywang.wxpay.bean.order.WxPayMpOrderResult; |
| 16 | 17 | import com.github.binarywang.wxpay.bean.request.WxPayUnifiedOrderRequest; |
| 17 | 18 | import com.github.binarywang.wxpay.bean.request.WxPayUnifiedOrderV3Request; |
| ... | ... | @@ -132,13 +133,46 @@ public class WXPubPayClient extends AbstractPayClient<WXPayClientConfig> { |
| 132 | 133 | |
| 133 | 134 | @Override |
| 134 | 135 | public PayOrderNotifyRespDTO parseOrderNotify(PayNotifyDataDTO data) throws WxPayException { |
| 136 | + log.info("微信支付回调data数据:{}", data.getBody()); | |
| 137 | + // 微信支付 v2 回调结果处理 | |
| 138 | + switch (config.getApiVersion()) { | |
| 139 | + case WXPayClientConfig.API_VERSION_V2: | |
| 140 | + return parseOrderNotifyV2(data); | |
| 141 | + case WXPayClientConfig.API_VERSION_V3: | |
| 142 | + return parseOrderNotifyV3(data); | |
| 143 | + default: | |
| 144 | + throw new IllegalArgumentException(String.format("未知的 API 版本(%s)", config.getApiVersion())); | |
| 145 | + } | |
| 146 | + | |
| 147 | + } | |
| 148 | + | |
| 149 | + private PayOrderNotifyRespDTO parseOrderNotifyV3(PayNotifyDataDTO data) throws WxPayException { | |
| 150 | + WxPayOrderNotifyV3Result wxPayOrderNotifyV3Result = client.parseOrderNotifyV3Result(data.getBody(), null); | |
| 151 | + WxPayOrderNotifyV3Result.DecryptNotifyResult result = wxPayOrderNotifyV3Result.getResult(); | |
| 152 | + // 转换结果 | |
| 153 | + | |
| 154 | + return PayOrderNotifyRespDTO | |
| 155 | + .builder() | |
| 156 | + .orderExtensionNo(result.getOutTradeNo()) | |
| 157 | + .channelOrderNo(result.getTradeState()) | |
| 158 | + .successTime(DateUtil.parse(result.getSuccessTime(), "yyyy-MM-dd'T'HH:mm:ssXXX")) | |
| 159 | + .data(data.getBody()) | |
| 160 | + .build(); | |
| 161 | + } | |
| 162 | + | |
| 163 | + private PayOrderNotifyRespDTO parseOrderNotifyV2(PayNotifyDataDTO data) throws WxPayException { | |
| 135 | 164 | WxPayOrderNotifyResult notifyResult = client.parseOrderNotifyResult(data.getBody()); |
| 136 | 165 | Assert.isTrue(Objects.equals(notifyResult.getResultCode(), "SUCCESS"), "支付结果非 SUCCESS"); |
| 137 | 166 | // 转换结果 |
| 138 | - return PayOrderNotifyRespDTO.builder().orderExtensionNo(notifyResult.getOutTradeNo()) | |
| 139 | - .channelOrderNo(notifyResult.getTransactionId()).channelUserId(notifyResult.getOpenid()) | |
| 167 | + return PayOrderNotifyRespDTO | |
| 168 | + .builder() | |
| 169 | + .orderExtensionNo(notifyResult.getOutTradeNo()) | |
| 170 | + .channelOrderNo(notifyResult.getTransactionId()) | |
| 171 | + .channelUserId(notifyResult.getOpenid()) | |
| 140 | 172 | .successTime(DateUtil.parse(notifyResult.getTimeEnd(), "yyyyMMddHHmmss")) |
| 141 | - .data(data.getBody()).build(); | |
| 173 | + .data(data.getBody()) | |
| 174 | + .build(); | |
| 175 | + | |
| 142 | 176 | } |
| 143 | 177 | |
| 144 | 178 | @Override | ... | ... |