App第三方支付那些坑

     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第三方支付那些坑_第1张图片

支付宝支付

        这个是支付宝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的错误.
App第三方支付那些坑_第2张图片

     

你可能感兴趣的:(app第三方支付,微信支付,支付宝支付)