因为PayPal的Mobile SDK早已经弃用,不再支持新的集成,SDK设备系统的适配也不会再进行, 此插件不再更新维护。
目前在Mobile App里集成PayPal的话,推荐通过Webview的方式集成PayPal Checkout方案。
最新的PayPal Checkout方案: https://developer.paypal.com/docs/checkout/
https://developer.paypal.com/docs/checkout/integrate/
PayPal 移动端支付有两种方案:
方案一:跳转到浏览器方式(webview)的快速结账
方案二:原生的 MobileSDK
一:快速结账
快速结账(Express Checkout)是移动端和网页端通用的接口,IOS和android通用,支持paypal支付和信用卡直接支付,可以使用手机浏览器(webview)跳转实现支付。
集成指南
英文:https://developer.paypal.com/webapps/developer/docs/classic/mobile/ht_mec-itemPayment-website/
API签名是使用 Paypal 的身份标识
Demo及示例代码下载:https://demo.paypal.com/c2/home?locale.x=zh_XC
二:Mobile SDK
内嵌式的mobileSDK,暂时不开放信用卡直接支付功能(只能接收paypal账户付款),仅支持paypal账户登录支付。另外注意发布渠道是否对内嵌式的支付方式有限制。
关于移动支付的集成:本插件即封装的 mobileSDK,按照本插件接口文档即可快速集成此功能。
paypal封装了 PayPal 支付的 mobileSDK,使用此插件可在应用内接入 PayPal 支付。接入 PayPal 支付前需要先到 PayPal 开发者中心注册开发者账号,然后在创建App页面创建 App 获取 Client ID。Client ID 包括测试id(Sandbox)和正式上线id(Live)。使用此插件需应用打包或自定义loader
PayPal 支持的 国家地区
PayPal 支持的货币种类参考 PayPal REST API Country and Currency Support
PayPal 的常见问题 FAQ
商户服务器向 PayPal 服务器验证支付结果方法请参看 Verify a mobile payment
PayPal支付流程如下:
PayPal支付流程分为两种方式,开发者可根据自身情况自行选择。
商户服务器主动验证:
(1)用户在客户端中点击购买商品,携带商品信息向 PayPal 服务器发起支付请求;
(2)PayPal 服务器收到支付请求,处理后将结果返回客户端;
(3)客户端收到 PayPal 服务器返回的支付结果,将其发送给商家服务器端;
(4)商家服务器收到客户端发来的支付结果,然后向 PayPal 服务器请求验证;
(5)PayPal 服务器端验证结果返回商家服务器;
(6)商家服务器验证本次支付,得到支付结果,本次支付结束;
商户服务器被动动验证:
(1)用户在客户端中点击购买商品,携带商品信息向 PayPal 服务器发起支付请求;
(2)PayPal 服务器收到支付请求,处理后将结果返回客户端;
(3)客户端收到 PayPal 服务器返回的支付结果,将其发送给商家服务器端;
(4)商家服务器等待 PayPal 的异步消息通知(IPN 或者 Webhooks),一般异步消息通知会有一段时间的延迟,通常在几分钟;
(5)PayPal 服务器端验证结果返回商家服务器;
(6)商家服务器验证本次支付,得到支付结果,本次支付结束;
注意:IPN 为 nvp 格式,Webhooks 为 json 格式,都是异步消息通知。 IPN 不在 developer 网站下设置,在 paypal 账户下设置。 Webhooks 的 url 设置是在创建 rest app 的地方完成的。
Paypal 最近是有过对 IPN 的要求更新,PayPal 过去允许使用HTTP进行回发。为了进一步提高安全性,回发到PayPal将仅允许采用HTTPS。 目前,对于从PayPal到商家IPN侦听程序的出站IPN呼叫,没有HTTPS方面的要求。
具体请阅读下面文档。
注: 本插件实现了上述流程的(1)、(2)步骤
使用本插件需先配置key.xml文件
注意:配置 key.xml
文件是为了初始化支付组件,从 1.0.6 版本起,可以不配置该文件,而通过 initializeWithClientIds 接口初始化支付组件,该接口需要在调用 pay 接口之前调用。
将申请到的 CLIENT_ID_FOR_PRODUCTION 和 CLIENT_ID_FOR_SANDBOX 配置到 key.xml
(本文件放在 widget 包里的 res 文件夹下)文件内,其格式如下:
```js
<?xml version="1.0" encoding="UTF-8" ?>
<security>
<item name="paypal_productionID" value="*********"/>
<item name="paypal_sandboxID" value="*********"/>
<item name="其它服务需加密的参数配置 " value="***"/>
.
.
.
</security>
```
字段描述:
paypal_productionID:在 PayPal 开发者中心创建 App 后得到的 Client ID For Live。
paypal_sandboxID:在 PayPal 开发者中心创建 App 后得到的 Client ID For Sandbox。
初始化支付组件,从 1.0.6 版本开始支持本接口。1.0.5之前的版本需要配置 key.xml
文件才能初始化支付组件。
initializeWithClientIds({params})
paypal_productionID:
paypal_sandboxID:
var paypal = api.require('paypal');
paypal.initializeWithClientIds({
paypal_productionID: '******',
paypal_sandboxID: '******'
});
iOS系统 Android系统
可提供的1.0.6及更高版本
支付
pay({params}, callback(ret, err))
currency:
description:
price:
mode:
language:
ret:
{
state: "success" , //字符串类型;支付结果信息
//取值范围:
//success(支付成功)
//fail(支付失败)
//cancel(用户取消支付)
client: { //JSON对象;支付客户端信息
environment: "sandbox", //字符串类型;类型:sandbox/live
paypal_sdk_version: "2.0.0", //字符串类型;sdk 版本号
platform: "iOS", //字符串类型;平台:iOS/android
product_name: "PayPal iOS SDK;" //字符串类型;产品名称
},
response: { //JSON对象;支付结果信息
create_time: "2014-02-12T22:29:49Z",//字符串类型;时间
id: "PAY-564191241M8701234KL57LXI", //字符串类型;id
intent: "sale", //字符串类型;支付行为目的
state: "approved" //字符串类型;状态
},
response_type: "payment" //字符串类型;回应类型
}
var paypal = api.require('paypal');
paypal.pay({
currency: 'USD',
price: '36.06',
description: 'YonBuilder移动开发 短袖T恤',
mode: 'noNetwork'
}, function(ret) {
if (ret) {
api.alert({ msg: JSON.stringify(ret) });
}
});
iOS系统 Android系统
可提供的1.0.0及更高版本