android 支付宝

公司项目接入支付宝历来就有但是一直客户端签名现如今他们要使用服务器签名。其它他们遇到了一些问题,我也了解了一些。现在记录一下,首先:
支付宝流程如下
1. 自己会生成一个RSA密钥(公钥,私钥)私钥用于订单签名(开发者使用客户端或者服务器都可能,取决于签名信息由哪端生成)。公钥需要通过后台上传到支付宝,支付定会用来验证订单的合法性。生成方式为:
a.生成密钥
openssl genrsa -out rsa_private_key.pem 1024
b. pkcs8对私钥加密
openssl pkcs8 -topk8 -inform PEM -in rsa_private_key.pem -outform PEM -nocrypt -out private_key.pem
这没有测试,使用时还是按支付宝文档
c. 生成公钥
openssl rsa -in rsa_private_key.pem -pubout -out rsa_public_key.pem
这里要注意ruby php不支持pkcs8加密后的私钥,所以要用第一步生成的私钥。
2. 客户端生成订单信息,订单信息中会有一个sign参数用来传递签名信息。
3. 支付宝服务器通过后台上传的公钥验证订单 成功则继续完成支付流程

这里有个问题就是ruby php不支持pkcs8要使用未pkcs8之前的私钥,而项目组之前未保留未pkcs8的私钥,所以这里需要一个pkcs8到未pkcs8密码的转换。

转换方式如下:
未pkcs8到pkcs8
openssl pkcs8 -topk8 -in /Users/spring/no_pkcs8.pem -out /Users/spring/pkcs8_rsa_private_key.pem -nocrypt
pkcs8到未pkcs8
openssl pkcs8 -in /Users/spring/pkcs8_rsa_private_key.pem -out /Users/spring/no_pkcs8_rsa_private_key.pem -nocrypt
这个有测试。

这里的pem文件是这样的:
-----BEGIN RSA PRIVATE KEY-----
MIICdAIBADANBgkqhkiG9w0BAQEFAASCAl4wggJaAgEAAoGBANJuqLJ/MhUpDor0
dl3eX5Q7c/9UO/i1xS2D8wUCDSSp4VMlfJvnpRx3U/BHkhJlxSKROxBuIiQw7u0u
+/v3g5jMrxVC2lMuHGACgxcCEz+WODfpQ0jHipRb72Dk1S8t93jk1aYsELY5bT3N
+7OXfitHrya6q/T5hOEt/BoEcXYXAgMBAAECfxBwlL1dMox0qK4yawzqUo1CF83a
xtSnXsAvjszVXDGBFBlq1FFZx4xxxhz/emn1iXEp53NhJ0msiP3+rbEBpUYmbSWb
Xy91C+znQ3s90QQZJnT3lNIcFGLxW0P4E9v5P9ETB+PEdJPasoUqmSKtuT32G+Eg
CHfneulRln63JyECQQDw2iMJdOxAt3C+aTO0caGi0JXm3DdKixZ7d8dkFA0J0ilZ
oIWHW0z7si+YcubMmgQAnls/b1J1qVxSSifwc+xFAkEA36q+mSgPhAZv6BT2cDfr
161TtRz719+KY8G7vFzuSSf+mfWWbRdlRwMP9ATvpkuRtcYIfFtwHh3hCIEhZUxU
qwJAbJNpyBGVj3citDPowyeWnjc53GDZ7BjXgcF1eYAwgITlbyoWB/b4tV6WZjsm
IIYt17mLmQUuPyyiGdakOpmHoQJBAKzSkulmwe5ixu9N20nEe/Av1mE4XwRjjtwb
4wLdz6UpSRoPYEc076WaISaM9dvJwnHw7behM5WhwrK+jF5oR3cCQGbexS+rL9s8
k8xiQYomIU7EBuWALDmRP4EekMoBkQUbeaBRMNWV4T6Lt8QPdYshgpjDaTNC7Vmi
jjYaFa1Atqs=
-----END RSA PRIVATE KEY-----

注意
1.以-----BEGIN RSA PRIVATE KEY-----开始
2. 以-----END RSA PRIVATE KEY-----

结束最后有一空行。
3. 每行的文字数是固定的
这里因为文字不等宽所以看起来长度不同。

猜你喜欢

转载自billyyuan.iteye.com/blog/2018302