From 037c144cd417410deb8137c6f3fd271a34691742 Mon Sep 17 00:00:00 2001
From: jiangping <jp@doumee.com>
Date: 星期二, 12 十二月 2023 18:18:17 +0800
Subject: [PATCH] 服务商支付版本

---
 server/web/src/main/java/com/doumee/api/web/PaymentCallback.java |  112 +++++++++++++++++++++++++++++++++++++++++++++++++-------
 1 files changed, 98 insertions(+), 14 deletions(-)

diff --git a/server/web/src/main/java/com/doumee/api/web/PaymentCallback.java b/server/web/src/main/java/com/doumee/api/web/PaymentCallback.java
index 6c00273..3358405 100644
--- a/server/web/src/main/java/com/doumee/api/web/PaymentCallback.java
+++ b/server/web/src/main/java/com/doumee/api/web/PaymentCallback.java
@@ -2,17 +2,27 @@
 
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.toolkit.StringUtils;
+import com.doumee.core.model.ApiResponse;
 import com.doumee.core.wx.WxMiniConfig;
 import com.doumee.service.business.GoodsorderService;
-import com.github.binarywang.wxpay.bean.notify.WxPayNotifyResponse;
-import com.github.binarywang.wxpay.bean.notify.WxPayOrderNotifyResult;
-import com.github.binarywang.wxpay.config.WxPayConfig;
+import com.doumee.service.business.RefundService;
+import com.wechat.pay.java.core.RSAAutoCertificateConfig;
+import com.wechat.pay.java.core.notification.NotificationConfig;
+import com.wechat.pay.java.core.notification.NotificationParser;
+import com.wechat.pay.java.core.notification.RequestParam;
+import com.wechat.pay.java.service.partnerpayments.jsapi.model.Transaction;
+import com.wechat.pay.java.service.refund.model.RefundNotification;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.CrossOrigin;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RestController;
+
+import javax.servlet.ServletInputStream;
+import javax.servlet.http.HttpServletRequest;
+import java.io.BufferedReader;
+import java.io.InputStreamReader;
 
 /**
  * Created by IntelliJ IDEA.
@@ -31,21 +41,50 @@
     /**
      * 銆愬井淇℃敮浠樸�戝紓姝ラ�氱煡
      *
-     * @param xmlResult
      * @return
      */
     @PostMapping("/api/wxPayNotify")
