修复 微信V3:商户上送敏感信息时加密秘钥错误问题

修复 支付宝:交易查询接口调用getBizContent方法tradeNo与outTradeNo弄反问题
This commit is contained in:
pengkaibing
2023-06-02 23:46:11 +08:00
parent c2e9b16809
commit c102c2a1f3
4 changed files with 28 additions and 4 deletions

View File

@@ -503,7 +503,7 @@ public class AliPayService extends BasePayService<AliPayConfigStorage> implement
OrderParaStructure.loadParameters(bizContent, "query_options", assistOrder);
//设置请求参数的集合
parameters.put(BIZ_CONTENT, JSON.toJSONString(getBizContent(assistOrder.getOutTradeNo(), assistOrder.getTradeNo(), bizContent)));
parameters.put(BIZ_CONTENT, JSON.toJSONString(getBizContent(assistOrder.getTradeNo(), assistOrder.getOutTradeNo(), bizContent)));
//设置签名
setSign(parameters);
return requestTemplate.getForObject(getReqUrl(assistOrder.getTransactionType()) + "?" + UriVariables.getMapToParameters(parameters), JSONObject.class);

View File

@@ -5,6 +5,7 @@ import java.nio.charset.StandardCharsets;
import java.security.cert.Certificate;
import java.util.Map;
import org.apache.http.Header;
import org.apache.http.HttpEntity;
import org.apache.http.entity.ContentType;
import org.apache.http.message.BasicHeader;
@@ -105,6 +106,17 @@ public class DefaultWxPayAssistService implements WxPayAssistService {
if (statusCode >= 400) {
throw new PayErrorException(new WxPayError(responseBody.getString(WxConst.CODE), responseBody.getString(WxConst.MESSAGE), responseBody.toJSONString()));
}
Header[] headers = responseEntity.getHeaders();
if (headers == null) {
return responseBody;
}
for (Header header : headers) {
if ("Wechatpay-Serial".equals(header.getName())) {
// 更新平台证书的序列号,需要每次都更新,因为这个可能会改变
payConfigStorage.getCertEnvironment().setPlatformSerialNumber(header.getValue());
break;
}
}
return responseBody;
}

View File

@@ -657,7 +657,8 @@ public class WxPayService extends BasePayService<WxPayConfigStorage> implements
return null;
}
String serialNumber = payConfigStorage.getCertEnvironment().getSerialNumber();
// 商户上送敏感信息时使用`微信支付平台公钥`加密
String serialNumber = payConfigStorage.getCertEnvironment().getPlatformSerialNumber();
Certificate certificate = getAssistService().getCertificate(serialNumber);
return transferDetails.stream()
.peek(transferDetailListItem -> {

View File

@@ -26,7 +26,10 @@ public class CertEnvironment {
*/
private String serialNumber;
/**
* 微信平台证书序列号
*/
private String platformSerialNumber;
@@ -63,4 +66,12 @@ public class CertEnvironment {
public void setSerialNumber(String serialNumber) {
this.serialNumber = serialNumber;
}
}
public String getPlatformSerialNumber() {
return platformSerialNumber;
}
public void setPlatformSerialNumber(String platformSerialNumber) {
this.platformSerialNumber = platformSerialNumber;
}
}