瀏覽代碼

【项目开发】

1.增加支付代码示例
ChenYL 9 月之前
父節點
當前提交
a512e931ab

+ 15 - 11
data-easy/src/main/java/com/dataeasy/server/TestController.java

@@ -1,20 +1,22 @@
 package com.dataeasy.server;
 
-import cn.binarywang.wx.miniapp.api.WxMaService;
-import cn.binarywang.wx.miniapp.bean.WxMaJscode2SessionResult;
+import com.dataeasy.server.common.annotation.IgnoreResponseWrapper;
+import com.github.binarywang.wxpay.bean.result.WxPayUnifiedOrderV3Result;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+
 import com.dataeasy.server.msg.WeChatMsgPushUtil;
 import com.dataeasy.server.pay.PayService;
 import com.github.binarywang.wxpay.exception.WxPayException;
+
+import cn.binarywang.wx.miniapp.api.WxMaService;
+import cn.binarywang.wx.miniapp.bean.WxMaJscode2SessionResult;
 import jakarta.servlet.http.HttpServletRequest;
 import lombok.extern.slf4j.Slf4j;
 import me.chanjar.weixin.common.error.WxErrorException;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.PathVariable;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RequestParam;
-import org.springframework.web.bind.annotation.RestController;
 
 /**
  * @author tyuio
@@ -38,10 +40,12 @@ public class TestController {
     private PayService payService;
 
     @GetMapping("/test/t2")
-    public void t2() throws WxPayException {
-        payService.createDdzqOrder();
+    public WxPayUnifiedOrderV3Result.JsapiResult t2() throws WxPayException {
+        WxPayUnifiedOrderV3Result.JsapiResult result = payService.createDdzqOrder();
+        return result;
     }
 
+    @IgnoreResponseWrapper
     @PostMapping("/pay/ddzqOrder")
     public String ddzqOrder(HttpServletRequest request) {
         return payService.ddzqOrder(request);

+ 20 - 22
data-easy/src/main/java/com/dataeasy/server/pay/PayService.java

@@ -1,6 +1,9 @@
 package com.dataeasy.server.pay;
 
+import com.github.binarywang.wxpay.bean.notify.SignatureHeader;
 import com.github.binarywang.wxpay.bean.notify.WxPayNotifyResponse;
+import com.github.binarywang.wxpay.bean.notify.WxPayNotifyV3Response;
+import com.github.binarywang.wxpay.bean.notify.WxPayNotifyV3Result;
 import com.github.binarywang.wxpay.bean.notify.WxPayOrderNotifyResult;
 import com.github.binarywang.wxpay.bean.order.WxPayMpOrderResult;
 import com.github.binarywang.wxpay.bean.request.WxPayUnifiedOrderRequest;
@@ -33,25 +36,11 @@ public class PayService {
     private WxPayService wxPayService;
 
     public WxPayUnifiedOrderV3Result.JsapiResult createDdzqOrder()throws WxPayException {
-//        String endPayMoney = new BigDecimal("0.01").multiply(BigDecimal.valueOf(100)).stripTrailingZeros().toPlainString();	//将金额转换为分
-        WxPayUnifiedOrderRequest.WxPayUnifiedOrderRequestBuilder builder = WxPayUnifiedOrderRequest.newBuilder();
-        WxPayUnifiedOrderRequest wxOrder = builder
-                .body("测试测试商品描述") //商品描述
-                .openid("oaeVR7FhHMDu3iqUOhcTgJJVdOM0") //用户openid
-                .outTradeNo("20250304000001")  //商户订单号
-//                .spbillCreateIp("0.0.0.0")  //终端IP
-//                .totalFee(endPayMoney) // 支付收款金额 100分  注意:单位(分)
-                .totalFee(1)  //测试时可以设置一分钱
-                .timeStart(DateTimeUtils.yyyyMMddHHmmssDateTime(0))	//交易起始时间
-                .timeExpire(DateTimeUtils.yyyyMMddHHmmssDateTime(10))  //交易结束时间
-                .tradeType(WxPayConstants.TradeType.JSAPI).build();
-        wxOrder.setSignType("MD5");
-//        wxOrder.setNotifyUrl("http://ra36qh.natappfree.cc/pay/ddzqOrder"); //不测试时需要放开注释
         WxPayUnifiedOrderV3Request wxOrderV3 = new WxPayUnifiedOrderV3Request();
         wxOrderV3.setDescription("测试商品得描述书");
-        wxOrderV3.setOutTradeNo("20250305000001");
-        wxOrderV3.setTimeExpire("2025-03-05T10:34:56+08:00");
-        wxOrderV3.setNotifyUrl("http://ra36qh.natappfree.cc/pay/ddzqOrder");
+        wxOrderV3.setOutTradeNo("20250305000007");
+        wxOrderV3.setTimeExpire("2025-03-05T16:34:56+08:00");
+        wxOrderV3.setNotifyUrl("http://hcedwe.natappfree.cc/pay/ddzqOrder");
         WxPayUnifiedOrderV3Request.Amount amount = new WxPayUnifiedOrderV3Request.Amount();
         WxPayUnifiedOrderV3Request.Payer payer = new WxPayUnifiedOrderV3Request.Payer();
         payer.setOpenid("oSoRX7Ll01EB7XfsYt5aVrF_KfLU");
@@ -59,17 +48,26 @@ public class PayService {
         amount.setTotal(1);
         wxOrderV3.setAmount(amount);
         return wxPayService.createOrderV3(TradeTypeEnum.JSAPI, wxOrderV3);
-//        return wxPayService.createOrder(wxOrder);
     }
 
     public String ddzqOrder(HttpServletRequest request) {
 
         try {
             String xmlResult = IOUtils.toString(request.getInputStream(), request.getCharacterEncoding());
-            WxPayOrderNotifyResult payResult = wxPayService.parseOrderNotifyResult(xmlResult);
+//            WxPayOrderNotifyResult payResult = wxPayService.parseOrderNotifyResult(xmlResult);
+            SignatureHeader signatureHeader = new SignatureHeader();
+            signatureHeader.setNonce(request.getHeader("Wechatpay-Nonce"));
+            signatureHeader.setSignature(request.getHeader("Wechatpay-Signature"));
+            signatureHeader.setSerial(request.getHeader("Wechatpay-Serial"));
+            signatureHeader.setTimeStamp(request.getHeader("Wechatpay-Timestamp"));
+            WxPayNotifyV3Result payResult1 = wxPayService.parseOrderNotifyV3Result(xmlResult, signatureHeader);
+            WxPayNotifyV3Result.DecryptNotifyResult payResult = payResult1.getResult();
             String masterOrderId = payResult.getOutTradeNo();//内部订单记录ID
             String wxTransactionId = payResult.getTransactionId();//商户号订单ID
-            BigDecimal wxRealPayAmount = new BigDecimal(BaseWxPayResult.fenToYuan(payResult.getTotalFee()));//微信真实支付金额
+            log.info("内部订单ID:{}", masterOrderId);
+            log.info("商户号订单ID:{}", wxTransactionId);
+            log.info("微信真实支付金额:{}", payResult.getAmount());
+//            BigDecimal wxRealPayAmount = new BigDecimal(BaseWxPayResult.fenToYuan(payResult.getTotalFee()));//微信真实支付金额
 //            StOrder stOrder = stOrderMapper.selectByEOrderId(masterOrderId);
 //            Date nowTime = new Date();
 //            if(stOrder.getPayStatus() == 1){
@@ -100,10 +98,10 @@ public class PayService {
 //            }
 
             log.info("微信支付,回调处理成功");
-            return WxPayNotifyResponse.success("处理成功!");
+            return WxPayNotifyV3Response.success("处理成功!");
         } catch (Exception e) {
             e.printStackTrace();
-            return WxPayNotifyResponse.fail(e.getMessage());
+            return WxPayNotifyV3Response.fail(e.getMessage());
         }
 
     }