瀏覽代碼

!895 新增支持微信H5网页支付
Merge pull request !895 from 杨宇庆/master

芋道源码 1 年之前
父節點
當前提交
d11ca8e73f

+ 64 - 0
yudao-framework/yudao-spring-boot-starter-biz-pay/src/main/java/cn/iocoder/yudao/framework/pay/core/client/impl/weixin/WxWapPayClient.java

@@ -0,0 +1,64 @@
+package cn.iocoder.yudao.framework.pay.core.client.impl.weixin;
+
+import cn.iocoder.yudao.framework.pay.core.client.dto.order.PayOrderRespDTO;
+import cn.iocoder.yudao.framework.pay.core.client.dto.order.PayOrderUnifiedReqDTO;
+import cn.iocoder.yudao.framework.pay.core.enums.channel.PayChannelEnum;
+import cn.iocoder.yudao.framework.pay.core.enums.order.PayOrderDisplayModeEnum;
+import com.github.binarywang.wxpay.bean.order.WxPayMpOrderResult;
+import com.github.binarywang.wxpay.bean.request.WxPayUnifiedOrderRequest;
+import com.github.binarywang.wxpay.bean.request.WxPayUnifiedOrderV3Request;
+import com.github.binarywang.wxpay.bean.result.enums.TradeTypeEnum;
+import com.github.binarywang.wxpay.constant.WxPayConstants;
+import com.github.binarywang.wxpay.exception.WxPayException;
+import lombok.extern.slf4j.Slf4j;
+
+import static cn.iocoder.yudao.framework.common.util.json.JsonUtils.toJsonString;
+
+/**
+ * 微信支付(H5网页)的 PayClient 实现类
+ *
+ * 文档:<a href="https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter3_3_1.shtml">H5下单API</>
+ *
+ * @author YYQ
+ */
+@Slf4j
+public class WxWapPayClient extends AbstractWxPayClient {
+
+    public WxWapPayClient(Long channelId, WxPayClientConfig config) {
+        super(channelId, PayChannelEnum.WX_WAP.getCode(), config);
+    }
+
+    protected WxWapPayClient(Long channelId, String channelCode, WxPayClientConfig config) {
+        super(channelId, channelCode, config);
+    }
+
+    @Override
+    protected void doInit() {
+        super.doInit(WxPayConstants.TradeType.MWEB);
+    }
+
+    @Override
+    protected PayOrderRespDTO doUnifiedOrderV2(PayOrderUnifiedReqDTO reqDTO) throws WxPayException {
+        // 构建 WxPayUnifiedOrderRequest 对象
+        WxPayUnifiedOrderRequest request = buildPayUnifiedOrderRequestV2(reqDTO);
+        // 执行请求
+        WxPayMwebOrderResult response = client.createOrder(request);
+
+        // 转换结果
+        return PayOrderRespDTO.waitingOf(PayOrderDisplayModeEnum.URL.getMode(), response.getMwebUrl(),
+                reqDTO.getOutTradeNo(), response);
+    }
+
+    @Override
+    protected PayOrderRespDTO doUnifiedOrderV3(PayOrderUnifiedReqDTO reqDTO) throws WxPayException {
+        // 构建 WxPayUnifiedOrderRequest 对象
+        WxPayUnifiedOrderV3Request request = buildPayUnifiedOrderRequestV3(reqDTO);
+        // 执行请求
+        String response = client.createOrderV3(TradeTypeEnum.H5, request);
+
+        // 转换结果
+        return PayOrderRespDTO.waitingOf(PayOrderDisplayModeEnum.URL.getMode(), response,
+                reqDTO.getOutTradeNo(), response);
+    }
+
+}

+ 1 - 0
yudao-module-pay/yudao-spring-boot-starter-biz-pay/src/main/java/cn/iocoder/yudao/framework/pay/core/client/impl/PayClientFactoryImpl.java

@@ -44,6 +44,7 @@ public class PayClientFactoryImpl implements PayClientFactory {
         clientClass.put(WX_APP, WxAppPayClient.class);
         clientClass.put(WX_BAR, WxBarPayClient.class);
         clientClass.put(WX_NATIVE, WxNativePayClient.class);
+        clientClass.put(WX_WAP, WxWapPayClient.class);
         // 支付包支付客户端
         clientClass.put(ALIPAY_WAP, AlipayWapPayClient.class);
         clientClass.put(ALIPAY_QR, AlipayQrPayClient.class);

+ 1 - 0
yudao-module-pay/yudao-spring-boot-starter-biz-pay/src/main/java/cn/iocoder/yudao/framework/pay/core/enums/channel/PayChannelEnum.java

@@ -17,6 +17,7 @@ import lombok.Getter;
 @AllArgsConstructor
 public enum PayChannelEnum {
 
+    WX_WAP("wx_wap", "微信 Wap 网站支付", WxPayClientConfig.class), // H5网页
     WX_PUB("wx_pub", "微信 JSAPI 支付", WxPayClientConfig.class), // 公众号网页
     WX_LITE("wx_lite", "微信小程序支付", WxPayClientConfig.class),
     WX_APP("wx_app", "微信 App 支付", WxPayClientConfig.class),