Переглянути джерело

体检费用支付到体检商户

lighter 3 місяців тому
батько
коміт
bbd3cd9be0

+ 3 - 0
src/main/java/thyyxxk/wxservice_server/dao/WxApiDao.java

@@ -106,6 +106,9 @@ public interface WxApiDao {
     @Select("select * from t_wechat_pay_order with(nolock) where trade_no=#{tradeNo}")
     WxPayOrder selectOrderByTradeNo(String tradeNo);
 
+    @Select("select order_type from t_wechat_pay_order with(nolock) where trade_no=#{tradeNo}")
+    Integer selectOrderType(String tradeNo);
+
     @Select("select trade_no,trade_state,query_state_times, " +
             "offset=datediff(minute,create_datetime,last_query_state) " +
             "from t_wechat_pay_order with(nolock) " +

+ 43 - 8
src/main/java/thyyxxk/wxservice_server/factory/wechatpay/WeChatPayService.java

@@ -15,11 +15,13 @@ import com.wechat.pay.java.service.refund.model.AmountReq;
 import com.wechat.pay.java.service.refund.model.CreateRequest;
 import com.wechat.pay.java.service.refund.model.Refund;
 import lombok.extern.slf4j.Slf4j;
+import thyyxxk.wxservice_server.constant.OrderType;
 import thyyxxk.wxservice_server.entity.wxapi.RefundResponse;
 import thyyxxk.wxservice_server.factory.wechatpay.model.NativePayResponse;
 import thyyxxk.wxservice_server.factory.wechatpay.model.WechatPayGlobalRequest;
 import thyyxxk.wxservice_server.utils.PropertiesUtil;
 import thyyxxk.wxservice_server.utils.SnowFlakeId;
+import thyyxxk.wxservice_server.utils.StringUtil;
 import thyyxxk.wxservice_server.utils.TradeVectorUtil;
 import thyyxxk.wxservice_server.utils.wxpay.WxPayConfigUtil;
 
@@ -53,28 +55,51 @@ public class WeChatPayService {
     }
 
     public Transaction queryOrderState(WechatPayGlobalRequest request) {
-        Config config = WxPayConfigUtil.getInstance().getConfig();
+        Config config;
+        String mchId;
+        if (null != request.getOrderType() &&
+                request.getOrderType() == OrderType.INSPECTIONS.getCode()) {
+            config = WxPayConfigUtil.getInstance().getTjConfig();
+            mchId = "1501033101";
+        } else {
+            config = WxPayConfigUtil.getInstance().getConfig();
+            mchId = PropertiesUtil.getLocalProperty("mchId");
+        }
         JsapiService service = new JsapiService.Builder().config(config).build();
         QueryOrderByOutTradeNoRequest queryOrderRequest = new QueryOrderByOutTradeNoRequest();
         queryOrderRequest.setOutTradeNo(request.getOutTradeNo());
-        queryOrderRequest.setMchid(PropertiesUtil.getLocalProperty("mchId"));
+        queryOrderRequest.setMchid(mchId);
         Transaction transaction = service.queryOrderByOutTradeNo(queryOrderRequest);
         log.info("查询订单状态【{}】:{}", request.getOutTradeNo(), transaction);
         return transaction;
     }
 
     public void closeOrder(WechatPayGlobalRequest request) {
-        Config config = WxPayConfigUtil.getInstance().getConfig();
+        Config config;
+        String mchId;
+        if (null != request.getOrderType() &&
+                request.getOrderType() == OrderType.INSPECTIONS.getCode()) {
+            config = WxPayConfigUtil.getInstance().getTjConfig();
+            mchId = "1501033101";
+        } else {
+            config = WxPayConfigUtil.getInstance().getConfig();
+            mchId = PropertiesUtil.getLocalProperty("mchId");
+        }
         JsapiService service = new JsapiService.Builder().config(config).build();
         CloseOrderRequest closeOrderRequest = new CloseOrderRequest();
         closeOrderRequest.setOutTradeNo(request.getOutTradeNo());
-        closeOrderRequest.setMchid(PropertiesUtil.getLocalProperty("mchId"));
+        closeOrderRequest.setMchid(mchId);
         service.closeOrder(closeOrderRequest);
         log.info("关闭微信订单:{}", request.getOutTradeNo());
     }
 
     public NativePayResponse nativePrepay(WechatPayGlobalRequest request) {
-        Config config = WxPayConfigUtil.getInstance().getConfig();
+        Config config;
+        if (StringUtil.notBlank(request.getMchId())) {
+            config = WxPayConfigUtil.getInstance().getTjConfig();
+        } else {
+            config = WxPayConfigUtil.getInstance().getConfig();
+        }
         NativePayService service = new NativePayService.Builder().config(config).build();
         com.wechat.pay.java.service.payments.nativepay.model.PrepayRequest prepayRequest
                 = new com.wechat.pay.java.service.payments.nativepay.model.PrepayRequest();
@@ -84,7 +109,11 @@ public class WeChatPayService {
         prepayRequest.setAmount(amount);
         prepayRequest.setDescription(request.getDescription());
         prepayRequest.setAppid(PropertiesUtil.getLocalProperty("appId"));
-        prepayRequest.setMchid(PropertiesUtil.getLocalProperty("mchId"));
+        if (StringUtil.notBlank(request.getMchId())) {
+            prepayRequest.setMchid(request.getMchId());
+        } else {
+            prepayRequest.setMchid(PropertiesUtil.getLocalProperty("mchId"));
+        }
         prepayRequest.setNotifyUrl(PropertiesUtil.getLocalProperty("nativeNotifyUrl"));
         prepayRequest.setOutTradeNo(SnowFlakeId.instance().nextNativePayTradeNo());
         com.wechat.pay.java.service.payments.nativepay.model.PrepayResponse prepayResponse = service.prepay(prepayRequest);
@@ -146,14 +175,20 @@ public class WeChatPayService {
 
     public Transaction decryptNotify(WechatPayGlobalRequest request) {
         HttpServletRequest httpServletRequest = request.getHttpServletRequest();
+        String wpSerial = httpServletRequest.getHeader("Wechatpay-Serial");
         RequestParam requestParam = new RequestParam.Builder()
-                .serialNumber(httpServletRequest.getHeader("Wechatpay-Serial"))
+                .serialNumber(wpSerial)
                 .nonce(httpServletRequest.getHeader("Wechatpay-Nonce"))
                 .signature(httpServletRequest.getHeader("Wechatpay-Signature"))
                 .timestamp(httpServletRequest.getHeader("Wechatpay-Timestamp"))
                 .body(readHttpServletRequestBody(httpServletRequest))
                 .build();
-        RSAAutoCertificateConfig config = WxPayConfigUtil.getInstance().getConfig();
+        RSAAutoCertificateConfig config;
+        if (wpSerial.equals("73D33B730CBCD41119629530699302CF916041EF")) {
+            config = WxPayConfigUtil.getInstance().getTjConfig();
+        } else {
+            config = WxPayConfigUtil.getInstance().getConfig();
+        }
         NotificationParser parser = new NotificationParser(config);
         Transaction transaction = parser.parse(requestParam, Transaction.class);
         log.info("微信回调SDK解密:{}", transaction);

+ 18 - 2
src/main/java/thyyxxk/wxservice_server/factory/wechatpay/model/WechatPayGlobalRequest.java

@@ -11,17 +11,21 @@ public class WechatPayGlobalRequest {
     private final String openid;
     private final String description;
     private final Integer totalAmount;
+    private final String mchId;
+    private final Integer orderType;
     @Setter
     private Integer refundAmount;
     private final HttpServletRequest httpServletRequest;
 
     private WechatPayGlobalRequest(String outTradeNo, String openid, String description,
-                                   Integer totalAmount, Integer refundAmount,
+                                   Integer totalAmount, String mchId, Integer orderType, Integer refundAmount,
                                    HttpServletRequest httpServletRequest) {
         this.outTradeNo = outTradeNo;
         this.openid = openid;
         this.description = description;
         this.totalAmount = totalAmount;
+        this.mchId = mchId;
+        this.orderType = orderType;
         this.refundAmount = refundAmount;
         this.httpServletRequest = httpServletRequest;
     }
@@ -32,6 +36,8 @@ public class WechatPayGlobalRequest {
         private String description;
         private Integer totalAmount;
         private Integer refundAmount;
+        private String mchId;
+        private Integer orderType;
         private HttpServletRequest httpServletRequest;
 
         public Builder outTradeNo(String outTradeNo) {
@@ -59,6 +65,16 @@ public class WechatPayGlobalRequest {
             return this;
         }
 
+        public Builder mchId(String mchId) {
+            this.mchId = mchId;
+            return this;
+        }
+
+        public Builder orderType(Integer orderType) {
+            this.orderType = orderType;
+            return this;
+        }
+
         public Builder httpServletRequest(HttpServletRequest httpServletRequest) {
             this.httpServletRequest = httpServletRequest;
             return this;
@@ -66,7 +82,7 @@ public class WechatPayGlobalRequest {
 
         public WechatPayGlobalRequest build() {
             return new WechatPayGlobalRequest(outTradeNo, openid, description,
-                    totalAmount, refundAmount, httpServletRequest);
+                    totalAmount, mchId, orderType, refundAmount, httpServletRequest);
         }
     }
 

+ 12 - 5
src/main/java/thyyxxk/wxservice_server/service/WxApiService.java

@@ -140,8 +140,9 @@ public class WxApiService {
     }
 
     public ResultVo<JSONObject> queryOrderStateOnly(String tradeNo) {
+        Integer orderType = dao.selectOrderType(tradeNo);
         WechatPayGlobalRequest request = new WechatPayGlobalRequest.Builder()
-                .outTradeNo(tradeNo).build();
+                .outTradeNo(tradeNo).orderType(orderType).build();
         Transaction transaction = new WeChatPayService().queryOrderState(request);
         JSONObject response = JSONObject.parseObject(GsonUtil.toJson(transaction));
         return ResultVoUtil.success(response);
@@ -182,7 +183,7 @@ public class WxApiService {
                 transaction.setSuccessTime(DateUtil.formatDatetime(new Date()));
             } else {
                 WechatPayGlobalRequest request = new WechatPayGlobalRequest.Builder()
-                        .outTradeNo(tradeNo).build();
+                        .outTradeNo(tradeNo).orderType(orderType.getCode()).build();
                 transaction = new WeChatPayService().queryOrderState(request);
             }
             Transaction.TradeStateEnum tradeState = transaction.getTradeState();
@@ -272,6 +273,7 @@ public class WxApiService {
             }
             order.setPatientName(patName);
         }
+        String mchId = PropertiesUtil.getLocalProperty("mchId");
         switch (orderType) {
             case SELF_MACHINE_REG:
                 order.setMzyRequestId(param.getMzyRequestId());
@@ -292,6 +294,7 @@ public class WxApiService {
                 }
                 order.setSglCheckId(param.getSglcheckid());
                 order.setSglCheckNotified(Boolean.FALSE);
+                mchId = "1501033101";
                 break;
             case AESTHETIC_MEDICINE:
             case SELF_MACHINE_PAY:
@@ -307,7 +310,7 @@ public class WxApiService {
         }
         WechatPayGlobalRequest request = new WechatPayGlobalRequest.Builder()
                 .totalAmount(param.getTotalAmt()).description(param.getDescription())
-                .build();
+                .mchId(mchId).build();
         NativePayResponse response = new WeChatPayService().nativePrepay(request);
         long timesStamp = System.currentTimeMillis() / 1000;
         String orderTypeName = OrderType.get(param.getOrderType()).getLabel();
@@ -316,7 +319,7 @@ public class WxApiService {
         order.setOpenid("");
         order.setTotalFee(DecimalTool.moneyFenToYuan(param.getTotalAmt()));
         order.setPatientId(param.getPatientId().trim());
-        order.setMchId(PropertiesUtil.getLocalProperty("mchId"));
+        order.setMchId(mchId);
         order.setTimeStamp(String.valueOf(timesStamp));
         order.setTradeNo(response.getTradeNo());
         order.setCreateDatetime(new Date());
@@ -351,8 +354,12 @@ public class WxApiService {
         if (tradeState == Transaction.TradeStateEnum.CLOSED) {
             return "SUCCESS";
         }
+        Integer orderType = order.getOrderType();
+        if (null == orderType) {
+            orderType = dao.selectOrderType(tradeNo);
+        }
         WechatPayGlobalRequest request = new WechatPayGlobalRequest.Builder()
-                .outTradeNo(tradeNo).build();
+                .outTradeNo(tradeNo).orderType(orderType).build();
         new WeChatPayService().closeOrder(request);
         dao.updatePayStatusOnly(tradeNo, Transaction.TradeStateEnum.CLOSED);
         return "SUCCESS";

+ 20 - 2
src/main/java/thyyxxk/wxservice_server/utils/wxpay/WxPayConfigUtil.java

@@ -6,16 +6,18 @@ import thyyxxk.wxservice_server.utils.PropertiesUtil;
 
 public class WxPayConfigUtil {
     private final static String PRIVATE_KEY_PATH;
-
+    private final static String TJ_PRIVATE_KEY_PATH;
 
     private RSAAutoCertificateConfig config = null;
-
+    private RSAAutoCertificateConfig tjConfig = null;
 
     static {
         if (Constants.WINDOWS_10.equals(PropertiesUtil.getLocalProperty(Constants.OS_NAME))) {
             PRIVATE_KEY_PATH = "D:\\a.snapshot\\zwxcert\\new_merchant\\apiclient_key.pem";
+            TJ_PRIVATE_KEY_PATH = "D:\\a.snapshot\\zwxcert\\tj_merchant\\apiclient_key.pem";
         } else {
             PRIVATE_KEY_PATH = "/home/wxcerts/new_merchant/apiclient_key.pem";
+            TJ_PRIVATE_KEY_PATH = "/home/wxcerts/tj_merchant/apiclient_key.pem";
         }
     }
 
@@ -41,6 +43,13 @@ public class WxPayConfigUtil {
         return config;
     }
 
+    public RSAAutoCertificateConfig getTjConfig() {
+        if (null == tjConfig) {
+            tjConfig = initTjConfig();
+        }
+        return tjConfig;
+    }
+
     private RSAAutoCertificateConfig initConfig() {
         return new RSAAutoCertificateConfig.Builder()
                 .merchantId(PropertiesUtil.getLocalProperty("mchId"))
@@ -49,4 +58,13 @@ public class WxPayConfigUtil {
                 .apiV3Key(PropertiesUtil.getLocalProperty("mchApiV3Key"))
                 .build();
     }
+
+    private RSAAutoCertificateConfig initTjConfig() {
+        return new RSAAutoCertificateConfig.Builder()
+                .merchantId("1501033101")
+                .privateKeyFromPath(TJ_PRIVATE_KEY_PATH)
+                .merchantSerialNumber("7D1E11C397FED3F4C90D53169097B50CAB798677")
+                .apiV3Key(PropertiesUtil.getLocalProperty("mchApiV3Key"))
+                .build();
+    }
 }

+ 1 - 1
src/main/resources/application.yml

@@ -1,3 +1,3 @@
 spring:
   profiles:
-    active: dev
+    active: prod

+ 1 - 7
src/main/resources/weChatOfficialAccounts.properties

@@ -19,10 +19,4 @@ nativeNotifyUrl=https://staticweb.hnthyy.cn/wxserver/wxPayNotify/native
 
 qywxCorpId=wwf0b23c8b36012b34
 qywxSecret=wpHuNePfiDyotmpXjy5hUYGF0w8Ks5OPHSQp22z8oBk
-qywxToken=
-
-appletAppId=wx8b231cd4c8e3ed95
-appletAppSecret=aacfee40027de8b4f4ea99dda3b4367f
-
-appletMallAppId=wx5c6d5108df7917ff
-appletMallAppSecret=d2b4749aa2aef905e2134c64df5b22b2
+qywxToken=