示例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来兼容低版本
此处在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
对象
其中environment函数参数有三种,NO_NETWORK,SANDBOX,PRODUCT
clientId在开发者页面登录后左侧的
My Apps & Credentials
页面中
REST API apps中创建app后才能找到,github上面的说明有点没说清楚。
启动和销毁
PayPalService
注意:
项目迁移中容易遗漏这个服务的启动和销毁,导致支付完成后有PayPal服务器拒绝连接的Error的Log
启动支付
这个代码相当简单,就是通过intent带入了config(设置)和payment(订单详情)给SDK
支付完成后的回调
就这样的代码,只要修改environment和clientID,就可以跑通。
注意,PayPal是收费的,费用在收款方收钱的时候扣除,目前是
4.4%+0.3,累计额度后可申请降低
另外,github样例代码中还有复杂的订单代码
这函数也简单,命名含义很好理解,返回结果只要通过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/
这里面的沙箱帐号修改
下面这个页面有点坑
注意这里的帐号可以点击(不能下拉的时候可能没加载完,耐心点),下拉出Profile后点击进去,会有修改密码的选项
特别注意:登录沙箱任意帐号记得要先来这里设置密码!不先设密码的话很可能用不了这个沙箱帐号(不管是app付款用的买家帐号还是服务器用的商家帐号都要修改下密码),而修改沙箱帐号密码不需要原始密码,可以随意改,至于沙箱的原始密码,鬼知道是啥!
吐槽:因为没有设置沙箱商家帐号的密码导致服务器的童靴被坑了一把(登陆不了商家的sandbox设置,支付成功收不到PalPal发的消息,然后开发者页面又有个webhook,但又不适用,以为这个流程不适合,转去搞future payment了一阵),反正坑有点大的感觉。
与服务器对接注意下IPC通知回调网址要到
https://www.sandbox.paypal.com
中设置(不要直接登录正式帐号),这网址要登录沙箱帐号的时候记得先修改密码!
联调以后,确认上面提供的bug a thing 流程适用,SDK接入不需要额外修改密码。
被坑惨!!
注意,沙箱帐号当中有设置是否对payment review的设置,如果是on,服务器去查询订单问题状态的时候一直都会是pending!注意商家跟买家帐号都要把这项关掉,设置入口就是在修改密码当中另一项!
总结
其实接入PayPal Android SDK代码方面并不复杂,主要就是没有一个完整的介绍文档,网上的一些文档要么太老,要么没有完整,要么没有说到点子上。
这次开发主要先从官网的开发者文章读起,然后找到github样例,根据github上面的描述进行接入,结果被文档、github、样例中的注释当中的语义相近的概念绕着走了一些时间