您的位置:首页 > 移动开发 > Android开发

支付宝集成获取私钥与公钥

2015-12-01 21:06 211 查看
转载:http://blog.it985.com/12276.html 
http://blog.csdn.net/easyer2012/article/details/38796859
项目需要,需要在客户端集成支付宝接口。就研究了一下:因为使用支付宝接口,就需要到支付宝官网:注册帐号,并申请。下面讲的是申请好之后的操作。登录成功之后,   店家我的商家服务—在页面的下方找到——>签约管理—>找打 移动支付—–>点击下载集成文档—>跳到新的页面,在页面下方—>找到下载开发包,下载移动支付即可。然后解压出来之后一般会得到三个文件夹。

这个时候要打开文件名为:  支付宝钱包支付接口开发包2.0标准版的文件。打开之后有一个Demo 文件。打开Demo文件。里面会有三个文件夹:第一个 openssl; 第二个 服务端 Demo,第三个 客户端demo. 这个时候,我们需要关心的是  openssl 文件与 客户端Demo 的文件。

在第三个Demo文件中有IOS版与Android 版的Demo.但是你要部署运行的时候,会发现不能运行成功。在项目主文件里面这样一段代码:

因为这些,都是需要根据商户注册的信息来填写的。所以就算下下载了Demo,也没有用。下面讲的就是如何获取私钥与支付宝公钥。

还记得刚刚我们加压之后的openssl文件嘛?获取私钥与公钥的方法就在里面:

首先打开openssl文件:以下是文件打开顺序: openssl–>bin –> 双击 openssl.exe文件。这个时候会出现一个命令框:(首先要说明的是这个文件是在Windows系统下打开的)要是苹果系统好像不行.接着继续往下说:

打开命令框后:输入第一行命令 ,生成私钥,如下:

按回车键,接着输入第二行命令,生成公钥:

按回车键,接着输入第三行命令,将RSA私钥转换成PKCS8格式

 

执行完这三行命令后,就生成了两个以:.pem 结尾的文件。这就是我们生成的公钥与私钥.文件位置就在: bin  目录下。当然我们打不开这两个文件。但是我们可以复制一份到桌面,改成Txt文件打开即可。因为我们需要的只是里面的字符串,记住当我们引用这两个长的字符串的时候,需要注意的是:字符串,不能包括,换行,空格,以及其他误加的字符。所以复制的时候一定要小心。

当然私钥就是我们需要的私钥了,如何获得支付宝公钥呢:回到支付宝首先,首先登录,

一:  点击“查看PID|KEY”,在新打开的页面(https://b.alipay.com/order/pidAndKey.htm ),可查看到签约支付宝账号、合作者身份ID(PID.

二:输入支付密码,查询key、支付宝公钥。

三:上传RSA公钥,在“合作伙伴密钥管理”下,点击“RSA加密”后的“添加密钥”,把自己的公钥复制进去。注意不能有空格,换

行之类的。





 

 

 

四:点击确认上传,若是提示上传成功。则就是成功。

这个时候就可查看支付宝公钥了。如图:





至此,将对应的私钥与公钥填到相应位置我们的Demo  就可一运行了。然后集成到项目中即可。就需要自己动手了。遇到问题,百度一下。希望给你带来用处。

————————————————————————————————————————————————————————————
问题一:

 java.security.spec.InvalidKeySpecException: java.lang.RuntimeException: error:0D0680A8:asn1 encoding routines:ASN1_CHECK_TLEN:wrong tag 

解决:私钥有问题,
http://bbs.csdn.net/topics/390961540
问题二:

做支付宝支付的时候,

PKCS8EncodedKeySpec priPKCS8 = new PKCS8EncodedKeySpec(Base64.decode(privateKey));
KeyFactory keyf = KeyFactory.getInstance(“RSA”);
PrivateKey priKey = keyf.generatePrivate(priPKCS8);
执行加密的时候就报这个错
java.security.spec.InvalidKeySpecException: java.lang.RuntimeException: error:0D0680A8:asn1 encoding routines:ASN1_CHECK_TLEN:wrong tag
在网上查找解决方法的时候看人说改成KeyFactory keyf = KeyFactory.getInstance(“RSA”,"BC");可以解决
但是改后就变成下面这个错误了。
java.security.spec.InvalidKeySpecException: java.lang.ClassCastException: com.android.org.bouncycastle.asn1.DERSequence cannot be cast to com.android.org.bouncycastle.asn1.DERInteger

解决:http://my.oschina.net/u/1395670/blog/508251

问题三:



解决:这个问题不知道是什么问题,最后没办法,就又下了一次支付宝demo,然后再改变PID,账号,私钥。就又不会报错了,不知道为什么。

 问题四: android端接入支付宝 移动支付,同步参数返回参数如何做数据验证。

解决:咨询客户技术,说app容易被反编译,会暴露出自己的公钥和私钥,所以建议数据验证放在服务器端验证。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  android 支付宝 验证