|
@@ -0,0 +1,68 @@
|
|
|
+package cn.iocoder.yudao.framework.pay.core.client.impl.weixin;
|
|
|
+
|
|
|
+import cn.hutool.core.map.MapUtil;
|
|
|
+import cn.hutool.core.util.StrUtil;
|
|
|
+import cn.iocoder.yudao.framework.common.util.json.JsonUtils;
|
|
|
+import cn.iocoder.yudao.framework.pay.core.client.dto.order.PayOrderUnifiedReqDTO;
|
|
|
+import cn.iocoder.yudao.framework.pay.core.client.dto.order.PayOrderUnifiedRespDTO;
|
|
|
+import cn.iocoder.yudao.framework.pay.core.client.dto.refund.PayRefundUnifiedReqDTO;
|
|
|
+import cn.iocoder.yudao.framework.pay.core.client.dto.refund.PayRefundUnifiedRespDTO;
|
|
|
+import cn.iocoder.yudao.framework.pay.core.enums.PayChannelEnum;
|
|
|
+import cn.iocoder.yudao.framework.pay.core.enums.PayDisplayModeEnum;
|
|
|
+import com.github.binarywang.wxpay.bean.request.WxPayMicropayRequest;
|
|
|
+import com.github.binarywang.wxpay.bean.result.WxPayMicropayResult;
|
|
|
+import com.github.binarywang.wxpay.constant.WxPayConstants;
|
|
|
+import com.github.binarywang.wxpay.exception.WxPayException;
|
|
|
+
|
|
|
+public class WxBarPayClient extends AbstractWxPayClient {
|
|
|
+
|
|
|
+ public WxBarPayClient(Long channelId, WxPayClientConfig config) {
|
|
|
+ super(channelId, PayChannelEnum.WX_BAR.getCode(), config);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ protected void doInit() {
|
|
|
+ super.doInit(WxPayConstants.TradeType.MICROPAY);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ protected PayOrderUnifiedRespDTO doUnifiedOrderV2(PayOrderUnifiedReqDTO reqDTO) throws WxPayException {
|
|
|
+ // 构建 WxPayMicropayRequest 对象
|
|
|
+ WxPayMicropayRequest request = WxPayMicropayRequest.newBuilder()
|
|
|
+ .outTradeNo(reqDTO.getMerchantOrderId())
|
|
|
+ .body(reqDTO.getSubject())
|
|
|
+ .detail(reqDTO.getBody())
|
|
|
+ .totalFee(reqDTO.getAmount()) // 单位分
|
|
|
+ .timeExpire(formatDateV2(reqDTO.getExpireTime()))
|
|
|
+ .spbillCreateIp(reqDTO.getUserIp())
|
|
|
+ .authCode(getAuthCode(reqDTO))
|
|
|
+ .build();
|
|
|
+ // 执行请求
|
|
|
+ WxPayMicropayResult response = client.micropay(request);
|
|
|
+
|
|
|
+ // 转换结果
|
|
|
+ // TODO 芋艿:这里后面要看看
|
|
|
+ return new PayOrderUnifiedRespDTO().setDisplayMode(PayDisplayModeEnum.CUSTOM.getMode())
|
|
|
+ .setDisplayContent(JsonUtils.toJsonString(response));
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ protected PayOrderUnifiedRespDTO doUnifiedOrderV3(PayOrderUnifiedReqDTO reqDTO) throws WxPayException {
|
|
|
+ return doUnifiedOrderV2(reqDTO);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ protected PayRefundUnifiedRespDTO doUnifiedRefund(PayRefundUnifiedReqDTO reqDTO) {
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+
|
|
|
+ // ========== 各种工具方法 ==========
|
|
|
+ static String getAuthCode(PayOrderUnifiedReqDTO reqDTO) {
|
|
|
+ String authCode = MapUtil.getStr(reqDTO.getChannelExtras(), "authCode");
|
|
|
+ if (StrUtil.isEmpty(authCode)) {
|
|
|
+ throw new IllegalArgumentException("支付请求的 authCode 不能为空!");
|
|
|
+ }
|
|
|
+ return authCode;
|
|
|
+ }
|
|
|
+
|
|
|
+}
|