Android PayPal 支付集成

PayPal本身自己有移动端的SDK,但是已经不推荐使用了,我也自己集成了一下,还有一些问题存在,在这里就不做介绍了,官方推荐使用BraintreeSDK来集成,Braintree支持很多种支付方式,也有很多调用方式,我也尝试了很多,为了大家少走弯路,直接看这篇文档就可以了:

集成文档:https://developer.paypal.com/docs/accept-payments/express-checkout/ec-braintree-sdk/client-side/android/v2/

首先介绍一下,Braintree是需要申请资质的,但是似乎不是那么好申请,因为我们公司最后就没有申请下来,他SDK里面好多支付方式,都是需要在申请通过了之后才可以使用.

没有Braintree账号,也没有关系,使用依据上面的文档,我们使用PayPal还是可以的。

1. 添加依赖

dependencies {……implementation 'com.braintreepayments.api:braintree:3.0.0'
}

2. 配置清单文件

<activity android:name="com.braintreepayments.api.BraintreeBrowserSwitchActivity"android:launchMode="singleTask"><intent-filter><action android:name="android.intent.action.VIEW" /><category android:name="android.intent.category.DEFAULT" /><category android:name="android.intent.category.BROWSABLE" /><data android:scheme="${applicationId}.braintree" /></intent-filter>
</activity>

3. 获取支付token

通过后台接口下单,获取支付token

4. 初始化

try {mBraintreeFragment = BraintreeFragment.newInstance(activity, clientToken)// 支付完成监听mBraintreeFragment?.addListener(mPaymentMethodNonceCreatedListener)// 取消监听mBraintreeFragment?.addListener(mBraintreeCancelListener)// 错误监听mBraintreeFragment?.addListener(mBraintreeErrorListener)
} catch (e: InvalidArgumentException) {e.printStackTrace()
}

5. 调起支付

val request = PayPalRequest("订单金额").currencyCode("货币类型").intent(PayPalRequest.INTENT_SALE)
PayPal.requestOneTimePayment(mBraintreeFragment, request)

这里有一个设置intent,有三个可选项:PayPalRequest.INTENT_AUTHORIZEPayPalRequest.INTENT_SALEPayPalRequest.INTENT_ORDER。默认是PayPalRequest.INTENT_AUTHORIZE,表示预授权,并不是立即到账。如果想要支付立即到账,需要设置为PayPalRequest.INTENT_SALE

支付成功后,可以在mPaymentMethodNonceCreatedListener接口中取得nonce订单号等信息,验证支付结果。

5.1 关于调起PayPal支付还是Web支付

SDK会调起PayPal支付还是Web支付,在默认配置下,每次请求支付,SDK会请求当前平台的对应配置来判断是调用PayPal App支付,还是通过浏览器Web支付。也就是说,支付方式是由PayPal来控制的。

配置信息在 ConfigManager.java 中的 CONFIGURATION_URL常量。

  • Android :https://www.paypalobjects.com/webstatic/otc/otc-config.android.json
  • IOS :https://www.paypalobjects.com/webstatic/otc/otc-config.ios.json

这里安卓的配置当前时间点的配置(2019-12-06 15:06:55),是通过浏览器开支付的,即不管本地有没有安装PayPal,SDK都会通过调起浏览器来支付。(IOS的配置是通过App来实现支付的。PS:如果已经安装PayPal App)

5.2 解决方案

方案一(推荐)

在调用支付之前先配置:

PayPalOneTouchCore.useHardcodedConfig(applicationContext, true)

作用是禁止每次支付请求最新配置,而是使用本地默认的配置,默认配置是通过App来支付的。PS:已安装PayPal。
默认配置在:com.paypal.android.sdk.onetouch.core.BuildConfig.CONFIGURATION

方案二

通过反射修改ConfigManager.java 中的 CONFIGURATION_URL常量,可以改成去读取IOS的配置,或者改成自己服务器上的配置。

val declaredField = ConfigManager::class.java.getDeclaredField("CONFIGURATION_URL")
declaredField.isAccessible = true
declaredField.set(null ,"https://www.paypalobjects.com/webstatic/otc/otc-config.ios.json")

