在对接快应用微信支付时发现,快应用微信支付申请使用的包名和签名须是某个原生app的包名和签名。

参考文档截图如下:

Android11替换系统设置签名设备系统签名请替换为我方提供的签名_android原生签名

App 微信支付申请时需要填入的包名、签名截图如下:

Android11替换系统设置签名设备系统签名请替换为我方提供的签名_keystore_02

可见快应用微信支付的申请是按一个原生app的方式申请的。包名还好,两者填写一样就行;而签名比较麻烦,因为原生app签名文件是一个*.keystore文件;快应用的签名文件是两个pem文件(certificate.pem和private.pem)。为保证签名一致(快应用签名须和微信支付申请填入的原生app签名一致),须将原生签名文件*.keystore转成快应用的需要的两个pem签名文件。

经反复查资料和试验,发现这种下面的转换过程是可行的。

 

原生app签名文件.keystore文件的生成

终端运行下面命令:

keytool -genkey -alias app.keystore -keyalg RSA -validity 20000 -keystore app.keystore

根据提示依次填入需要的内容和密码,这里一定要要记下这个密码,后面会用到
 

查看.keystore 文件的内容,并获取微信支付申请页需要的签名内容

运行下面命令:

keytool -list -v -keystore test.keystore -storepass 000111(第一步的密码)

如果成功的话,会在展示的结果里找到MD5的内容.将MD5后面的编码值去掉冒号后组成一个十六进制字符串,这就是微信支付申请页需要填入的签名内容。

 

将keystore文件转换为pkcs12格式的文件

keytool -importkeystore -srckeystore my.keystore -destkeystore tmp.p12 -srcstoretype JKS -deststoretype PKCS12

Android11替换系统设置签名设备系统签名请替换为我方提供的签名_快应用签名_03

输入生成keystore时的密码

最后发现同一目录下生成tmp.p12文件

 

将PKCS12格式的文件 dump成pem

openssl pkcs12 -in tmp.p12 -nodes -out tmp.rsa.pem

Android11替换系统设置签名设备系统签名请替换为我方提供的签名_微信支付_04

 

同样输入keystore的密码

最后同一目录下生成  tmp.rsa.pem

 

生成certificate.pem 和privae.pem

用记事本将第四步生成的tmp.rsa.pem打开,会发现里面包含certificate 和 private 内容。

复制“BEGIN CERTIFICATE” (包含)至“END CERTIFICATE” (包含)的内容到(新建个文件) certificate.pem

复制 “BEGIN RSA PRIVATE KEY”(包含)至 “END RSA PRIVATE KEY” (包含)的内容 到(同上) private.pem

这样就生成了两个pem文件:一个公钥一个私钥。这就是快应用工程最后需要的签名文件。

 

生成release.rpk

在快应用工程目录下的“sign”目录内创建“release”目录,同时将第6步生成的两个pem文件copy到该目录下

然后在终端命令行运行:npm run release

Android11替换系统设置签名设备系统签名请替换为我方提供的签名_pem_05

 

最后,到工程目录”dist“目录下会就能看到已经生成的release.rpk

 

 

关于微信app支付申请注意事项

1,微信app支付申请的包名不能随便改,一旦上线使用终生不得修改。

2,测试阶段,签名可以改,改完之后立即生效,但是要把微信客户端卸载掉重新测试。因为微信客户端会缓存之前的签名。