姜永辉 1 год назад
Родитель
Сommit
dca1259a65

+ 6 - 0
src/main/java/com/dk/oauth/config/WechatPayConfigInfo.java

@@ -49,5 +49,11 @@ public class WechatPayConfigInfo {
     @Value("${wx.pay.wechatNotifyUrl}")
     private String wechatNotifyUrl;
 
+    /**
+     * 小程序退款的回调接口地址
+     */
+    @Value("${wx.pay.refundNotifyUrl}")
+    private String refundNotifyUrl;
+
 
 }

+ 33 - 0
src/main/java/com/dk/oauth/service/wxapi/basic/WechatPayService.java

@@ -12,7 +12,11 @@ import com.dk.oauth.mapper.TradeMapper;
 import com.dk.oauth.mapper.UserMapper;
 import com.github.binarywang.wxpay.bean.notify.WxPayOrderNotifyResult;
 import com.github.binarywang.wxpay.bean.request.BaseWxPayRequest;
+import com.github.binarywang.wxpay.bean.request.WxPayRefundRequest;
+import com.github.binarywang.wxpay.bean.request.WxPayRefundV3Request;
 import com.github.binarywang.wxpay.bean.request.WxPayUnifiedOrderRequest;
+import com.github.binarywang.wxpay.bean.result.WxPayRefundResult;
+import com.github.binarywang.wxpay.bean.result.WxPayRefundV3Result;
 import com.github.binarywang.wxpay.bean.result.WxPayUnifiedOrderResult;
 import com.github.binarywang.wxpay.config.WxPayConfig;
 import com.github.binarywang.wxpay.exception.WxPayException;
@@ -164,4 +168,33 @@ public class WechatPayService {
         wxPayService.setConfig(payConfig);
         return wxPayService;
     }
+
+    /**
+     * 退款
+     */
+    private Boolean refundWechat(String orderNo, String transactionId, BigDecimal amount) {
+        try {
+            log.info("rebackPay=>" + orderNo, transactionId, amount);
+            WxPayService wxPayService = this.getWxPayService();
+            //微信支付-申请退款请求参数
+            WxPayRefundRequest orderRequest = new WxPayRefundRequest();
+            orderRequest.setOutTradeNo(transactionId);
+            orderRequest.setOutRefundNo(orderNo);
+            orderRequest.setRefundFee(BaseWxPayRequest.yuanToFen(amount.toString()));//元转成分
+
+//        ShopOrderInfoDto shopOrderInfoDto = new ShopOrderInfoDto();
+//        shopOrderInfoDto.setPaymentSn(orderInfo.getPaymentSn());
+//        BigDecimal sumPayFee = shopOrderInfoMapper.selectSumPayFee(shopOrderInfoDto);
+//        orderRequest.setTotalFee(BaseWxPayRequest.yuanToFen(sumPayFee.toString()));
+            orderRequest.setNotifyUrl(wechatPayConfigInfo.getRefundNotifyUrl() + "/" + wechatPayConfigInfo.getAppId());
+            //调用微信V3退款API
+            WxPayRefundResult result = wxPayService.refund(orderRequest);
+            log.info("微信退款结果:" + result.toString());
+            return true;
+        } catch (Exception e) {
+            log.error("微信退款结果-异常:" + e.getStackTrace());
+            return false;
+        }
+
+    }
 }