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());
}