braintreeApplePay

立即使用

isSupportPayments canMakePayments addCard initWithToken paymentRequest didAuthorizePaymentListener didFinishListener setApplePayStatus

概述

Apple Pay 是苹果公司在2014苹果秋季新品发布会上发布的一种基于 NFC 的手机支付功能,于2014年10月20日在美国正式上线。2016年2月18日凌晨5:00, Apple Pay 业务在中国上线。

Apple Pay 支持的设备

iPhone系列:iPhone 6、iPhone6 Plus、iPhone 6s、iPhone 6s Plus

iPad系列:iPad Air 2、iPad mini 3、iPad mini 4、iPad Pro

Apple Watch

注意:iPhone 5 和 iPhone 5s 本身并不支持,而是连接到它们的 Apple Watch 可以用,因为5系列的手机不带NFC。

Apple Pay 系统要求

iOS 需升级到9.2及以上,WatchOS 需要2.1或更高版本。

Apple Pay 使用方法

使用 Apple Pay 需要在苹果系统自带的 Wallet 程序里添加银行卡。iPhone 用户点击进入 Wallet 后,点击屏幕右上方的+号,再点击“下一步”就可进入申请页面,然后将银行卡正面放置在iPhone摄像头前,使卡面出现在屏幕的提示框内,系统会自动识别卡号,当然也可以手工输入卡号,接下来需要手工输入姓名、卡片有效期与安全码,还要阅读业务须知并选择接受。添加卡片成功后需激活才能使用,客户要确认手机号,并接收和输入验证码,才能成功激活。

如果需要在 Apple Watch 上添加,只要在相关联的 iPhone 上打开 Watch APP,轻点“Wallet 与 Apple Pay”,再轻点“添加信用卡或借记卡”,也可同样进行设置。需要注意的是,只有iOS9.2以上的版本才支持 Apple Pay。

同一台设备可以添加多张银行卡。工行表示,同一台苹果设备可添加5张信用卡,首张添加卡即为默认卡。客户可以在 “Wallet” APP 中通过长按卡片并将该卡排列为首位的方式将该卡设为默认付款卡,也可在“设置- Wallet 与 Apple Pay”功能中设置默认付款卡。

Apple Pay 分为线上支付和线下支付。线下支付不需要手机接入互联网,也不需要点击进入APP,甚至无须唤醒显示屏,只要将iPhone 靠近有银联闪付标志的读卡器,并将手指放在HOME键上验证指纹,即可进行支付。也可以在iPhone 处于黑屏锁定状态时,轻点两下主屏幕按钮进入 Wallet,快速进行购买。如果交易终端显示需要输入密码,还需要输入银行卡的交易密码。只需一两秒钟就可以完成Apple Pay 支付。

本模块封装了 Apple Pay 的线上支付功能,开发者只需几行代码,即可把苹果支付功能集成至自己的app内。用户使用自己的 app 购买商品时,可选择使用 Apple Pay 支付方式进行支付自己所购买的商品。

提醒:如果你在你的 APP 中销售的是电子产品或者虚拟货币,你应该使用内购方式(iap)而不是 App Pay 去销售你的东西。你可以使用 Apple Pay 销售你的实体商品和服务。

Apple Pay 上线国家

  • 美国
  • 英国
  • 加拿大
  • 澳大利亚
  • 中国

Apple Pay 支付供应商

苹果公司强烈建议开发者选择支持 Apple Pay 并提供 SDK 的支付供应商。当然您也可以提供自己的服务器端解决方案,以用于从您的 App 接收付款、解密付款令牌并与支付供应商进行互动。信用卡和借记卡付款的处理可能非常复杂。如果您不具备相应的专业知识和系统,又希望您的 App 支持 Apple Pay,使用支付供应商提供的 SDK 是最为便捷可靠的一种方式。本模块即是封装了 Braintree 的 Apple Pay 支付 SDK。其支付的付款流程参考 Braintree 官网文档

Step 1 Your front-end requests a client token from your server and initializes the client SDK.

Step 2 Your server generates and sends a client token back to your client using the server SDK.

Step 3 The customer submits payment information, the client SDK communicates that information to Braintree and returns a payment method nonce.

Step 4 Your front-end sends the payment method nonce to your server.

Step 5 Your server code receives the payment method nonce and then uses the server SDK to create a transaction.

Availability

braintreeApplePay 模块使用攻略

步骤一、成为Braintree支付入网商户

详情参考Apple Pay certificate request and provisioning

步骤二 、登录 Braintree 服务平台,通过服务平台申请 CSR

a、关于商户 CSR

接 Apple Pay 在线支付的商户,须生成 Apple Pay 专用的 CSR 文件并提及至苹果开发者网站进行签名,以签署证书,取得 Apple Pay 的访问权限。获取 CSR 方法:

Download your CSR (certificate signing request) from the Control Panel

    1. Click the gear icon in the top right corner, select Processing from the drop-down menu
    1. Scroll to Apple Pay, and click the toggle to enable this payment method
    1. Select the Options link and click the +Add link to download the CSR from the certificate management page
  • Note: If you are unable to access this information, contact your Control Panel admin. You may need a different Control Panel role.