Android PayPal 支付集成相关推荐

  1. Android paypal支付 集成 Manifest merger failed with multiple errors, see logs

    paypal 第一次接触,听说很强大,在这里我门先不深究它的来历,上代码 首先你要下在个SDK,呵呵..... 1官网链接:https://developer.paypal.com/docs/clas ...

  2. Android PayPal支付的接入和SDK支付过程解析

    Android PayPal支付的接入和SDK支付过程解析 根据产品需求,要接入PayPal支付,在研究了几天支付后,总结下内容给新手使用,本篇文章如果与官方文档有差异的话,一切以官方为准.转载请注明 ...

  3. Android PayPal支付

    最近集成完PayPal支付,记录一下集成注意事项. 一.PayPal版本选择 由于官方不再支持旧版的"PayPal-Android-SDK",所以决定直接集成"Nativ ...

  4. PayPal支付集成到自己Web网站

    PayPal如何集成到B2C网站? 因为网上实在找不到集成教程,我习惯性的google了一下相关资料,发现关于paypal接口的中文文档并不多,也不详细,只好自己研究,还好paypal上的资料非常齐全 ...

  5. Android开发支付集成——微信集成

    支付宝支付传送门:https://www.cnblogs.com/dingxiansen/p/9208949.html 二.微信支付 1. 微信支付流程图 相比较而言,微信支付是要比支付宝麻烦一些,并 ...

  6. 关于paypal支付集成

    作为移动支付在国外的佼佼者,paypal在国外相当于是国内的支付,所以它的通用性可想而知. 最近,由于工作需要,开始研究paypal移动支付,由于paypal并没有中文的开发文档供技术人员去参考,所以 ...

  7. java paypal 支付集成_PayPal支付与动态Paypal帐户集成

    我有一个网站(内置Laravel),允许拥有PayPal帐户的商家出售他们的商品,这类似于没有购物车功能的eBay . 但是,我在将PayPal集成到我的网站时遇到了问题,因为我不知道确保数据正确的最 ...

  8. Android 微信支付集成

    准备工作 1.先在微信开发者平台注册账号:开发者平台地址 https://open.weixin.qq.com/ 2.注册完之后,需要申请开发者资质认证,这个是要交费的,还需要填写公司信息啥的,交完费 ...

  9. Android微信支付集成和踩过的坑

    近公司需要微信支付,所以不得不去看看微信支付文档.但是你懂得,那文档写的真带劲,看不懂.我直接放弃,开始集成.但是调起微信支付的时候:结果码为-1,心里一惊,肯定哪里错了,就开始找坑.所以把自己解决的 ...

最新文章

  1. Jan 09 - Number of 1 Bits; Bit Operation;
  2. 腾讯产品经理的一天是啥样的?
  3. 机器学习中常见的损失函数
  4. TCP/IP的七层负载均衡
  5. Amazon Redshift数据库
  6. CSS3的边框(三)
  7. jsp映射为其他地址上去 ???
  8. 荣耀Play3新版曝光:麒麟710A加持 其他配置不变
  9. 远程办公:如何招聘有自驱力的员工?
  10. 详细记录基于vue+nodejs+mongodb构建的商城学习(四)基于项目的node.js开发后端的学习与梳理总结...
  11. perl脚本进制转换
  12. 音频编解码算法库 (可支持g711u,g711a,g729,g722,opus等)
  13. 【Elasticsearch】优秀实践-Elasticsearch查询调优
  14. 使用虚拟光驱显示函数不正确的解决
  15. unity查询当前屏幕分辨率
  16. 抽象类+接口+内部类作业题
  17. git撤销未提交的commit
  18. python学习教程26-转换Series的数据类型
  19. 应用安全技术趋势之 Top 5
  20. android调出系统设置

热门文章

  1. 使用JTAG更新BRAM的方法
  2. 计算机专业有必要数学竞赛吗,数学和计算机专业,我应该参加那些比赛?
  3. win mysql5.7 msi_win10 安装 mysql 5.7 msi版的教程图文详解
  4. DHT11之Verilog 驱动代码
  5. JavaWEB开发-Servlet事件监听器
  6. 【Python】python中p-value的实现
  7. 基于Hadoop开发网络云盘系统架构设计方案第一稿
  8. 【最新】将Excel通讯录批量导入Iphone
  9. 【Vue.js】900- Vue 3.0 进阶之 VNode 探秘
  10. mysql数据库是否存在_如何检查mysql数据库是否存在