diff --git a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/WxMpConfigStorage.java b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/WxMpConfigStorage.java index 79ae9318..0e623260 100644 --- a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/WxMpConfigStorage.java +++ b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/WxMpConfigStorage.java @@ -80,6 +80,16 @@ public interface WxMpConfigStorage { String getAppId(); + /** + * 服务商模式下的子商户公众账号ID + */ + String getSubAppId(); + + /** + * 服务商模式下的子商户号 + */ + String getSubMchId(); + String getSecret(); String getPartnerId(); diff --git a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/WxMpInMemoryConfigStorage.java b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/WxMpInMemoryConfigStorage.java index f2292684..34ef4f5d 100644 --- a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/WxMpInMemoryConfigStorage.java +++ b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/WxMpInMemoryConfigStorage.java @@ -20,6 +20,8 @@ import java.util.concurrent.locks.ReentrantLock; public class WxMpInMemoryConfigStorage implements WxMpConfigStorage { protected volatile String appId; + protected volatile String subAppId; + protected volatile String subMchId; protected volatile String secret; protected volatile String partnerId; protected volatile String partnerKey; @@ -349,4 +351,22 @@ public class WxMpInMemoryConfigStorage implements WxMpConfigStorage { public boolean useSandboxForWxPay() { return false; } + + @Override + public String getSubAppId() { + return subAppId; + } + + public void setSubAppId(String subAppId) { + this.subAppId = subAppId; + } + + @Override + public String getSubMchId() { + return subMchId; + } + + public void setSubMchId(String subMchId) { + this.subMchId = subMchId; + } } diff --git a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/impl/WxMpPayServiceImpl.java b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/impl/WxMpPayServiceImpl.java index fae2d931..d8a98544 100644 --- a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/impl/WxMpPayServiceImpl.java +++ b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/impl/WxMpPayServiceImpl.java @@ -268,9 +268,19 @@ public class WxMpPayServiceImpl implements WxMpPayService { if (StringUtils.isBlank(request.getAppid())) { request.setAppid(getConfig().getAppId()); } + if (StringUtils.isBlank(request.getMchId())) { request.setMchId(getConfig().getPartnerId()); } + + if (StringUtils.isBlank(request.getSubAppId())) { + request.setAppid(getConfig().getSubAppId()); + } + + if (StringUtils.isBlank(request.getSubMchId())) { + request.setMchId(getConfig().getSubMchId()); + } + if (StringUtils.isBlank(request.getNonceStr())) { request.setNonceStr(String.valueOf(System.currentTimeMillis())); } diff --git a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/pay/request/WxPayBaseRequest.java b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/pay/request/WxPayBaseRequest.java index c13f1b8f..d7867191 100644 --- a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/pay/request/WxPayBaseRequest.java +++ b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/pay/request/WxPayBaseRequest.java @@ -47,6 +47,32 @@ public abstract class WxPayBaseRequest { */ @XStreamAlias("mch_id") protected String mchId; + + /** + *
+   * 服务商模式下的子商户公众账号ID
+   * sub_appid
+   * 是
+   * String(32)
+   * wxd678efh567hg6787
+   * 微信分配的子商户公众账号ID
+   * 
+ */ + @XStreamAlias("sub_appid") + protected String subAppId; + + /** + *
+   * 服务商模式下的子商户号
+   * sub_mch_id
+   * 是
+   * String(32)
+   * 1230000109
+   * 微信支付分配的子商户号,开发者模式下必填
+   * 
+ */ + @XStreamAlias("sub_mch_id") + protected String subMchId; /** *
    * 随机字符串
@@ -128,6 +154,22 @@ public abstract class WxPayBaseRequest {
     this.sign = sign;
   }
 
+  public String getSubAppId() {
+    return subAppId;
+  }
+
+  public void setSubAppId(String subAppId) {
+    this.subAppId = subAppId;
+  }
+
+  public String getSubMchId() {
+    return subMchId;
+  }
+
+  public void setSubMchId(String subMchId) {
+    this.subMchId = subMchId;
+  }
+
   @Override
   public String toString() {
     return ToStringUtils.toSimpleString(this);
diff --git a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/pay/result/WxPayBaseResult.java b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/pay/result/WxPayBaseResult.java
index 4dd133ab..b7227085 100644
--- a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/pay/result/WxPayBaseResult.java
+++ b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/pay/result/WxPayBaseResult.java
@@ -61,6 +61,16 @@ public abstract class WxPayBaseResult {
    */
   @XStreamAlias("mch_id")
   private String mchId;
+  /**
+   * 服务商模式下的子公众账号ID
+   */
+  @XStreamAlias("appid")
+  private String subAppId;
+  /**
+   * 服务商模式下的子商户号
+   */
+  @XStreamAlias("sub_mch_id")
+  private String subMchId;
   /**
    * 随机字符串
    */
@@ -181,6 +191,22 @@ public abstract class WxPayBaseResult {
     this.sign = sign;
   }
 
+  public String getSubAppId() {
+    return subAppId;
+  }
+
+  public void setSubAppId(String subAppId) {
+    this.subAppId = subAppId;
+  }
+
+  public String getSubMchId() {
+    return subMchId;
+  }
+
+  public void setSubMchId(String subMchId) {
+    this.subMchId = subMchId;
+  }
+
   /**
    * 将bean通过保存的xml字符串转换成map
    */