步骤三、苹果证书及描述文件

  • 1.前往苹果开发者中心的Certificates, Identifiers, and Profiles部分并且创建一个新的商家ID,然后编辑此ID,编辑时需上传从 Braintree 下载的 CSR 文件(braintree_apple_pay.certSigningRequest)。注意此 ID 需要在支付时作为 mID 传给模块,其一般格式为:merchant.com.app名。创建完成后下载到 Mac 电脑,然后上传到 Braintree。

  • 2.接下来创建苹果证书,并创建一个新的苹果打包证书。这需要向苹果公司上传自己本地生成的CSR文件(CertificateSigningRequest.certSigningRequest)。创建成功后下载到本地,然后双击安装,在钥匙串导出为p12证书,留作上传APICloud用。

  • 3.创建App ID(包名,既bundle ID),注意创建时勾选 Apple Pay 功能。App ID 即是我们平台上称之为包名的 id,其一般格式为:com.公司名.app名。App ID 创建完成后要编辑其 Apple Pay 功能,此编辑过程需要勾选1过程创建的mID。创建完成后,点击该App ID,然后编辑它,使之与步骤1创建的 merchant ID关联。

  • 4.创建描述文件(Provisioning Profiles),此描述文件(mobileprovision文件)需要上传 APICloud 平台编译服务器。此过程需要勾选3过程创建的App ID,以及2过程创建好的苹果证书(需安装mac电脑上后在钥匙串中导出为p12文件,然后上传 APICloud 编译服务器)。

  • 5.创建 entitlements 文件,APICloud 平台上的开发者,可通过此文件告诉编译服务器开通苹果支付功能。配置方法参考论坛帖子。配置示例如下:

    1. <?xml version="1.0" encoding="UTF-8"?>
    2. <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
    3. <plist version="1.0">
    4. <dict>
    5. <key>com.apple.developer.healthkit</key>
    6. <true/>
    7. <key>com.apple.developer.in-app-payments</key>
    8. <array>
    9. <string>merchant.com.apicloud</string>
    10. </array>
    11. </dict>
    12. </plist>

    其中 merchant.com.apicloud 为第一步申请的商家ID。<key>com.apple.developer.healthkit</key>

    <true/> 是开通健康功能,与本模块无关,若开发者同时使用了多个需要配置 entitlements 文件的模块,可如上述示例继续添加。

    Certificate renewal

支付流程

参考 Braintree 官方 文档

步骤四、服务器端开发

服务器端开发 Braintree 官网文档

注意:使用本模块必须云编译或自定义loader

isSupportPayments

判断手机是否支持 Apple Pay 功能

isSupportPayments(callback(ret))

callback(ret)

ret:

  • 类型:JSON 对象
  • 内部字段:
  1. {
  2. status: //布尔类型;支付环境判断,true|false
  3. }

示例代码

  1. var braintreeApplePay = api.require('braintreeApplePay');
  2. braintreeApplePay.isSupportPayments(function(ret) {
  3. if (ret) {
  4. api.alert({msg:JSON.stringify(ret)});
  5. }
  6. });

可用性

iOS 系统

可提供的 1.0.0 及更高版本

canMakePayments

判断手机是否已加载有可用的支付卡片

包括 Visa 卡、Master 卡、Amex 卡、Discover 卡

canMakePayments(callback(ret))

callback(ret)

ret:

  • 类型:JSON 对象
  • 内部字段:
  1. {
  2. status: //布尔类型;支付环境判断,true|false
  3. }

示例代码

  1. var braintreeApplePay = api.require('braintreeApplePay');
  2. braintreeApplePay.canMakePayments(function(ret) {
  3. if (ret) {
  4. api.alert({msg:JSON.stringify(ret)});
  5. }
  6. });

可用性

iOS 系统

可提供的 1.0.0 及更高版本

addCard

跳转到钱包设置添加银行卡、信用卡

addCard()

示例代码

  1. var braintreeApplePay = api.require('braintreeApplePay');
  2. braintreeApplePay.addCard();

可用性

iOS 系统

可提供的 1.0.0 及更高版本

initWithToken

初始化

initWithToken({params},callback(ret))

params

token:

  • 类型:字符串
  • 描述:从服务器获取的token

callback(ret)

ret:

  • 类型:JSON 对象
  • 内部字段:
  1. {
  2. status: //布尔类型;是否初始化成功,true|false
  3. }

示例代码

  1. var braintreeApplePay = api.require('braintreeApplePay');
  2. braintreeApplePay.initWithToken({
  3. token:''
  4. },function(ret) {
  5. if (ret) {
  6. api.alert({msg:JSON.stringify(ret)});
  7. }
  8. });

可用性

iOS 系统

可提供的 1.0.0 及更高版本

paymentRequest

发起支付请求

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

params

countryCode:

  • 类型:字符串
  • 描述:The merchant’s ISO country code.

currencyCode:

  • 类型:字符串
  • 描述:Currency code for this payment.

merchantIdentifier:

  • 类型:字符串
  • 描述:Identifies the merchant, as previously agreed with Apple. Must match one of the merchant identifiers in the application’s entitlement.

items:

  • 类型:数组
  • 描述:商品列表
  • 内部字段:
  1. [{
  2. name:'', //字符串类型;商品名字
  3. price:'' //字符串类型;商品价钱
  4. }]

callback(ret, err)

ret:

  • 类型:JSON 对象
  • 内部字段:
  1. {
  2. status: //布尔类型;是否请求支付成功(不是支付是否成功)
  3. }

err:

  • 类型:JSON 对象
  • 内部字段:
  1. {
  2. code: , //数字类型;错误码;
  3. msg: '' //字符串类型;错误信息;
  4. }

示例代码

  1. var braintreeApplePay = api.require('braintreeApplePay');
  2. braintreeApplePay.paymentRequest({
  3. items: [{name:'APICloud T恤',price:'99.99'}],
  4. merchantId: 'merchent.com.apicloud',
  5. countryCode: '',
  6. currencyCode:''
  7. }, function(ret, err) {
  8. if (ret. status) {
  9. api.alert({msg:JSON.stringify(ret)});
  10. } else {
  11. api.alert({msg:JSON.stringify(err)});
  12. }
  13. });

可用性

iOS 系统

可提供的 1.0.0 及更高版本

didAuthorizePaymentListener

获取 nonce 监听,成功获取 nonce 后开始发到服务器端扣款

didAuthorizePaymentListener(callback(ret,err))

callback(ret,err)

ret:

  • 类型:JSON 对象
  • 内部字段:
  1. {
  2. status:, //布尔类型;是否成功返回nonce
  3. tokenizedApplePayPayment: { //JSON对象;
  4. binData: { //JSON对象;The BIN data for the card number associated with this nonce
  5. prepaid:'', //字符串类型;Whether the card is a prepaid card. Possible values: Yes/No/Unknown
  6. healthcare:'', //字符串类型;Whether the card is a healthcare card. Possible values: Yes/No/Unknown
  7. debit:'', //字符串类型;Whether the card is a debit card. Possible values: Yes/No/Unknown
  8. durbinRegulated:'', //字符串类型;A value indicating whether the issuing bank's card range is regulated by the Durbin Amendment due to the bank's assets. Possible values: Yes/No/Unknown
  9. commercial:'', //字符串类型;Whether the card type is a commercial card and is capable of processing Level 2 transactions. Possible values: Yes/No/Unknown
  10. payroll:'', //字符串类型;Whether the card is a payroll card. Possible values: Yes/No/Unknown
  11. issuingBank:'', //字符串类型;The bank that issued the credit card, if available.
  12. countryOfIssuance:'', //字符串类型;The country that issued the credit card, if available.
  13. productId:'' //字符串类型;The code for the product type of the card (e.g. `D` (Visa Signature Preferred), `G` (Visa Business)), if available.
  14. },
  15. nonce:'', //字符串类型;The one-time use payment method nonce
  16. localizedDescription:'', //字符串类型;A localized description of the payment info
  17. type:'', //字符串类型;The type of the tokenized data, e.g. PayPal, Venmo, MasterCard, Visa, Amex
  18. isDefault: //布尔类型;True if this nonce is the customer's default payment method, otherwise false.
  19. }
  20. }

err:

  • 类型:JSON 对象
  • 内部字段:
  1. {
  2. code: , //数字类型;错误码;
  3. msg: '' //字符串类型;错误信息;
  4. }

示例代码

  1. var braintreeApplePay = api.require('braintreeApplePay');
  2. braintreeApplePay. didAuthorizePaymentListener(function(ret,err) {
  3. if (ret.status) {
  4. api.alert({msg:JSON.stringify(ret)});
  5. } else {
  6. api.alert({msg:JSON.stringify(err)});
  7. }
  8. });

可用性

iOS 系统

可提供的 1.0.0 及更高版本

didFinishListener

监听完成事件

didFinishListener(callback(ret))

callback(ret)

ret:

  • 类型:JSON 对象
  • 描述:监听完成事件,只有事件,没有参数

示例代码

  1. var braintreeApplePay = api.require('braintreeApplePay');
  2. braintreeApplePay.didFinishListener(function() {
  3. alert('支付完成');
  4. });

可用性

iOS 系统

可提供的 1.0.0 及更高版本

setApplePayStatus

设置苹果支付状态

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

params

status:

  • 类型:字符串
  • 描述:支付状态
  • 内部字段:
    • success:成功
    • failure:失败

示例代码

  1. var braintreeeApplePay = api.require('braintreeeApplePay');
  2. braintreeeApplePay.setApplePayStatus({
  3. status: 'success'
  4. });

可用性

iOS 系统

可提供的 1.0.0 及更高版本