PayPal Android SDK的接入和开发、与服务器对接IPN

示例github
https://github.com/paypal/PayPal-Android-SDK

示例提供3种功能
Single Payment:提供订单细节,进行购买
Future Payments:用户授权后产生相应字段交给服务器向PayPal发起订单
Profile Sharing:PayPal用户分享

对介绍以及示例代码进行研究以后,对于国内的一般商品购买支付,Single Payment够用。此功能在设备没有PapPal客户端的时候会进行账户登录进行支付,有客户端时会调起客户端用户进行支付(正式环境下)。

PyaPal Android SDK 的引入

注:截止到2017-05-16,PayPal SDK要求SDK最低版本为16,但是可以通过修改Manifest来兼容低版本
PayPal Android SDK的接入和开发、与服务器对接IPN_第1张图片
此处在github文档中

引入SDK
compile( 'com.paypal.sdk:paypal-android-sdk:2.15.3' ) { exclude group : 'io.card' }
exclude group : 'io.card' 表明不允许直接用卡支付,如果不添加这一行,在支付时用卡支付的按钮选项出现

Single Payment功能的代码实现
示例github: https://github.com/paypal/PayPal-Android-SDK/blob/master/docs/single_payment.md

Single Payment的代码思路为:客户端处理好订单内容(如商品名,单价,数量,货币类型,运费,税,收货地址等各方面),将订单内容交付给SDK处理,然后SDK将处理结果通过onActivityResult反悔给客户端,客户端再进行订单的处理后以及跟项目服务器的后续操作(PayPal服务器也会有跟项目服务器的交互,关键字:webhook)

准备工作
创建 PayPalConfiguration  对象
PayPal Android SDK的接入和开发、与服务器对接IPN_第2张图片
其中environment函数参数有三种,NO_NETWORK,SANDBOX,PRODUCT
clientId在开发者页面登录后左侧的 My Apps & Credentials 页面中 REST API apps中创建app后才能找到,github上面的说明有点没说清楚。

启动和销毁 PayPalService
PayPal Android SDK的接入和开发、与服务器对接IPN_第3张图片
注意: 项目迁移中容易遗漏这个服务的启动和销毁,导致支付完成后有PayPal服务器拒绝连接的Error的Log

启动支付
PayPal Android SDK的接入和开发、与服务器对接IPN_第4张图片
这个代码相当简单,就是通过intent带入了config(设置)和payment(订单详情)给SDK

支付完成后的回调
PayPal Android SDK的接入和开发、与服务器对接IPN_第5张图片
就这样的代码,只要修改environment和clientID,就可以跑通。
注意,PayPal是收费的,费用在收款方收钱的时候扣除,目前是 4.4%+0.3,累计额度后可申请降低

另外,github样例代码中还有复杂的订单代码
PayPal Android SDK的接入和开发、与服务器对接IPN_第6张图片
这函数也简单,命名含义很好理解,返回结果只要通过intent带过去给SDK就可以了

样例当中还提供设置订单地址等其他方面,由于开发需要没有用到,当然可以根据需求研究。

需要注意的一些方面:
1.开发者页面当中沙箱自动生成两个帐号,一个买家一个卖家,但是还是需要在 REST API apps创建完app后才能找到clientId(这个名字略有误导,这个clientId是用来表示我们开发的app向哪个PalPal上面的客户端发送请求,而不是用来标识我们开发的app)
2.目前只调通了sandbox的环境,其中需要注意的有sandbox环境当中不会调起PapPal本地应用,只有换成正式环境的控制变量和正式环境的ClientId后才会调起本地Paypal应用。
3.PayPal可能的运行机制跟设置相关: http://blog.csdn.net/a53657561/article/details/64982411 ,该文章为网站开发相关内容,可以作为了解PayPal开发思路的参考(未验证)
4.目前由于服务器开发方面没有进行PayPal的接入,所以一些网络回调和购买信息的流程没有进行,如果后续完善了整个流程,会进行更新

与服务器联调IPN(及时付款通知)
设置沙箱的商家帐号的IPN通知地址要登录到 https://www.sandbox.paypal.com (注意这个中间多了个sandbox)

登录帐号用 [email protected],至于密码需要在 https://developer.paypal.com/docs/integration/admin/manage-apps/ 这里面的沙箱帐号修改

下面这个页面有点坑 PayPal Android SDK的接入和开发、与服务器对接IPN_第7张图片
注意这里的帐号可以点击(不能下拉的时候可能没加载完,耐心点),下拉出Profile后点击进去,会有修改密码的选项

特别注意:登录沙箱任意帐号记得要先来这里设置密码!不先设密码的话很可能用不了这个沙箱帐号(不管是app付款用的买家帐号还是服务器用的商家帐号都要修改下密码),而修改沙箱帐号密码不需要原始密码,可以随意改,至于沙箱的原始密码,鬼知道是啥!

吐槽:因为没有设置沙箱商家帐号的密码导致服务器的童靴被坑了一把(登陆不了商家的sandbox设置,支付成功收不到PalPal发的消息,然后开发者页面又有个webhook,但又不适用,以为这个流程不适合,转去搞future payment了一阵),反正坑有点大的感觉。

顺带提醒,接入SDK时用的沙箱测试帐号,就是那个 [email protected]在使用前也要设置一下密码,避免又是使用不了沙箱帐号的情况

与服务器对接注意下IPC通知回调网址要到 https://www.sandbox.paypal.com 中设置(不要直接登录正式帐号),这网址要登录沙箱帐号的时候记得先修改密码!

联调以后,确认上面提供的bug a thing 流程适用,SDK接入不需要额外修改密码。

被坑惨!!
注意,沙箱帐号当中有设置是否对payment review的设置,如果是on,服务器去查询订单问题状态的时候一直都会是pending!注意商家跟买家帐号都要把这项关掉,设置入口就是在修改密码当中另一项!
PayPal Android SDK的接入和开发、与服务器对接IPN_第8张图片

总结
其实接入PayPal Android SDK代码方面并不复杂,主要就是没有一个完整的介绍文档,网上的一些文档要么太老,要么没有完整,要么没有说到点子上。

这次开发主要先从官网的开发者文章读起,然后找到github样例,根据github上面的描述进行接入,结果被文档、github、样例中的注释当中的语义相近的概念绕着走了一些时间

你可能感兴趣的:(Android开发)