Android 支付宝集成及解决支付宝报null指针问题

来源:互联网 发布:mac 版梦幻西游有么 编辑:程序博客网 时间:2024/06/08 17:14

最近公司的先项目有用到支付宝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。


2 0
原创粉丝点击