修复直连商户查询订单与关闭订单提示MchId必填问题

This commit is contained in:
egzosn
2021-11-23 22:53:12 +08:00
parent 213c8e84a3
commit 7a80e5a09c
3 changed files with 42 additions and 32 deletions

View File

@@ -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
* <pre>
* email egzosn@gmail.com
@@ -32,19 +32,19 @@ public class WxParameterStructure {
*
* @return 公共参数
*/
public Map<String, Object> getPublicParameters() {
Map<String, Object> parameters = new LinkedHashMap<>();
public Map<String, Object> getPublicParameters(Map<String, Object> 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<String, Object> 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<String, Object> parameters) {
public Map<String, Object> initPartner(Map<String, Object> 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;
}

View File

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

View File

@@ -134,6 +134,7 @@ public class WxPayService extends BasePayService<WxPayConfigStorage> {
*/
@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<WxPayConfigStorage> {
public JSONObject unifiedOrder(PayOrder order) {
//统一下单
Map<String, Object> parameters = wxParameterStructure.getPublicParameters();
wxParameterStructure.initPartner(parameters);
Map<String, Object> 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<WxPayConfigStorage> {
Map<String, Object> 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<WxPayConfigStorage> {
public Map<String, Object> 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<WxPayConfigStorage> {
*/
@Override
public Map<String, Object> close(AssistOrder assistOrder) {
String parameters = wxParameterStructure.getSpParameters();
String parameters = wxParameterStructure.getMchParameters();
return getAssistService().doExecute(parameters, WxTransactionType.CLOSE, assistOrder.getOutTradeNo());
}