移动支付是今年的热门话题,快的打车和滴滴打车两款软件的PK,给广大用户带了不少的优惠,也让越来越多的人学会了在手机上使用支付宝和微信支付。
今天来介绍一下如何在手机端集成支付宝,支付宝的开发者是不允许个人申请的,只能以企业用户注册。本来集成不是件难事,但是如果你恰好有个4.1以上系统版本的手机,有个坑需要注意一下。
首先申请支付宝移动快捷支付, 访问
www.alipay.com ,登录后点击我的商家服务。下载集成文档。参见 http://club.alipay.com/read.php?tid=9976972
文档下载地址:
点我下载
如何集成我们这里不做赘述,支付宝的接入和使用规则中已经说的很详细了。重点说一下我遇到的两个坑。
坑一:版本问题导致参数错误
按照网上一位同学的博客http://www.cnblogs.com/qianxudetianxia/archive/2012/04/04/2432406.html 参考集成,总是报参数错误。后来发现支付宝新版本更改了生成订单中的seller字段,更改为seller_id 。汗,居然不向下兼容。
坑二: 调用支付宝客户端,返回错误码4000
我的手机是NOTE 2,系统版本4.1.1 ,跑测试demo死活过不去。提示异常“java.security.spec.InvalidKeySpecException: java.lang.RuntimeException: error”
开始以为是我的秘钥有问题,后来找到一个靠谱的答案:
在网上找了下,发现stackOverFlow有个比较符合这个问题的答案:
“
use encription in my app. I store private key as bytes array and use the following code to restore it:
PrivateKey private = KeyFactory.getInstance("RSA").generatePrivate(new PKCS8EncodedKeySpec(s_privateKeyIn1t));
It works perfectly on all my target android platforms 2.1 -> 4.0.4, but fails on Jelly Bean!
Jelly Bean throws an exception:
”
说是是jelly Bean也就是Android4.1版本的问题。
后来我看了下,确实以前我们做适配的机子基本都是4.0以下的。
然后这个Note2刚好是4.1.1的
然后根据下面的一个Answer
“
PKCS8EncodedKeySpec privSpec = new PKCS8EncodedKeySpec(s_privateKeyIn1t);
KeyFactory keyFactory = KeyFactory.getInstance("RSA", "BC");
PrivateKey privateKey = keyFactory.generatePrivate(privSpec);
”
即在生成keyFactory时,多一个参数“BC”,具体干嘛也不是很清楚,可以参考api文档。就可以成功调起支付宝了。