Parcourir la source

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

bilingfeng il y a 2 ans
Parent
commit
f168d091d6

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

@@ -1,124 +0,0 @@
-package com.zanxiang.sdk.common.util;
-
-import com.zanxiang.common.utils.MD5Util;
-import org.apache.logging.log4j.util.Strings;
-
-import java.text.SimpleDateFormat;
-import java.util.Date;
-import java.util.Map;
-import java.util.Set;
-import java.util.SortedMap;
-
-/**
- * @author xufeng
- * @date 2022/6/8 15:37
- */
-public class PayCommonUtil {
-
-    /**
-     * 是否签名正确,规则是:按参数名称a-z排序,遇到空值的参数不参加签名
-     *
-     * @param characterEncoding
-     * @param packageParams
-     * @param apiKey
-     * @return
-     */
-    public static boolean isTenPaySign(String characterEncoding, Map<String, String> packageParams, String apiKey) {
-        StringBuilder sb = new StringBuilder();
-        Set es = packageParams.entrySet();
-        for (Object e : es) {
-            Map.Entry entry = (Map.Entry) e;
-            String k = (String) entry.getKey();
-            String v = (String) entry.getValue();
-            if (!"sign".equals(k) && null != v && !"".equals(v)) {
-                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();
-        String tenPaySign = (packageParams.get("sign")).toLowerCase();
-        return tenPaySign.equals(mySign);
-    }
-
-    /**
-     * sign签名
-     *
-     * @param characterEncoding
-     * @param packageParams
-     * @param apiKey
-     * @return
-     */
-    public static String createSign(String characterEncoding, SortedMap<Object, Object> packageParams, String apiKey) {
-        StringBuilder sb = new StringBuilder();
-        Set es = packageParams.entrySet();
-        for (Object e : es) {
-            Map.Entry entry = (Map.Entry) e;
-            String k = (String) entry.getKey();
-            String v = entry.getValue() == null ? "" : (String) entry.getValue();
-            if (Strings.isNotBlank(v) && !"sign".equals(k) && !"key".equals(k)) {
-                sb.append(k).append("=").append(v).append("&");
-            }
-        }
-        sb.append("key=").append(apiKey);
-        return MD5Util.MD5Encode(sb.toString(), characterEncoding).toUpperCase();
-    }
-
-    /**
-     * 将请求参数转换为xml格式的string
-     *
-     * @param parameters
-     * @return
-     */
-    public static String getRequestXml(SortedMap<Object, Object> parameters) {
-        StringBuilder sb = new StringBuilder();
-        sb.append("<xml>");
-        Set es = parameters.entrySet();
-        for (Object e : es) {
-            Map.Entry entry = (Map.Entry) e;
-            String k = (String) entry.getKey();
-            String v = (String) entry.getValue();
-            if ("attach".equalsIgnoreCase(k) || "body".equalsIgnoreCase(k) || "sign".equalsIgnoreCase(k)) {
-                sb.append("<").append(k).append(">").append("<![CDATA[").append(v).append("]]></").append(k).append(">");
-            } else {
-                sb.append("<").append(k).append(">").append(v).append("</").append(k).append(">");
-            }
-        }
-        sb.append("</xml>");
-        return sb.toString();
-    }
-
-    /**
-     * 取出一个指定长度大小的随机正整数.
-     *
-     * @param length
-     * @return
-     */
-    public static int buildRandom(int length) {
-        int num = 1;
-        double random = Math.random();
-        if (random < 0.1) {
-            random = random + 0.1;
-        }
-        for (int i = 0; i < length; i++) {
-            num = num * 10;
-        }
-        return (int) ((random * num));
-    }
-
-    /**
-     * 获取当前时间
-     *
-     * @return String
-     */
-    public static String getCurrTime() {
-        Date now = new Date();
-        SimpleDateFormat outFormat = new SimpleDateFormat("yyyyMMddHHmmss");
-        String s = outFormat.format(now);
-        return s;
-    }
-}

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

@@ -102,13 +102,10 @@ public class WxPayServiceImpl extends PayService implements OrderPayService {
         // 读取参数
         InputStream inputStream = request.getInputStream();
         String requestStr = IOUtils.toString(inputStream, StandardCharsets.UTF_8);
-        log.info("微信支付回调 body:{}", requestStr);
         // 解析xml成map
         Map<String, String> packageParams = XmlUtil.xmlToMap(requestStr);
-        log.info("微信支付回调 map:{}", JsonUtil.toString(packageParams));
         //获取订单信息
         String attachStr = packageParams.get("attach");
-        log.info("微信支付回调 attachStr:{}", attachStr);
         ProductPayAttachParamBO attachBO = JsonUtil.toObj(attachStr, ProductPayAttachParamBO.class);
         if (attachBO == null) {
             log.info("回调参数中attach值为空");
@@ -126,23 +123,23 @@ public class WxPayServiceImpl extends PayService implements OrderPayService {
         log.info("微信支付成功回调");
         // 处理业务开始
         Map<String, String> xmlMap = new HashMap<>();
-        BufferedOutputStream out = new BufferedOutputStream(response.getOutputStream());
-        if (!Constants.SUCCESS.equalsIgnoreCase(packageParams.get("result_code"))) {
-            log.info("支付失败,错误信息:{}", packageParams.get("err_code"));
-            xmlMap.put("return_code", "FAIL");
-            xmlMap.put("return_msg", "报文为空");
-        }
         if (Constants.SUCCESS.equalsIgnoreCase(packageParams.get("result_code"))) {
             String orderNo = packageParams.get("out_trade_no");
             log.info("微信订单号{}付款成功", orderNo);
-            if (paySuccess(attachBO.getOrderId(), String.valueOf(Float.parseFloat(packageParams.get("total_fee")) / 100), packageParams.get("transaction_id"), attachBO.getGamePayWayId())) {
+            if (paySuccess(attachBO.getOrderId(), String.valueOf(Float.parseFloat(packageParams.get("total_fee")) / 100),
+                    packageParams.get("transaction_id"), attachBO.getGamePayWayId())) {
                 // 通知微信.异步确认成功.必写.不然会一直通知后台.八次之后就认为交易失败了
                 xmlMap.put("return_code", "SUCCESS");
                 xmlMap.put("return_msg", "OK");
-                log.info("微信订单号{}付款成功1111111111111", orderNo);
             }
+        }else {
+            log.info("支付失败,错误信息:{}", packageParams.get("err_code"));
+            xmlMap.put("return_code", "FAIL");
+            xmlMap.put("return_msg", "报文为空");
         }
         // 处理业务完毕
+        BufferedOutputStream out = new BufferedOutputStream(response.getOutputStream());
+        log.info("返回给腾讯的回调结果, ss : {}", XmlUtil.mapToXml(xmlMap));
         out.write(XmlUtil.mapToXml(xmlMap).getBytes());
         out.flush();
         out.close();