Browse Source

加入服务商支付逻辑

java110 6 years ago
parent
commit
accc65b33a

+ 22 - 1
service-front/src/main/java/com/java110/front/smo/AppAbstractComponentSMO.java

@@ -30,6 +30,17 @@ public abstract class AppAbstractComponentSMO extends AbstractComponentSMO {
     @Autowired
     private WechatAuthProperties wechatAuthProperties;
 
+    //微信支付
+    public static final String DOMAIN_WECHAT_PAY = "WECHAT_PAY";
+    // 微信服务商支付开关
+    public static final String WECHAT_SERVICE_PAY_SWITCH = "WECHAT_SERVICE_PAY_SWITCH";
+    //开关ON打开
+    public static final String WECHAT_SERVICE_PAY_SWITCH_ON = "ON";
+
+    private static final String WECHAT_SERVICE_APP_ID = "SERVICE_APP_ID";
+
+    private static final String WECHAT_SERVICE_MCH_ID = "SERVICE_MCH_ID";
+
     /**
      * 调用中心服务
      *
@@ -81,7 +92,7 @@ public abstract class AppAbstractComponentSMO extends AbstractComponentSMO {
         double payAmount = PayUtil.getPayAmountByEnv(MappingCache.getValue("HC_ENV"), money);
 //添加或更新支付记录(参数跟进自己业务需求添加)
 
-        Map<String, String> resMap = this.java110UnifieldOrder(outRestTemplate, feeName, orderNum, tradeType, payAmount, openId,smallWeChatDto);
+        Map<String, String> resMap = this.java110UnifieldOrder(outRestTemplate, feeName, orderNum, tradeType, payAmount, openId, smallWeChatDto);
         if ("SUCCESS".equals(resMap.get("return_code")) && "SUCCESS".equals(resMap.get("result_code"))) {
             if (WechatAuthProperties.TRADE_TYPE_JSAPI.equals(tradeType)) {
 
@@ -129,6 +140,16 @@ public abstract class AppAbstractComponentSMO extends AbstractComponentSMO {
         paramMap.put("notify_url", wechatAuthProperties.getWxNotifyUrl());
         paramMap.put("trade_type", tradeType);
         paramMap.put("openid", openid);
+
+        String paySwitch = MappingCache.getValue(DOMAIN_WECHAT_PAY, WECHAT_SERVICE_PAY_SWITCH);
+        if (WECHAT_SERVICE_PAY_SWITCH_ON.equals(paySwitch)) {
+            paramMap.put("appid", MappingCache.getValue(DOMAIN_WECHAT_PAY, WECHAT_SERVICE_APP_ID));  //服务商appid,是服务商注册时公众号的id
+            paramMap.put("mch_id", MappingCache.getValue(DOMAIN_WECHAT_PAY, WECHAT_SERVICE_MCH_ID));  //服务商商户号
+            paramMap.put("sub_appid", smallWeChatDto.getAppId());//起调小程序appid
+            paramMap.put("sub_mch_id", smallWeChatDto.getMchId());//起调小程序的商户号
+            paramMap.put("sub_openid", openid);
+            paramMap.remove("openid");
+        }
         paramMap.put("sign", PayUtil.createSign(paramMap, smallWeChatDto.getPayPassword()));
 //转换为xml
         String xmlData = PayUtil.mapToXml(paramMap);

+ 8 - 1
service-front/src/main/java/com/java110/front/smo/payment/impl/ToNotifySMOImpl.java

@@ -4,6 +4,7 @@ import com.alibaba.fastjson.JSONObject;
 import com.java110.front.properties.WechatAuthProperties;
 import com.java110.front.smo.AppAbstractComponentSMO;
 import com.java110.front.smo.payment.IToNotifySMO;
+import com.java110.utils.cache.MappingCache;
 import com.java110.utils.constant.CommonConstant;
 import com.java110.utils.constant.ServiceConstant;
 import com.java110.utils.util.DateUtil;
@@ -86,7 +87,13 @@ public class ToNotifySMOImpl implements IToNotifySMO {
         }
 
         String outTradeNo = map.get("out_trade_no").toString();
-        String openId = map.get("openid").toString();
+        String openId = "";
+        String paySwitch = MappingCache.getValue(AppAbstractComponentSMO.DOMAIN_WECHAT_PAY, AppAbstractComponentSMO.WECHAT_SERVICE_PAY_SWITCH);
+        if (AppAbstractComponentSMO.WECHAT_SERVICE_PAY_SWITCH_ON.equals(paySwitch)) {
+            openId =  map.get("sub_openid").toString();
+        }else {
+            openId = map.get("openid").toString();
+        }
 
         responseEntity = getUserInfoByOpenId(restTemplate, openId);