Procházet zdrojové kódy

微信回调验签测试

skyline před 2 roky
rodič
revize
41fdc4bbb9

+ 1 - 0
admin/src/main/resources/application-dev.yml

@@ -45,6 +45,7 @@ wechat:
     fapiaoFiles: https://api.mch.weixin.qq.com/v3/new-tax-control-fapiao/fapiao-applications/%s/fapiao-files
     queryFapiao: https://api.mch.weixin.qq.com/v3/new-tax-control-fapiao/fapiao-applications/%s
     titleUrl: https://api.mch.weixin.qq.com/v3/new-tax-control-fapiao/user-title/title-url
+    userTitle: https://api.mch.weixin.qq.com/v3/new-tax-control-fapiao/user-title?scene=WITHOUT_WECHATPAY&fapiao_apply_id=%s
 
 spring:
   datasource:

+ 1 - 0
common/src/main/java/com/kym/common/config/WxFapiaoConfig.java

@@ -22,6 +22,7 @@ public class WxFapiaoConfig {
     private String fapiaoFiles;
     private String queryFapiao;
     private String titleUrl;
+    private String userTitle;
     private String cardTemplate;
 
 }

+ 1 - 0
miniapp/src/main/resources/application-dev.yml

@@ -45,6 +45,7 @@ wechat:
     fapiaoFiles: https://api.mch.weixin.qq.com/v3/new-tax-control-fapiao/fapiao-applications/%s/fapiao-files
     queryFapiao: https://api.mch.weixin.qq.com/v3/new-tax-control-fapiao/fapiao-applications/%s
     titleUrl: https://api.mch.weixin.qq.com/v3/new-tax-control-fapiao/user-title/title-url
+    userTitle: https://api.mch.weixin.qq.com/v3/new-tax-control-fapiao/user-title?scene=WITHOUT_WECHATPAY&fapiao_apply_id=%s
     cardTemplate: https://api.mch.weixin.qq.com/v3/new-tax-control-fapiao/card-template
 
 spring:

+ 3 - 0
service/src/main/java/com/kym/service/wechat/WxPayService.java

@@ -2,6 +2,7 @@ package com.kym.service.wechat;
 
 import com.alibaba.fastjson2.JSONObject;
 import com.kym.entity.miniapp.Invoice;
+import com.kym.entity.wechat.FaPiao;
 import com.kym.entity.wechat.InvoiceBaseInfo;
 import com.kym.entity.wechat.TitleUrl;
 import com.wechat.pay.java.service.payments.jsapi.model.PrepayWithRequestPaymentResponse;
@@ -43,6 +44,8 @@ public interface WxPayService {
 
     void titleWriteNotice(Object[] notifyRes);
 
+    FaPiao.BuyerInformation userTitle(String applyId);
+
     InvoiceBaseInfo baseInformation();
 
     void fapiaoApplication(String invoiceId);

+ 8 - 15
service/src/main/java/com/kym/service/wechat/impl/WxPayServiceImpl.java

@@ -216,7 +216,7 @@ public class WxPayServiceImpl implements WxPayService {
     }
 
     @SneakyThrows
-    Object[] handleWxNotify2(HttpServletRequest request,String body) {
+    Object[] handleWxNotify2(HttpServletRequest request, String body) {
         var no = RandomUtil.randomInt(1000, 9999);
         var signature = request.getHeader("Wechatpay-Signature");
         var serial = request.getHeader("Wechatpay-Serial");
@@ -232,6 +232,8 @@ public class WxPayServiceImpl implements WxPayService {
         for (int lenght; (lenght = inputStream.read(buffer)) != -1; ) {
             result.write(buffer, 0, lenght);
         }
+        LOGGER.info("【body1】:{}",request);
+        LOGGER.info("【body2】:{}",body);
 
 
         LOGGER.info("微信支付回调{}:\nBody数据:\n{}", no, result);
@@ -699,17 +701,14 @@ public class WxPayServiceImpl implements WxPayService {
      * event_type为FAPIAO.USER_APPLIED
      *
      * @param notifyRes
-     * @param body
      */
     @Override
     public void titleWriteNotice(Object[] notifyRes) {
         try {
-//            TitleWriteNotification titleWriteNotification = ((NotificationParser) notifyRes[1]).parse((RequestParam) notifyRes[0], TitleWriteNotification.class);
-            Map<String,Object> titleWriteNotification = ((NotificationParser) notifyRes[1]).parse((RequestParam) notifyRes[0], Map.class);
+            TitleWriteNotification titleWriteNotification = ((NotificationParser) notifyRes[1]).parse((RequestParam) notifyRes[0], TitleWriteNotification.class);
 
             // 查询用户填写的抬头信息
-//            var applyId = titleWriteNotification.getFapiaoApplyId();
-            var applyId = titleWriteNotification.get("fapiao_apply_id").toString();
+            var applyId = titleWriteNotification.getFapiaoApplyId();
             LOGGER.info("回调成功,applyId:{}", applyId);
             var buyerInformation = userTitle(applyId);
 
@@ -757,17 +756,11 @@ public class WxPayServiceImpl implements WxPayService {
      * @param applyId
      * @return
      */
+    @Override
     public FaPiao.BuyerInformation userTitle(String applyId) {
         var headers = new HttpHeaders();
         headers.addHeader("Accept", "application/json");
-        var params = """
-                {
-                  "fapiao_apply_id" : %s,
-                  "scene" : %s
-                }
-                """.stripIndent().formatted(applyId, "WITHOUT_WECHATPAY"); // 非微信支付场景
-        var requestBody = new JsonRequestBody.Builder().body(params).build();
-        var res = wxHttpClient.patch(headers, fapiaoConfig.getDevConfig(), requestBody, FaPiao.BuyerInformation.class);
+        var res = wxHttpClient.get(headers, fapiaoConfig.getUserTitle().formatted(applyId), FaPiao.BuyerInformation.class);
         LOGGER.info("用户发票申请applyId:{},抬头信息:{}", applyId, res);
         return res.getServiceResponse();
     }
@@ -882,7 +875,7 @@ public class WxPayServiceImpl implements WxPayService {
      */
     @Override
     public void invoiceNotify(HttpServletRequest request, String body) {
-        var notifyRes = handleWxNotify2(request,body);
+        var notifyRes = handleWxNotify2(request, body);
         var requestParam = (RequestParam) notifyRes[0];
         Notification notification = JSONObject.parseObject(requestParam.getBody(), Notification.class);
         switch (notification.getEventType()) {