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

App第三方支付那些坑

2016-07-28 10:39 246 查看
Android app对接支付的时候,很容易出现问题.主要的原因就是:

1.对应平台开发者帐号申请和配置,容易出现问题.

2.应用的支付能力的申请,包名和签名易出错

3.加密规则,看文档可能理解的不清楚

我最近开发的项目中就涉及到了微信支付和支付宝支付.这里跟大家分享一下:

微信支付:

这个是微信app支付开发文档地址:https://pay.weixin.qq.com/wiki/doc/api/app/app.php?chapter=8_5

1.建议大家在做之前一定要了解app微信支付的流程和android app接入的流程.不要下载一个demo就觉得完事了.

2.app支付流程在文档的API列表一栏中有,这里对关键的两步做一下解释,统一下单,调起支付:

a.服务器统一下单接口(这个在支付文档中是有的).第一次看到的时候以为是客户端的事情.其实不是的.就是服务器通过跟微信交换生成预付的订单.

生成的订单,可以通过微信的不同的支付方式进行支付(比如扫描支付,微信app支付等等).统一下单需要注意的有两点:

1> 必传的字段一定要传则

2>生产sign的规则,按照文档就可以,需要特别注意两点 第一参数名按照ASCII从小到大的顺序. 第二参数名(参数名称也用于加密了--key)就是调用接口(统一下单接口)接口文档中的变量名称.

b.调起支付宝接口:这里也是需要注意两点:

1.签名sign需要在服务器签名,千万放在客户端上.签名是需要平台上的key(密钥).这样会泄漏

2.sign签名的时候.签名的变量名也就是key,是支付接口(客户端支付接口)中的变量名称.这个很容易搞错.因为服务器有时候不看客户端接口是什么.经常会自定义key.



支付宝支付

这个是支付宝app支付开发文档地址:https://doc.open.alipay.com/doc2/detail?treeId=59&articleId=103563&docType=1

支付宝的支付流程要比微信的简单,服务器不需要先生成预付的订单.直接把支付的订单信息和加密生成的sign合成字符串给客户端.客户端就可以直接支付了.容易出问题的地方就在RSA签名这一块.因为客户端接口只支持RSA签名的方式(其他的支付是可以支持md5加密方式的).RSA需要上传公钥,RSA密钥的生成和使用要注意.

下面具体具体的问题:

1.创建应用的时候.签名是32位md5加密jks签名.

2.服务器如何使用RSA密钥加解密:
a.关于密钥的生成和使用可以想看一下下面的博客和支付宝说明文档
可以参考一下这个博客:http://m.blog.csdn.net/article/details?id=47908451
支付宝的文档中其实也说的很清楚:https://doc.open.alipay.com/doc2/detail.htm?spm=a219a.7629140.0.0.7uhjwG&treeId=58&articleId=103578&docType=1

b.关于密钥的事情具体概括如下:
1>合作伙伴的公钥和应用的公钥,合作伙伴的公钥是参与加解密的.应用的公钥好像没有什么作用(这个大家知道可以在评论中告诉我),可以跟合作伙伴的公钥一样

2>支付宝的公钥是根据上传的合作伙伴的公钥生成的.

3>具体加解密规则如下:RSA加密用到的是合作伙伴的私钥(公钥需要上传到平台) ,服务器端解密使用的支付宝的公钥.具体截图如下.

4>还要注意生成的密钥中私钥是有两个,php和java使用的是不一样的.

5>加密和解密都是在服务器端,客户端只需要得到生成的字符串去支付就可以

6>如果服务器加密跟支付宝重新加密不匹配的话.就会出现 ALI64的错误.

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: