Explorar o código

:bug:
【支付宝通知回调】:
AbstractAlipayClient.java :
支付宝统一回调参数 str转map
通知回调参数
Map<String, String> params = notifyData.getParams();
Map<String, String> params = strToMap(notifyData.getBody());

zwy %!s(int64=3) %!d(string=hai) anos
pai
achega
58c3afee08

+ 24 - 2
yudao-framework/yudao-spring-boot-starter-biz-pay/src/main/java/cn/iocoder/yudao/framework/pay/core/client/impl/alipay/AbstractAlipayClient.java

@@ -18,6 +18,7 @@ import lombok.SneakyThrows;
 import lombok.extern.slf4j.Slf4j;
 
 import java.nio.charset.StandardCharsets;
+import java.util.HashMap;
 import java.util.Map;
 
 import static cn.iocoder.yudao.framework.common.util.json.JsonUtils.toJsonString;
@@ -54,7 +55,7 @@ public abstract class AbstractAlipayClient extends AbstractPayClient<AlipayPayCl
      */
     @Override
     public  PayOrderNotifyRespDTO parseOrderNotify(PayNotifyDataDTO data) throws Exception {
-        Map<String, String> params = data.getParams();
+        Map<String, String> params = strToMap(data.getBody());
         return  PayOrderNotifyRespDTO.builder().orderExtensionNo(params.get("out_trade_no"))
                 .channelOrderNo(params.get("trade_no")).channelUserId(params.get("seller_id"))
                 .tradeStatus(params.get("trade_status"))
@@ -64,7 +65,7 @@ public abstract class AbstractAlipayClient extends AbstractPayClient<AlipayPayCl
 
     @Override
     public PayRefundNotifyDTO parseRefundNotify(PayNotifyDataDTO notifyData) {
-        Map<String, String> params = notifyData.getParams();
+        Map<String, String> params = strToMap(notifyData.getBody());
         PayRefundNotifyDTO notifyDTO = PayRefundNotifyDTO.builder().channelOrderNo(params.get("trade_no"))
                 .tradeNo(params.get("out_trade_no"))
                 .reqNo(params.get("out_biz_no"))
@@ -128,4 +129,25 @@ public abstract class AbstractAlipayClient extends AbstractPayClient<AlipayPayCl
         }
     }
 
+    /**
+     *
+     * 支付宝统一回调参数  str转map
+     *
+     * @param s 支付宝支付通知回调参数
+     * @return map 支付宝集合
+     */
+    public static Map<String, String> strToMap(String s) {
+        Map<String, String> stringStringMap = new HashMap<>();
+        //调整时间格式
+        String s3 = s.replaceAll("%3A", ":");
+        //获取map
+        String s4 = s3.replace("+", " ");
+        String[] split = s4.split("&");
+        for (String s1 : split) {
+            String[] split1 = s1.split("=");
+            stringStringMap.put(split1[0], split1[1]);
+        }
+        return stringStringMap;
+    }
+
 }