最近公司的先项目有用到支付宝sdk,虽然支付宝集成简单,但是作为小白的我在集成过程中仍然遇到了几个问题再次总结一下,希望对他人有所帮助。
第一步:
下载支付宝的官方demo压缩包后里面有两个文件,一个是DEMO文件夹,一个是更新日志的txt(不用管),DEMO文件夹里有三个文件夹:
一个是android的demo
一个是ios的demo
一个是openssl
接下来我们会把android的demo导入到我们自己的开发工具中eclipse,之后运行我们会发现,一个toast提示“ 需要配置PARTNER | SELLER | RSA_PRIVATE” ,其实android项目还需要一个变量RSA_PUBLIC(支付宝公匙)
第二步:
获取PARTNER、 SELLER、 RSA_PRIVATE、RSA_PUBLIC
PARTNER即商户PID ,这个登录自己的支付宝账号,到商家服务里面会有对应的PID和key点击查看即可
SELLER即商户收款账号,这个账号就是商户注册的支付宝的登录的账号
RSA_PRIVATE和RSA_PUBLIC是商户私匙和公钥,这两个变量要用到openssl文件夹下bin下的openssl.exe去生成。
生成RSA_PRIVATE和RSA_PUBLIC:
双击openssl.exe,这时候进入我们熟悉的命令窗口,
-
Windows用户在cmd窗口中进行以下操作:
C:\Users\Hammer>cd C:\OpenSSL-Win32\bin
进入OpenSSL安装目录
C:\OpenSSL-Win32\bin>openssl.exe
进入OpenSSL程序
OpenSSL> genrsa -out rsa_private_key.pem 1024
生成私钥
OpenSSL> pkcs8 -topk8 -inform PEM -in rsa_private_key.pem -outform PEM -nocrypt
Java开发者需要将私钥转换成PKCS8格式
OpenSSL> rsa -in rsa_private_key.pem -pubout -out rsa_public_key.pem
生成公钥
OpenSSL> exit ##
退出OpenSSL程序
注意:对于使用Java的开发者,将pkcs8在console中输出的私钥去除头尾、换行和空格,作为开发者私钥,对于.NET和PHP的开发者来说,无 需进行pkcs8命令行操作。(貌似我的没有进行pkcs8转换,一样的可以,转了反而不行了)
第三步:
将生成的RSA_PUBLIC到支付宝中上传,生成密钥
第四步:
运动demo,在运行的过程中可能回报一个空指针在
sign = URLEncoder.encode(sign, "UTF-8"); 这一行。这是由于支付宝针对的版本不同所造成的,
解决办法:找到SignUtils类,
PKCS8EncodedKeySpec priPKCS8 = new PKCS8EncodedKeySpec(
Base64.decode(privateKey));
//此处由于版本不同可能要添加 “BC”
KeyFactory keyf = KeyFactory.getInstance(ALGORITHM,"BC");
PrivateKey priKey = keyf.generatePrivate(priPKCS8);
再次运行,空指针的异常就不见了。
第五步:
正常情况下现在demo就可以正常运行了进入支付宝的HTML5页面进行支付了,如果在运行的返回结果中返回
4000,系统繁忙。那么请认真检查你的清单文件,是不是缺少权限,或者忘记注册activity。