Ver código fonte

fixed 微信支付回调优化

fushengqian 8 meses atrás
pai
commit
4b7fbf52b1

+ 4 - 1
fuint-application/src/main/java/com/fuint/common/config/WebConfig.java

@@ -87,7 +87,10 @@ public class WebConfig extends WebMvcConfigurationSupport {
                 .excludePathPatterns("/clientApi/article/**")
                 .excludePathPatterns("/clientApi/message/getOne")
                 .excludePathPatterns("/clientApi/message/wxPush")
-                .excludePathPatterns("/clientApi/sms/sendVerifyCode");
+                .excludePathPatterns("/clientApi/sms/sendVerifyCode")
+                .excludePathPatterns("/clientApi/book/list")
+                .excludePathPatterns("/clientApi/book/detail")
+                .excludePathPatterns("/clientApi/book/cateList");
     }
 
     @Bean

+ 1 - 1
fuint-application/src/main/java/com/fuint/common/enums/PlatformTypeEnum.java

@@ -21,7 +21,7 @@ public enum PlatformTypeEnum {
     /**
      * 微信小程序
      */
-    MP_WEIXIN("MP_WEIXIN", "微信小程序"),
+    MP_WEIXIN("MP-WEIXIN", "微信小程序"),
 
     /**
      * App客户端

+ 8 - 0
fuint-application/src/main/java/com/fuint/common/service/OrderService.java

@@ -107,6 +107,14 @@ public interface OrderService extends IService<MtOrder> {
      */
     UserOrderDto getOrderByOrderSn(String orderSn) throws BusinessCheckException;
 
+    /**
+     * 根据订单号获取订单
+     *
+     * @param orderSn 订单号
+     * @return
+     * */
+    MtOrder getOrderInfoByOrderSn(String orderSn);
+
     /**
      * 更新订单
      *

+ 12 - 0
fuint-application/src/main/java/com/fuint/common/service/impl/OrderServiceImpl.java

@@ -335,6 +335,7 @@ public class OrderServiceImpl extends ServiceImpl<MtOrderMapper, MtOrder> implem
         mtOrder.setPayAmount(orderDto.getPayAmount());
         mtOrder.setDiscount(orderDto.getDiscount());
         mtOrder.setPayStatus(PayStatusEnum.WAIT.getKey());
+        mtOrder.setPlatform(orderDto.getPlatform());
         mtOrder.setPointAmount(orderDto.getPointAmount());
         mtOrder.setUsePoint(orderDto.getUsePoint());
         mtOrder.setOrderMode(orderDto.getOrderMode());
@@ -1209,6 +1210,17 @@ public class OrderServiceImpl extends ServiceImpl<MtOrderMapper, MtOrder> implem
         return getOrderDetail(orderInfo, true, true);
     }
 
+    /**
+     * 根据订单号获取订单信息
+     *
+     * @param  orderSn 订单号
+     * @return
+     */
+    @Override
+    public MtOrder getOrderInfoByOrderSn(String orderSn) {
+        return mtOrderMapper.findByOrderSn(orderSn);
+    }
+
     /**
      * 更新订单
      *

+ 1 - 0
fuint-application/src/main/java/com/fuint/common/service/impl/PaymentServiceImpl.java

@@ -186,6 +186,7 @@ public class PaymentServiceImpl implements PaymentService {
         String orderSn = CommonUtil.createOrderSN(orderInfo.getUserId().toString());
         orderInfo.setOrderSn(orderSn);
         orderInfo.setPayType(payType);
+        orderInfo.setPlatform(platform);
         orderService.updateOrder(orderInfo);
 
         // 收银员操作

+ 27 - 4
fuint-application/src/main/java/com/fuint/common/service/impl/WeixinServiceImpl.java

@@ -256,10 +256,22 @@ public class WeixinServiceImpl implements WeixinService {
     public Map<String, String> processResXml(HttpServletRequest request) {
         try {
             String xmlMsg = HttpKit.readData(request);
-            logger.info("支付通知=" + xmlMsg);
             Map<String, String> result = WxPayKit.xmlToMap(xmlMsg);
             String returnCode = result.get("return_code");
-            getApiConfig(0, PlatformTypeEnum.MP_WEIXIN.getCode());
+            String orderSn = result.get("out_trade_no");
+            logger.info("支付通知,xml = {}, orderSn = {}", xmlMsg, orderSn);
+
+            Integer storeId = 0;
+            String platform = PlatformTypeEnum.MP_WEIXIN.getCode();
+            if (StringUtil.isNotEmpty(orderSn)) {
+                MtOrder mtOrder = orderService.getOrderInfoByOrderSn(orderSn);
+                if (mtOrder != null) {
+                    storeId = mtOrder.getStoreId();
+                    platform = mtOrder.getPlatform();
+                }
+            }
+
+            getApiConfig(storeId, platform);
             if (WxPayKit.verifyNotify(result, WxPayApiConfigKit.getWxPayApiConfig().getPartnerKey(), SignType.MD5)) {
                 if (WxPayKit.codeIsOk(returnCode)) {
                     return result;
@@ -559,7 +571,12 @@ public class WeixinServiceImpl implements WeixinService {
     @Override
     public Map<String, String> queryPaidOrder(Integer storeId, String transactionId, String orderSn) {
         try {
-            getApiConfig(storeId, PlatformTypeEnum.MP_WEIXIN.getCode());
+            MtOrder mtOrder = orderService.getOrderInfoByOrderSn(orderSn);
+            String platform = PlatformTypeEnum.MP_WEIXIN.getCode();
+            if (mtOrder != null) {
+                platform = mtOrder.getPlatform();
+            }
+            getApiConfig(storeId, platform);
             WxPayApiConfig wxPayApiConfig = WxPayApiConfigKit.getWxPayApiConfig();
             Map<String, String> params = OrderQueryModel.builder()
                     .appid(wxPayApiConfig.getAppId())
@@ -1183,11 +1200,13 @@ public class WeixinServiceImpl implements WeixinService {
      * */
     private WxPayApiConfig getApiConfig(Integer storeId, String platform) throws BusinessCheckException {
         WxPayApiConfig apiConfig;
-        MtStore mtStore = storeService.queryStoreById(storeId);
+
         String mchId = wxPayBean.getMchId();
         String apiV2 = wxPayBean.getApiV2();
         String certPath = wxPayBean.getCertPath();
         String appId = wxPayBean.getAppId();
+
+        MtStore mtStore = storeService.queryStoreById(storeId);
         logger.info("微信支付店铺信息:{}", JsonUtil.toJSONString(mtStore));
         if (mtStore != null && StringUtil.isNotEmpty(mtStore.getWxApiV2()) && StringUtil.isNotEmpty(mtStore.getWxMchId())) {
             mchId = mtStore.getWxMchId();
@@ -1199,6 +1218,7 @@ public class WeixinServiceImpl implements WeixinService {
                 appId = mtMerchant.getWxAppId();
             }
         }
+
         apiConfig = WxPayApiConfig.builder()
                    .appId(appId)
                    .mchId(mchId)
@@ -1206,6 +1226,7 @@ public class WeixinServiceImpl implements WeixinService {
                    .certPath(certPath)
                    .domain(wxPayBean.getDomain())
                    .build();
+
         // 微信内h5公众号支付
         if (platform.equals(PlatformTypeEnum.H5.getCode())) {
             String wxAppId = env.getProperty("weixin.official.appId");
@@ -1224,8 +1245,10 @@ public class WeixinServiceImpl implements WeixinService {
                 apiConfig.setApiKey(wxAppSecret);
             }
         }
+
         WxPayApiConfigKit.setThreadLocalWxPayApiConfig(apiConfig);
         logger.info("微信支付参数:{}", JsonUtil.toJSONString(apiConfig));
+
         return apiConfig;
     }
 }

+ 3 - 0
fuint-repository/src/main/java/com/fuint/repository/model/MtOrder.java

@@ -38,6 +38,9 @@ public class MtOrder implements Serializable {
     @ApiModelProperty("订单模式")
     private String orderMode;
 
+    @ApiModelProperty("下单平台")
+    private String platform;
+
     @ApiModelProperty("订单号")
     private String orderSn;