diff --git a/pay-java-wx/src/main/java/com/egzosn/pay/wx/v3/api/WxParameterStructure.java b/pay-java-wx/src/main/java/com/egzosn/pay/wx/v3/api/WxParameterStructure.java index 3f3596b..bd0b101 100644 --- a/pay-java-wx/src/main/java/com/egzosn/pay/wx/v3/api/WxParameterStructure.java +++ b/pay-java-wx/src/main/java/com/egzosn/pay/wx/v3/api/WxParameterStructure.java @@ -9,11 +9,11 @@ import com.egzosn.pay.common.bean.OrderParaStructure; import com.egzosn.pay.common.bean.PayOrder; import com.egzosn.pay.common.http.UriVariables; import com.egzosn.pay.common.util.MapGen; -import com.egzosn.pay.common.util.str.StringUtils; import com.egzosn.pay.wx.v3.utils.WxConst; /** * 微信参数构造器 + * * @author Egan *
  * email egzosn@gmail.com
@@ -32,19 +32,19 @@ public class WxParameterStructure {
      *
      * @return 公共参数
      */
-    public Map getPublicParameters() {
-
-        Map parameters = new LinkedHashMap<>();
+    public Map getPublicParameters(Map parameters) {
+        if (payConfigStorage.isPartner()) {
+            return parameters;
+        }
+        if (null == parameters) {
+            parameters = new LinkedHashMap<>();
+        }
         parameters.put(WxConst.APPID, payConfigStorage.getAppId());
         parameters.put(WxConst.MCH_ID, payConfigStorage.getMchId());
         return parameters;
     }
 
 
-
-
-
-
     /**
      * 加载结算信息
      *
@@ -65,7 +65,6 @@ public class WxParameterStructure {
     }
 
 
-
     /**
      * 初始化通知URL必须为直接可访问的URL,不允许携带查询串,要求必须为https地址。
      *
@@ -77,32 +76,38 @@ public class WxParameterStructure {
         OrderParaStructure.loadParameters(parameters, WxConst.NOTIFY_URL, order);
     }
 
+
     /**
-     * 获取服务商相关信息
+     * 获取商户相关信息
      *
-     * @return 服务商相关信息
+     * @return 商户相关信息
      */
-    public String getSpParameters() {
+    public String getMchParameters() {
         Map attr = initSubMchId(null);
-        OrderParaStructure.loadParameters(attr, WxConst.SP_MCH_ID, payConfigStorage.getSpMchId());
+        OrderParaStructure.loadParameters(attr, payConfigStorage.isPartner() ? WxConst.SP_MCH_ID : WxConst.MCH_ID, payConfigStorage.getMchId());
         return UriVariables.getMapToParameters(attr);
     }
+
     /**
      * 初始化商户相关信息
      *
      * @param parameters 参数信息
      */
-    public void initPartner(Map parameters) {
+    public Map initPartner(Map parameters) {
         if (null == parameters) {
-            parameters = new HashMap<>();
+            parameters = new LinkedHashMap<>();
         }
-        if (StringUtils.isNotEmpty(payConfigStorage.getSpAppId()) && StringUtils.isNotEmpty(payConfigStorage.getSpMchId())) {
-            payConfigStorage.setPartner(true);
-            parameters.put("sp_appid", payConfigStorage.getSpAppId());
-            parameters.put(WxConst.SP_MCH_ID, payConfigStorage.getSpMchId());
+        if (payConfigStorage.isPartner()) {
+            parameters.put("sp_appid", payConfigStorage.getAppId());
+            parameters.put(WxConst.SP_MCH_ID, payConfigStorage.getMchId());
+            OrderParaStructure.loadParameters(parameters, "sub_appid", payConfigStorage.getSubAppId());
+            OrderParaStructure.loadParameters(parameters, WxConst.SUB_MCH_ID, payConfigStorage.getSubMchId());
+            return parameters;
         }
-        OrderParaStructure.loadParameters(parameters, "sub_appid", payConfigStorage.getSubAppId());
-        initSubMchId(parameters);
+
+        parameters.put(WxConst.APPID, payConfigStorage.getAppId());
+        parameters.put(WxConst.MCH_ID, payConfigStorage.getMchId());
+        return parameters;
     }
 
 
@@ -116,10 +121,10 @@ public class WxParameterStructure {
         if (null == parameters) {
             parameters = new HashMap<>();
         }
-        if (StringUtils.isNotEmpty(payConfigStorage.getSubMchId())) {
-            payConfigStorage.setPartner(true);
-            parameters.put(WxConst.SUB_MCH_ID, payConfigStorage.getSubMchId());
+        if (payConfigStorage.isPartner()) {
+            OrderParaStructure.loadParameters(parameters, WxConst.SUB_MCH_ID, payConfigStorage.getSubMchId());
         }
+
         return parameters;
 
     }
diff --git a/pay-java-wx/src/main/java/com/egzosn/pay/wx/v3/api/WxPayConfigStorage.java b/pay-java-wx/src/main/java/com/egzosn/pay/wx/v3/api/WxPayConfigStorage.java
index b668a63..63af5eb 100644
--- a/pay-java-wx/src/main/java/com/egzosn/pay/wx/v3/api/WxPayConfigStorage.java
+++ b/pay-java-wx/src/main/java/com/egzosn/pay/wx/v3/api/WxPayConfigStorage.java
@@ -169,20 +169,20 @@ public class WxPayConfigStorage extends BasePayConfigStorage {
     }
 
     public String getSpAppId() {
-        return spAppId;
+        return getAppId();
     }
 
     public void setSpAppId(String spAppId) {
-        this.spAppId = spAppId;
+        setAppId(spAppId);
         addAttr("spAppId", spAppId);
     }
 
     public String getSpMchId() {
-        return spMchId;
+        return getMchId();
     }
 
     public void setSpMchId(String spMchId) {
-        this.spMchId = spMchId;
+        setMchId(spMchId);
         addAttr("spMchId", spMchId);
     }
 
diff --git a/pay-java-wx/src/main/java/com/egzosn/pay/wx/v3/api/WxPayService.java b/pay-java-wx/src/main/java/com/egzosn/pay/wx/v3/api/WxPayService.java
index be3e5e1..f175615 100644
--- a/pay-java-wx/src/main/java/com/egzosn/pay/wx/v3/api/WxPayService.java
+++ b/pay-java-wx/src/main/java/com/egzosn/pay/wx/v3/api/WxPayService.java
@@ -134,6 +134,7 @@ public class WxPayService extends BasePayService {
      */
     @Override
     protected void initAfter() {
+        payConfigStorage.setPartner(StringUtils.isNotEmpty(payConfigStorage.getSubMchId()));
         new Thread(() -> {
             payConfigStorage.loadCertEnvironment();
             wxParameterStructure = new WxParameterStructure(payConfigStorage);
@@ -234,8 +235,9 @@ public class WxPayService extends BasePayService {
     public JSONObject unifiedOrder(PayOrder order) {
 
         //统一下单
-        Map parameters = wxParameterStructure.getPublicParameters();
-        wxParameterStructure.initPartner(parameters);
+        Map parameters =  wxParameterStructure.initPartner(null);
+       ;
+//        wxParameterStructure.getPublicParameters(parameters);
         // 商品描述
         OrderParaStructure.loadParameters(parameters, WxConst.DESCRIPTION, order.getSubject());
         OrderParaStructure.loadParameters(parameters, WxConst.DESCRIPTION, order.getBody());
@@ -283,6 +285,9 @@ public class WxPayService extends BasePayService {
 
         Map params = new LinkedHashMap<>();
         String appId = payConfigStorage.getAppId();
+        if (payConfigStorage.isPartner() && StringUtils.isNotEmpty(payConfigStorage.getSubAppId())){
+            appId = payConfigStorage.getSubAppId();
+        }
         String timeStamp = String.valueOf(DateUtils.toEpochSecond());
         String randomStr = SignTextUtils.randomStr();
         String prepayId = result.getString("prepay_id");
@@ -457,7 +462,7 @@ public class WxPayService extends BasePayService {
     public Map query(AssistOrder assistOrder) {
         String transactionId = assistOrder.getTradeNo();
         String outTradeNo = assistOrder.getOutTradeNo();
-        String parameters = wxParameterStructure.getSpParameters();
+        String parameters = wxParameterStructure.getMchParameters();
         WxTransactionType transactionType = WxTransactionType.QUERY_TRANSACTION_ID;
         String uriVariable = transactionId;
         if (StringUtils.isNotEmpty(outTradeNo)) {
@@ -490,7 +495,7 @@ public class WxPayService extends BasePayService {
      */
     @Override
     public Map close(AssistOrder assistOrder) {
-        String parameters = wxParameterStructure.getSpParameters();
+        String parameters = wxParameterStructure.getMchParameters();
         return getAssistService().doExecute(parameters, WxTransactionType.CLOSE, assistOrder.getOutTradeNo());
     }