paypal

initializeWithClientIds pay

概述

因为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支付

PayPal 移动端支付有两种方案:

方案一:跳转到浏览器方式(webview)的快速结账

方案二:原生的 MobileSDK

一:快速结账

快速结账(Express Checkout)是移动端和网页端通用的接口,IOS和android通用,支持paypal支付和信用卡直接支付,可以使用手机浏览器(webview)跳转实现支付。

集成指南

英文:https://developer.paypal.com/webapps/developer/docs/classic/mobile/ht_mec-itemPayment-website/

API签名是使用 Paypal 的身份标识

如何申请参考 https://www.paypal-knowledge.com/infocenter/index?page=content&widgetview=true&id=FAQ1740&viewlocale=zh_CN&direct=zh_CN

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方面的要求。

具体请阅读下面文档。

https://www.paypal-knowledge.com/infocenter/index?page=content&widgetview=true&id=FAQ1916&viewlocale=zh_CN

注: 本模块实现了上述流程的(1)、(2)步骤

使用本模块需先配置key.xml文件

注意:配置 key.xml 文件是为了初始化支付组件,从 1.0.6 版本起,可以不配置该文件,而通过 initializeWithClientIds 接口初始化支付组件,该接口需要在调用 pay 接口之前调用。

将申请到的 CLIENT_ID_FOR_PRODUCTION 和 CLIENT_ID_FOR_SANDBOX 配置到 key.xml (本文件放在 widget 包里的 res 文件夹下)文件内,其格式如下:

  1. ```js
  2. <?xml version="1.0" encoding="UTF-8" ?>
  3. <security>
  4. <item name="paypal_productionID" value="*********"/>
  5. <item name="paypal_sandboxID" value="*********"/>
  6. <item name="其它服务需加密的参数配置 " value="***"/>
  7. .
  8. .
  9. .
  10. </security>
  11. ```
  • 字段描述:

    paypal_productionID:在 PayPal 开发者中心创建 App 后得到的 Client ID For Live。

    paypal_sandboxID:在 PayPal 开发者中心创建 App 后得到的 Client ID For Sandbox。

paypal - 图1

模块接口

initializeWithClientIds

初始化支付组件,从 1.0.6 版本开始支持本接口。1.0.5之前的版本需要配置 key.xml 文件才能初始化支付组件。

initializeWithClientIds({params})

params

paypal_productionID:

  • 类型:字符串
  • 描述:在 PayPal 开发者中心创建 App 后得到的 Client ID For Live

paypal_sandboxID:

  • 类型:字符串
  • 描述:在 PayPal 开发者中心创建 App 后得到的 Client ID For Sandbox

示例代码

  1. var paypal = api.require('paypal');
  2. paypal.initializeWithClientIds({
  3. paypal_productionID: '******',
  4. paypal_sandboxID: '******'
  5. });

可用性

iOS系统 Android系统

可提供的1.0.6及更高版本

pay

支付

pay({params}, callback(ret, err))

params

currency:

description:

  • 类型:字符串
  • 描述:交易商品描述

price:

  • 类型:字符串
  • 描述:交易商品的价钱,单位:元($)

mode:

  • 类型:字符串
  • 描述:支付环境,取值范围如下:
    • production:线上环境,真实扣款
    • sandbox:开发测试环境
    • noNetwork:不跟 PayPal 服务器交互,可伪装支付成功状态。用于单元测试

language:

  • 类型:字符串
  • 描述:(可选项)支付页面语音设置,若不传则默认当前系统语言
  • 取值范围:
    • ar:阿拉伯文
    • da:丹麦文
    • de:德文
    • en:英文
    • en_AU:英文(澳大利亚)
    • en_GB:英文(加拿大)
    • es:西班牙文
    • es_MX:西班牙文(墨西哥)
    • fr:法文
    • he:
    • it:意大利文
    • ja:日文
    • ko:朝鲜文
    • ms:蒙特塞拉特岛文
    • nb:
    • nl:荷兰文
    • pl:波兰文
    • pt:葡萄牙文
    • pt_BR:葡萄牙文(巴西)
    • ru:俄文
    • sv:瑞典文
    • th:泰文
    • tr:土耳其文
    • zh-Hans:中文(简体)
    • zh-Hant:中文(繁体)
    • zh-Hant_TW:中文(泰文)

callback(ret, err)

ret:

  • 类型:JSON 对象
  • 内部字段:
  1. {
  2. state: "success" , //字符串类型;支付结果信息
  3. //取值范围:
  4. //success(支付成功)
  5. //fail(支付失败)
  6. //cancel(用户取消支付)
  7. client: { //JSON对象;支付客户端信息
  8. environment: "sandbox", //字符串类型;类型:sandbox/live
  9. paypal_sdk_version: "2.0.0", //字符串类型;sdk 版本号
  10. platform: "iOS", //字符串类型;平台:iOS/android
  11. product_name: "PayPal iOS SDK;" //字符串类型;产品名称
  12. },
  13. response: { //JSON对象;支付结果信息
  14. create_time: "2014-02-12T22:29:49Z",//字符串类型;时间
  15. id: "PAY-564191241M8701234KL57LXI", //字符串类型;id
  16. intent: "sale", //字符串类型;支付行为目的
  17. state: "approved" //字符串类型;状态
  18. },
  19. response_type: "payment" //字符串类型;回应类型
  20. }

示例代码

  1. var paypal = api.require('paypal');
  2. paypal.pay({
  3. currency: 'USD',
  4. price: '36.06',
  5. description: 'APICloud 短袖T恤',
  6. mode: 'noNetwork'
  7. }, function(ret) {
  8. if (ret) {
  9. api.alert({ msg: JSON.stringify(ret) });
  10. }
  11. });

可用性

iOS系统 Android系统

可提供的1.0.0及更高版本