正准备从平台证书序列号切换到公钥支付,但是支付回调通知的Wechatpay-Serial【总是】原来的平台证书序列号,而不是以PUB_KEY_ID_开头的公钥。
以下是支付参数:
1、使用RSAPublicKeyConfig构建配置:
new RSAPublicKeyConfig.Builder()
.merchantId(mchId) //微信支付的商户号
.privateKeyFromPath(mchCertPath) // 商户API证书私钥的存放路径
.publicKeyFromPath(publicKeyPath) //微信支付公钥的存放路径
.publicKeyId(publicKeyId) //微信支付公钥ID
.merchantSerialNumber(mchCertSerial) //商户API证书序列号
.apiV3Key(v3Key) //APIv3密钥
.build();
2、使用拦截器在请求头加上了Wechatpay-Serial:
public class WechatPaySerialInterceptor implements Interceptor {
private final String publicKeyId;
public WechatPaySerialInterceptor(String publicKeyId) {
this.publicKeyId = publicKeyId;
}
@Override
public @NotNull Response intercept(Chain chain) throws IOException {
Request originalRequest = chain.request();
Request requestWithHeader = originalRequest.newBuilder()
.header("Wechatpay-Serial", publicKeyId)
.build();
return chain.proceed(requestWithHeader);
}
}
3、更换进度:
请问我使用 sdk 调用的下单的时候,总是返回以下错误是怎么回事?publicKeyId[PUB_KEY_ID_0113214043012xxxxxxxxxxx] and serialNumber[7B77373C3A93AA83xxxxxxxxxxxxxxxxxx] are not equal
返回的serialNumber应该是publicKeyId啊,我调用的时候这里传的也是publicKeyId
publicKeyId(publicKeyId) //微信支付公钥ID
为什么下单返回变成了序列号,什么原因?
回调使用公钥的比例:是微信支付控制的,会按照第一天0.1%,第二天1%,第三天 5%,第四天10%,第五天20%,第六天50%,第七天 100% 的进度,自动灰度,商户不可以操作。灰度期间会按照上述比例使用公钥签名,剩余比例用平台证书签名,因此商户需要实现根据回调请求的 wechatpay-serial头来判断当前的回调是使用公钥还是平台证书,并使用对应的公钥或者平台证书验签。
发起请求时的Wechatpay-Serial是做应答验证的,和回调不是一回事