微信开发
wx支付 privatekey 无效的密钥格式
时间:2024-01-01
在对接微信支付的时候,根据支付文档使用固定jar包来获取CloseableHttpClient 。在进行加载商户密钥时,出现了如题错误。错误出现的原因是privateKey有误。
一、代码
出现这个问题的原因是privatekey错了;
private String appid = "xx";
private CloseableHttpClient httpClient;
private String privatekey= "xxx";
private String mchId = "xx";
private String mchSerialNo = "xx";
private String apiV3Key = "xx";
private String notifyurl= "xx";
public void setup() throws IOException {
// 加载商户私钥(privateKey:私钥字符串)
PrivateKey merchantPrivateKey = PemUtil.loadPrivateKey(
new ByteArrayInputStream(privatekey.getBytes("utf-8")));
// 加载平台证书(mchId:商户号,mchSerialNo:商户证书序列号,apiV3Key:V3密钥)
AutoUpdateCertificatesVerifier verifier = new AutoUpdateCertificatesVerifier(
new WechatPay2Credentials(mchId, new PrivateKeySigner(mchSerialNo, merchantPrivateKey)),
apiV3Key.getBytes("utf-8"));
// 初始化httpClient
httpClient = WechatPayHttpClientBuilder.create()
.withMerchant(
mchId, mchSerialNo,
merchantPrivateKey).withValidator(new WechatPay2Validator(verifier))
.build();
}
二、原因
1、可能是复制错了,有空格或者多余的字符串啥的,可以仔细比对一番;
2、第一条是确保按照正确的方式获取了privateKey,如果方式不正确,得到的privateKey也不正确;
在微信商户平台申请apiV3证书的时候,需要先根据提示正确安装微信商户支付平台证书工具。获取privateKey的步骤如下
微信官方:正确获取微信商户支付证书privateKey的方式
在下载文件中找到apiclilient.pem,里面的字符串才是真正的privateKey