Преглед на файлове

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

bilingfeng преди 2 години
родител
ревизия
629603fb47

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

@@ -20,10 +20,10 @@ public class PayCommonUtil {
      *
      * @param characterEncoding
      * @param packageParams
-     * @param API_KEY
+     * @param apiKey
      * @return
      */
-    public static boolean isTenPaySign(String characterEncoding, SortedMap<Object, Object> packageParams, String API_KEY) {
+    public static boolean isTenPaySign(String characterEncoding, Map<String, String> packageParams, String apiKey) {
         StringBuilder sb = new StringBuilder();
         Set es = packageParams.entrySet();
         for (Object e : es) {
@@ -34,10 +34,10 @@ public class PayCommonUtil {
                 sb.append(k).append("=").append(v).append("&");
             }
         }
-        sb.append("key=").append(API_KEY);
+        sb.append("key=").append(apiKey);
         //算出摘要  
         String mySign = MD5Util.MD5Encode(sb.toString(), characterEncoding).toLowerCase();
-        String tenPaySign = ((String) packageParams.get("sign")).toLowerCase();
+        String tenPaySign = (packageParams.get("sign")).toLowerCase();
         return tenPaySign.equals(mySign);
     }
 

+ 1 - 4
game-module/game-sdk/src/main/java/com/zanxiang/sdk/controller/PayController.java

@@ -88,22 +88,19 @@ public class PayController {
 
     @ApiOperation(value = "支付宝支付异步回调(二维码、H5、网站)")
     @RequestMapping(value = "notify", method = RequestMethod.POST)
-    public String alipayNotify(HttpServletRequest request, HttpServletResponse response) throws IOException, JDOMException {
-        logger.info("支付宝支付异步回调 request:{},response:{}", JsonUtil.toString(request), JsonUtil.toString(response));
+    public String aliPayNotify(HttpServletRequest request, HttpServletResponse response) throws IOException, JDOMException {
         return payService.notify(request, response, PayWayEnum.ALIPAY.getNum());
     }
 
     @ApiOperation(value = "微信支付")
     @RequestMapping(value = "wxPayNotify", method = RequestMethod.POST)
     public String wxPayNotify(HttpServletRequest request, HttpServletResponse response) throws IOException, JDOMException {
-        logger.info("微信支付回调 request:{},response:{}", JsonUtil.toString(request), JsonUtil.toString(response));
         return payService.notify(request, response, PayWayEnum.WXPAY.getNum());
     }
 
     @ApiOperation(value = "支付宝支付同步回调(二维码、H5、网站)")
     @RequestMapping(value = "alipaySynNotify", method = RequestMethod.GET)
     public ResultMap synNotify(HttpServletRequest request) {
-        logger.info("支付宝回调 request:{}", request);
         return payService.synNotify(request, PayWayEnum.ALIPAY.getNum());
     }
 

+ 0 - 1
game-module/game-sdk/src/main/java/com/zanxiang/sdk/service/Impl/PlatformOrderServiceImpl.java

@@ -65,7 +65,6 @@ public class PlatformOrderServiceImpl extends ServiceImpl<OrderMapper, Order> im
     public Boolean pay(PlatformOrderBO platformOrderBO) {
         logger.info("订单支付请求参数 platformOrderBO:{}", platformOrderBO);
         try {
-            this.checkParam(platformOrderBO, "pay");
             Order order = getOne(new LambdaQueryWrapper<Order>().eq(Order::getId, platformOrderBO.getId()));
             //已支付情况,直接返回成功
             if (order.getStatus().equals(OrderStateEnum.SUCCESS.getCode())) {

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

@@ -16,6 +16,7 @@ import com.zanxiang.sdk.domain.bo.WxPayConfigBO;
 import com.zanxiang.sdk.service.OrderPayService;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.io.IOUtils;
+import org.apache.commons.lang.StringEscapeUtils;
 import org.apache.logging.log4j.util.Strings;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
@@ -31,8 +32,6 @@ import java.io.InputStream;
 import java.nio.charset.StandardCharsets;
 import java.util.HashMap;
 import java.util.Map;
-import java.util.SortedMap;
-import java.util.TreeMap;
 
 /**
  * @author xufeng
@@ -106,12 +105,16 @@ public class WxPayServiceImpl extends PayService implements OrderPayService {
         String requestStr = IOUtils.toString(inputStream, StandardCharsets.UTF_8);
         log.info("微信支付回调 body:{}", requestStr);
         // 解析xml成map
-        Map<String, String> map = XmlUtil.xmlToMap(requestStr);
-        log.info("微信支付回调 map:{}", JsonUtil.toString(map));
-        // 过滤空 设置 TreeMap
-        SortedMap<Object, Object> packageParams = new TreeMap<>();
-        map.forEach((key, value) -> packageParams.put(key, value == null ? "" : value.trim()));
-        ProductPayAttachParamBO attachBO = JsonUtil.toObj(JsonUtil.toString(packageParams.get("attach")), ProductPayAttachParamBO.class);
+        Map<String, String> packageParams = XmlUtil.xmlToMap(requestStr);
+        log.info("微信支付回调 map:{}", JsonUtil.toString(packageParams));
+        //获取订单信息
+        String attachStr = StringEscapeUtils.unescapeJava(packageParams.get("attach"));
+        log.info("微信支付回调 attachStr:{}", attachStr);
+        ProductPayAttachParamBO attachBO = JsonUtil.toObj(JsonUtil.toString(attachStr), ProductPayAttachParamBO.class);
+        if (attachBO == null) {
+            log.info("回调参数中attach值为空");
+            return null;
+        }
         configInit(getPayConfig(attachBO.getGamePayWayId()));
         // 账号信息
         String key = config.getApiKey();
@@ -122,27 +125,27 @@ public class WxPayServiceImpl extends PayService implements OrderPayService {
         }
         log.info("微信支付成功回调");
         // 处理业务开始
-        String resXml;
-
-        if (Constants.SUCCESS.equalsIgnoreCase(packageParams.get("result_code").toString())) {
-            // 这里是支付成功
-            String orderNo = (String) packageParams.get("out_trade_no");
+        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_amount").toString()) / 100), packageParams.get("trade_no").toString(), attachBO.getGamePayWayId())) {
-                return ResEnum.SUCCESS.getMsg();
+            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");
             }
-            // 通知微信.异步确认成功.必写.不然会一直通知后台.八次之后就认为交易失败了
-            resXml = "<xml>" + "<return_code><![CDATA[SUCCESS]]></return_code>" + "<return_msg><![CDATA[OK]]></return_msg>" + "</xml> ";
-        } else {
-            log.info("支付失败,错误信息:{}", packageParams.get("err_code"));
-            resXml = "<xml>" + "<return_code><![CDATA[FAIL]]></return_code>" + "<return_msg><![CDATA[报文为空]]></return_msg>" + "</xml> ";
         }
         // 处理业务完毕
-        BufferedOutputStream out = new BufferedOutputStream(response.getOutputStream());
-        out.write(resXml.getBytes());
+        out.write(XmlUtil.mapToXml(xmlMap).getBytes());
         out.flush();
         out.close();
-        return null;
+        return ResEnum.SUCCESS.getMsg();
     }
 
     @Override