소스 검색

微信回调验签测试

skyline 2 년 전
부모
커밋
bc860dfb3b
1개의 변경된 파일17개의 추가작업 그리고 11개의 파일을 삭제
  1. 17 11
      service/src/main/java/com/kym/service/wechat/impl/WxPayServiceImpl.java

+ 17 - 11
service/src/main/java/com/kym/service/wechat/impl/WxPayServiceImpl.java

@@ -42,6 +42,7 @@ import com.wechat.pay.java.service.payments.model.Transaction;
 import com.wechat.pay.java.service.refund.RefundService;
 import com.wechat.pay.java.service.refund.model.*;
 import jakarta.annotation.PostConstruct;
+import jakarta.servlet.ServletInputStream;
 import jakarta.servlet.http.HttpServletRequest;
 import lombok.SneakyThrows;
 import org.slf4j.Logger;
@@ -52,10 +53,7 @@ import org.springframework.http.ResponseEntity;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
-import java.io.BufferedReader;
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.IOException;
+import java.io.*;
 import java.nio.charset.StandardCharsets;
 import java.time.LocalDateTime;
 import java.util.ArrayList;
@@ -181,14 +179,22 @@ public class WxPayServiceImpl implements WxPayService {
         LOGGER.info("微信支付回调{}:\n Request参数:\n signature:{},serial:{},nonce:{},timestamp:{},signatureType:{}", no, signature, serial, nonce, timestamp, signatureType);
 
         // request中获取body
-        BufferedReader br = request.getReader();
-        String str;
-        var requestBody = new StringBuilder();
-        while ((str = br.readLine()) != null) {
-            requestBody.append(str);
+//        BufferedReader br = request.getReader();
+//        String str;
+//        var requestBody = new StringBuilder();
+//        while ((str = br.readLine()) != null) {
+//            requestBody.append(str);
+//        }
+
+        ServletInputStream inputStream = request.getInputStream();
+        ByteArrayOutputStream result = new ByteArrayOutputStream();
+        byte[] buffer = new byte[1024];
+        for (int lenght; (lenght = inputStream.read(buffer)) != -1; ) {
+            result.write(buffer, 0, lenght);
         }
 
-        LOGGER.info("微信支付回调{}:\nBody数据:\n{}", no, requestBody);
+
+        LOGGER.info("微信支付回调{}:\nBody数据:\n{}", no, result);
 
         // 构造 RequestParam
         RequestParam requestParam = new RequestParam.Builder()
@@ -196,7 +202,7 @@ public class WxPayServiceImpl implements WxPayService {
                 .nonce(nonce) // 随机数
                 .signature(signature)
                 .timestamp(timestamp)
-                .body(requestBody.toString())
+                .body(result.toString())
                 .build();
         LOGGER.info("微信支付回调{}:构造 RequestParam完毕", no);