快应用第三方登录支付签名教程
本篇快应用教程,将如何创建第三方登录、支付签名做下说明;生成的签名可用于微信,微博、QQ 的分享、登录、以及支付。另外,也会对快应用登录、支付常见问题,做下解答。
一 已有 app 的 keystore 证书
如果已经在微信、微博后台注册应用,并拥有 app 的 keystore 证书,那么参见如下操作步骤即可:
- 快应用的包名需要和微信开放平台上所写的包名一致,快应用包名不允许和已发布的 app 包名一致
- 拿到注册到微信的 app 的 keystore 证书和密码
- 用下列命令,由 keystaore 文件生成 pkcs12 格式的密钥文件(过程中会提示输入密码)
keytool -importkeystore -srckeystore test.keystore
-destkeystore test.p12 -deststoretype PKCS12
- 用下列命令,通过 pksc12 文件生成 pem 签名(过程中会提示输入密码,pem 就是快应用的签名文件)
openssl pkcs12 -in test.p12 -nokeys -out
certificate.pem
- 用下列命令,生成
pem 私钥
openssl pkcs12 -in test.p12 -nocerts -nodes
-out private.pem
- 把步骤 4 和 5 生成的 private.pem 和 certificate.pem 放到
sign/release
目录下 - 也可以用快应用开发工具从“keystore 证书转 pem 证书”,成功后查看 sign/release 目录下是否生成 private.pem 和 certificate.pem
- 注意
manifest.json
中如果需要声明包名的接口,包名要和微信后台注册的包名一致
manifest.json
里支付分享登陆接口,需要填 sign 的,这个签名填 certificate.pem 中的内容,是 base64 签名,填写到微信后台的是 MD5 签名,用快应用开发工具生成(如图最后一项)
- 如图是微信后台的包名签名信息
- 如图是
manifest.json
的微信支付接口声明的包名签名信息
二 只有快应用的 openssl 证书,没有 APP 的证书
- 快应用开发工具可以生成快应用的签名,选择“生成证书”
- 生成 MD5 签名:
(1)生成快快应用证书后,继续使用快应用开发工具,“由证书生成 MD5”
(2)或者,生成快快应用证书后,用命令生成 MD5 签名
openssl x509 -noout -fingerprint -md5
-inform pem -in certificate.pem
命令执行结果如下
MD5
Fingerprint=89:46:3A:61:77:E4:66:75:B5:A7:5B:4E:36:E8:62:FA
然后只需要把=号后面的字符串取出来,并且把:号去掉,得出如下字符串
FCEE9EA7F8B8684BBB75EC3DFAB994F8
- 在微信后台用快应用的包名注册应用,微信后台的应用签名填步骤 2 生成的
MD5
签名 - 注意
manifest.json
中快应用包名和需要声明包名的接口,包名要填微信后台注册的包名
- manifest 里支付分享登陆接口,需要填
sign
的,这个签名填 certificate.pem 中的内容,是 base64 签名 - 调试的时候,要把
sign/release
下的签名证书,复制到sign/debug
文件夹下
快应用支付常见问题
- Q:网页支付和 app 支付优先级
如果 manifest 配置了两种支付所需的参数:
(1)且手机支持两种支付方式,默认使用 app 支付
(2)手机不支持 app 支付,默认使用网页支付
如果 manifest 只配置了一种支付参数,使用配置了参数的支付方式。
- Q:网页支付没有回调
网页支付,需要自行去回调地址接受微信支付的回调结果,或者通过微信提供的支付结果查询接口查询。
- Q:为什么有些帖子中描述 APP 方式接入需要创建 Android App?
创建 Android App 的方式也可以,只是比较麻烦。建议参见如上文章,不需要 Android App。APP 方式接入的关键在于:将公钥签名证书的 MD 5 注册到微信开放平台,微信官方提供了工具,用于获取 Android App 中签名 MD5,但是比较麻烦。建议使用 openssl 工具直接读取公钥中的 MD5。
- 如何确认微信支付成功?
APP 方式支付,支付成功会通过 success 回调,并带有 prepayid 。网页支付方式,支付成功是回调到服务器端的地址,所以这种情况下,success 回调只表示成功向微信发起了请求。如果需要接收这个支付结果,请在微信【统一下单】接口的请求参数里面带上 notify_url,参考微信支付文档
- 微信 APP 方式返回错误 1000,但是手机已经微信已经安装微信,这是什么原因?
这个问题有两种可能:
-
- manifest.json 文件中没有配置 app 支付的相关参数;
-
- 微信 APP 支付需要依赖手机厂商实现,该厂商未在该机型上实现微信 APP 支付,也会导致返回 1000,具体支持机型,请参考官方文档或者在微信/QQ 群咨询厂商人员,比如:vivo 技术弟。