瀏覽代碼

feat : 微信支付回调调试修改

bilingfeng 2 年之前
父節點
當前提交
47e639bce0

+ 4 - 0
game-module/game-sdk/src/main/java/com/zanxiang/sdk/common/util/PayCommonUtil.java

@@ -34,6 +34,10 @@ public class PayCommonUtil {
                 sb.append(k).append("=").append(v).append("&");
             }
         }
+        packageParams.remove("sign");
+        packageParams.forEach((key, value) -> {
+            sb.append(key).append("=").append(value).append("&");
+        });
         sb.append("key=").append(apiKey);
         //算出摘要  
         String mySign = MD5Util.MD5Encode(sb.toString(), characterEncoding).toLowerCase();

+ 12 - 6
game-module/game-sdk/src/main/java/com/zanxiang/sdk/common/util/WxPayUtil.java

@@ -1,5 +1,7 @@
 package com.zanxiang.sdk.common.util;
 
+import com.zanxiang.common.exception.BaseException;
+
 import javax.crypto.Mac;
 import javax.crypto.spec.SecretKeySpec;
 import java.io.BufferedReader;
@@ -81,8 +83,12 @@ public class WxPayUtil {
      * @param key  API密钥
      * @return 签名
      */
-    public static String generateSignature(final Map<String, String> data, String key) throws Exception {
-        return generateSignature(data, key, SIGN_MD5);
+    public static String generateSignature(final Map<String, String> data, String key) {
+        try {
+            return generateSignature(data, key, SIGN_MD5);
+        } catch (Exception e) {
+            throw new BaseException("计算腾讯微信接口签名异常");
+        }
     }
 
     /**
@@ -93,7 +99,7 @@ public class WxPayUtil {
      * @param signType 签名加密方式
      * @return 签名
      */
-    public static String generateSignature(final Map<String, String> data, String key, String signType) throws Exception {
+    private static String generateSignature(final Map<String, String> data, String key, String signType) throws Exception {
         Set<String> keySet = data.keySet();
         String[] keyArray = keySet.toArray(new String[0]);
         Arrays.sort(keyArray);
@@ -141,7 +147,7 @@ public class WxPayUtil {
      * @return MD5结果
      */
     private static String MD5(String data) throws Exception {
-        java.security.MessageDigest md = MessageDigest.getInstance("MD5");
+        java.security.MessageDigest md = MessageDigest.getInstance(SIGN_MD5);
         byte[] array = md.digest(data.getBytes(StandardCharsets.UTF_8));
         StringBuilder sb = new StringBuilder();
         for (byte item : array) {
@@ -159,8 +165,8 @@ public class WxPayUtil {
      * @throws Exception : 异常
      */
     public static String HMACSHA256(String data, String key, boolean upperCase) throws Exception {
-        Mac sha256HMAC = Mac.getInstance("HmacSHA256");
-        SecretKeySpec secretKey = new SecretKeySpec(key.getBytes(StandardCharsets.UTF_8), "HmacSHA256");
+        Mac sha256HMAC = Mac.getInstance(SIGN_HMACSHA256);
+        SecretKeySpec secretKey = new SecretKeySpec(key.getBytes(StandardCharsets.UTF_8), SIGN_HMACSHA256);
         sha256HMAC.init(secretKey);
         byte[] array = sha256HMAC.doFinal(data.getBytes(StandardCharsets.UTF_8));
         StringBuilder sb = new StringBuilder();

+ 4 - 3
game-module/game-sdk/src/main/java/com/zanxiang/sdk/service/Impl/pay/WxPayServiceImpl.java

@@ -7,7 +7,6 @@ import com.zanxiang.common.exception.BaseException;
 import com.zanxiang.common.utils.JsonUtil;
 import com.zanxiang.common.utils.URIUtil;
 import com.zanxiang.sdk.common.constant.WxPayConstants;
-import com.zanxiang.sdk.common.util.PayCommonUtil;
 import com.zanxiang.sdk.common.util.WxPayUtil;
 import com.zanxiang.sdk.common.util.XmlUtil;
 import com.zanxiang.sdk.domain.bo.ProductPayAttachParamBO;
@@ -31,6 +30,7 @@ import java.io.InputStream;
 import java.nio.charset.StandardCharsets;
 import java.util.HashMap;
 import java.util.Map;
+import java.util.Objects;
 
 /**
  * @author xufeng
@@ -118,8 +118,9 @@ public class WxPayServiceImpl extends PayService implements OrderPayService {
         // 账号信息
         String key = config.getApiKey();
         // 判断签名是否正确
-        if (!PayCommonUtil.isTenPaySign(Constants.UTF8, packageParams, key)) {
-            log.info("通知签名验证失败");
+        String mySign = WxPayUtil.generateSignature(packageParams, key);
+        if (!Objects.equals(mySign, packageParams.get("sign"))) {
+            log.error("通知签名验证失败, muSign : {}, sign : {}", mySign, packageParams.get("sign"));
             return null;
         }
         log.info("微信支付成功回调");