【微信支付】修复公钥模式下V3接口未设置Wechatpay-Serial请求头导致的验签失败 by HerveyHall · Pull Request #3548 · binarywang/WxJava
目前查看源码发现postV3方法中请求接口时已经添加Wechatpay-Serial请求头,所以对于get请求也可以暂时在获取WxPayService实例时通过重写getV3方法来解决,代码如下:
private static com.github.binarywang.wxpay.service.WxPayService getWxPayService(WxPayConfig payConfig) {
com.github.binarywang.wxpay.service.WxPayService wxPayService = new com.github.binarywang.wxpay.service.impl.WxPayServiceImpl() {
@Override
public String getV3(String url) throws WxPayException {
HttpGet httpGet = new HttpGet(url);
httpGet.addHeader("Accept", "application/json");
httpGet.addHeader("Content-Type", "application/json");
httpGet.addHeader("Wechatpay-Serial", getWechatpaySerial(this.getConfig()));
return this.requestV3(url, httpGet);
}
private String getWechatpaySerial(WxPayConfig wxPayConfig) {
if (StringUtils.isNotBlank(wxPayConfig.getPublicKeyId())) {
return wxPayConfig.getPublicKeyId();
}
return wxPayConfig.getVerifier().getValidCertificate().getSerialNumber().toString(16).toUpperCase();
}
};
wxPayService.setConfig(payConfig);
return wxPayService;
}