-    public String wxPay_notify(@RequestBody String xmlResult) {
-        log.info(xmlResult);
-        if (StringUtils.isBlank(xmlResult)) return null;
+    public ApiResponse wxPay_notify(HttpServletRequest request) {
         try {
-            WxPayOrderNotifyResult result = WxMiniConfig.wxPayService.parseOrderNotifyResult(xmlResult);
+            ServletInputStream inputStream = request.getInputStream();
+            StringBuffer stringBuffer = new StringBuffer();
+            BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
+            String s;
+            //璇诲彇鍥炶皟璇锋眰浣�
+            while ((s = bufferedReader.readLine()) != null) {
+                stringBuffer.append(s);
+            }
+            String body = stringBuffer.toString();
+            String timestamp = request.getHeader("Wechatpay-Timestamp");
+            String nonce = request.getHeader("Wechatpay-Nonce");
+            String signType = request.getHeader("Wechatpay-Signature-Type");
+            String serialNo = request.getHeader("wechatpay-Serial");
+            String signature = request.getHeader("Wechatpay-Signature");
+            RequestParam requestParam = new RequestParam.Builder()
+                    .serialNumber(serialNo)
+                    .nonce(nonce)
+                    .signType(signType)
+                    .signature(signature)
+                    .timestamp(String.valueOf(timestamp))
+                    .body(body)
+                    .build();
+
+            NotificationConfig config = new RSAAutoCertificateConfig.Builder()
+                    .merchantId(WxMiniConfig.wxProperties.getMchId())
+                    .privateKeyFromPath(WxMiniConfig.wxProperties.getPrivateKeyPath())
+                    .merchantSerialNumber(WxMiniConfig.wxProperties.getSerialNumer())
+                    .apiV3Key(WxMiniConfig.wxProperties.getApiV3Key())
+                    .build();
+
+
+            NotificationParser parser = new NotificationParser(config);
+            Transaction result = parser.parse(requestParam, Transaction.class);
             //鑷畾涔夎鍗曞彿
             String outTradeNo = result.getOutTradeNo();
             //寰俊璁㈠崟鍙�
             String paymentNo = result.getTransactionId();
-            if ("SUCCESS".equals(result.getReturnCode())) {
-                // 鏀粯鎴愬姛
+            if ("SUCCESS".equals(result.getTradeState().name())) {
+                // 鏀粯鎴愬姛ge
                 switch (result.getAttach()) {
                     //鏀粯璁㈠崟鍥炶皟
                     case "createGoodsOrder": {
@@ -57,17 +96,62 @@
                 // 鏀粯澶辫触
                 switch (result.getAttach()) {
                     case "createGoodsOrder": {
-
                         break;
                     }
                 }
-                return WxPayNotifyResponse.fail(result.getReturnMsg());
             }
-            return WxPayNotifyResponse.success("澶勭悊鎴愬姛!");
+            return ApiResponse.success("澶勭悊鎴愬姛!");
         } catch (Exception e) {
             e.printStackTrace();
             log.error("寰俊鍥炶皟缁撴灉寮傚父,寮傚父鍘熷洜{}", e.getLocalizedMessage());
-            return WxPayNotifyResponse.fail(e.getMessage());
+            return ApiResponse.failed("");
+        }
+    }
+    @PostMapping("/api/wxRefundNotify")
+    public ApiResponse wxRefundNotify(HttpServletRequest request) {
+        try {
+            ServletInputStream inputStream = request.getInputStream();
+            StringBuffer stringBuffer = new StringBuffer();
+            BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
+            String s;
+            //璇诲彇鍥炶皟璇锋眰浣�
+            while ((s = bufferedReader.readLine()) != null) {
+                stringBuffer.append(s);
+            }
+            String body = stringBuffer.toString();
+            String timestamp = request.getHeader("Wechatpay-Timestamp");
+            String nonce = request.getHeader("Wechatpay-Nonce");
+            String signType = request.getHeader("Wechatpay-Signature-Type");
+            String serialNo = request.getHeader("wechatpay-Serial");
+            String signature = request.getHeader("Wechatpay-Signature");
+            RequestParam requestParam = new RequestParam.Builder()
+                    .serialNumber(serialNo)
+                    .nonce(nonce)
+                    .signType(signType)
+                    .signature(signature)
+                    .timestamp(String.valueOf(timestamp))
+                    .body(body)
+                    .build();
+
+            NotificationConfig config = new RSAAutoCertificateConfig.Builder()
+                    .merchantId(WxMiniConfig.wxProperties.getMchId())
+                    .privateKeyFromPath(WxMiniConfig.wxProperties.getPrivateKeyPath())
+                    .merchantSerialNumber(WxMiniConfig.wxProperties.getSerialNumer())
+                    .apiV3Key(WxMiniConfig.wxProperties.getApiV3Key())
+                    .build();
+
+
+            NotificationParser parser = new NotificationParser(config);
+            RefundNotification result = parser.parse(requestParam, RefundNotification.class);
+//            if ("SUCCESS".equals(result.getRefundStatus().name())) {
+                // 鏀粯鎴愬姛ge
+                     goodsorderService.closeGoodsorderDone(result);
+//            }
+            return ApiResponse.success("澶勭悊鎴愬姛");
+        } catch (Exception e) {
+            e.printStackTrace();
+            log.error("寰俊鍥炶皟缁撴灉寮傚父,寮傚父鍘熷洜{}", e.getLocalizedMessage());
+            return ApiResponse.failed("");
         }
     }
 

--
Gitblit v1.9.3