public class CertificateDownloaderTest {
//用于证书解密的密钥
private String apiV3key = "XXXXXXXXXXXXXXXXXXXXXXXXXXXX";
// 商户号
private static String mchId = "XXXXXXXXXXXX";
// 商户证书序列号
private static String mchSerialNo = "XXXXXXXXXXXXXXXXXXXXXXX";
// 商户私钥
private static String mchPrivateKeyFilePath = "D:\\software\\项目\\邮政\\邮政微信生产环境\\apiclient_key.key";
// 微信支付平台证书
//private static String wechatpayCertificateFilePath = "wxpayplatformcert.pem";
//下载成功后保存证书的路径
private static String outputFilePath = "D:\\ideal_project\\YouZheng_Project\\cert";
@Test
public void testCertDownload() {
// String[] args = {"-k", apiV3key, "-m", mchId, "-f", mchPrivateKeyFilePath,
// "-s", mchSerialNo, "-o", outputFilePath, "-c", wechatpayCertificateFilePath};
String[] args = {"-k", apiV3key, "-m", mchId, "-f", mchPrivateKeyFilePath,
"-s", mchSerialNo, "-o", outputFilePath};
CommandLine.run(new CertificateDownloader(), args);
}
}
上面的是生成平台证书的demo。所有参数准备完毕后,执行@Test标记的方法的,就会生成wechatpay_259784D9784D7F32B3F02B513455DF32B3F02A6.pem(V3平台证书)。
这里在执行方法时:可能出现以下问题:
报错信息:java.security.InvalidKeyException: Illegal key size
jdk8自带的jar包AES解密只能处理128位的密钥
需要去Oracle官网下载jar包替换原有jar包
Oracle官网的jar包下载地址:https://www.oracle.com/cn/java/technologies/javase-jce8-downloads.html
需要用到的2个jia包文件名
- local_policy.jar
- US_export_policy.jar
找到JDK的安装路劲:
默认为:C:\Program Files\Java
将刚才的2个jar包与 jre1.8.0_20\lib\security\ 路劲下的2个同名的jar包替换
再将刚才的2个jar包与 jdk1.8.0_20\jre\lib\security 路劲下的2个同名的jar包替换
现在可以执行代码获取平台证书了。
官方证书下载工具地址:https://github.com/wechatpay-apiv3/CertificateDownloader
如果客户提供的是apiclient_cert.p12需要通过工具导出里面的商户私钥。p12证书里面有一对公私钥。
可以通过openSSL提供的命令:
#从p12证书中导出私钥key,导出到自动生成的apiclient_key.key文件中
openssl pkcs12 -in apiclient_cert.p12 -nocerts -nodes -out apiclient_key.key
-nocerts :表示 不导出证书
-nodes:表示对导出的私钥不进行加密,否则在生成.key文件的过程中,会提示让设置密码。
生成完.key文件后,然后手动删除
Bag Attributes
localKeyID: XXXXXXXXXXXXXXXXXXXX
friendlyName: Tenpay Certificate
Key Attributes: <No Attributes>这部分内容
只保留:
-----BEGIN PRIVATE KEY-----
xxxxxxxxxxxxx
-----END PRIVATE KEY-----
这些内容


176

被折叠的 条评论
为什么被折叠?



