isSupportPayments canMakePayments addCard initWithToken paymentRequest didAuthorizePaymentListener didFinishListener setApplePayStatus
Apple Pay 是苹果公司在2014苹果秋季新品发布会上发布的一种基于 NFC 的手机支付功能,于2014年10月20日在美国正式上线。2016年2月18日凌晨5:00, 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。
iOS 需升级到9.2及以上,WatchOS 需要2.1或更高版本。
使用 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 并提供 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.
步骤一、成为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.前往苹果开发者中心的Certificates, Identifiers, and Profiles部分并且创建一个新的商家ID,然后编辑此ID,编辑时需上传从 Braintree 下载的 CSR 文件(braintree_apple_pay.certSigningRequest)。注意此 ID 需要在支付时作为 mID 传给原生插件,其一般格式为:merchant.com.app名。创建完成后下载到 Mac 电脑,然后上传到 Braintree。
2.接下来创建苹果证书,并创建一个新的苹果打包证书。这需要向苹果公司上传自己本地生成的CSR文件(CertificateSigningRequest.certSigningRequest)。创建成功后下载到本地,然后双击安装,在钥匙串导出为p12证书,留作上传YonBuilder移动开发平台用。
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文件)需要上传 Yonbuilder 移动开发平台编译服务器。此过程需要勾选3过程创建的App ID,以及2过程创建好的苹果证书(需安装mac电脑上后在钥匙串中导出为p12文件,然后上传 YonBuilder移动开发平台 编译服务器)。
5.创建 entitlements 文件,Yonbuilder 移动开发平台上的开发者,可通过此文件告诉编译服务器开通苹果支付功能。配置方法参考论坛帖子。配置示例如下:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>com.apple.developer.healthkit</key>
<true/>
<key>com.apple.developer.in-app-payments</key>
<array>
<string>merchant.com.builder</string>
</array>
</dict>
</plist>
其中 merchant.com.builder 为第一步申请的商家ID。<key>com.apple.developer.healthkit</key>
<true/>
是开通健康功能,与本原生插件无关,若开发者同时使用了多个需要配置 entitlements 文件的原生插件,可如上述示例继续添加。
参考 Braintree 官方 文档
步骤四、服务器端开发
服务器端开发 Braintree 官网文档
注意:使用本原生插件必须云编译或自定义loader
判断手机是否支持 Apple Pay 功能
isSupportPayments(callback(ret))
ret:
{
status: //布尔类型;支付环境判断,true|false
}
var braintreeApplePay = api.require('braintreeApplePay');
braintreeApplePay.isSupportPayments(function(ret) {
if (ret) {
api.alert({msg:JSON.stringify(ret)});
}
});
iOS 系统
可提供的 1.0.0 及更高版本
判断手机是否已加载有可用的支付卡片
包括 Visa 卡、Master 卡、Amex 卡、Discover 卡
canMakePayments(callback(ret))
ret:
{
status: //布尔类型;支付环境判断,true|false
}
var braintreeApplePay = api.require('braintreeApplePay');
braintreeApplePay.canMakePayments(function(ret) {
if (ret) {
api.alert({msg:JSON.stringify(ret)});
}
});
iOS 系统
可提供的 1.0.0 及更高版本
跳转到钱包设置添加银行卡、信用卡
addCard()
var braintreeApplePay = api.require('braintreeApplePay');
braintreeApplePay.addCard();
iOS 系统
可提供的 1.0.0 及更高版本
初始化
initWithToken({params},callback(ret))
token:
ret:
{
status: //布尔类型;是否初始化成功,true|false
}
var braintreeApplePay = api.require('braintreeApplePay');
braintreeApplePay.initWithToken({
token:''
},function(ret) {
if (ret) {
api.alert({msg:JSON.stringify(ret)});
}
});
iOS 系统
可提供的 1.0.0 及更高版本
发起支付请求
paymentRequest({params}, callback(ret, err))
countryCode:
currencyCode:
merchantIdentifier:
items:
[{
name:'', //字符串类型;商品名字
price:'' //字符串类型;商品价钱
}]
ret:
{
status: //布尔类型;是否请求支付成功(不是支付是否成功)
}
err:
{
code: , //数字类型;错误码;
msg: '' //字符串类型;错误信息;
}
var braintreeApplePay = api.require('braintreeApplePay');
braintreeApplePay.paymentRequest({
items: [{name:'builder T恤',price:'99.99'}],
merchantId: 'merchent.com.builder',
countryCode: '',
currencyCode:''
}, function(ret, err) {
if (ret. status) {
api.alert({msg:JSON.stringify(ret)});
} else {
api.alert({msg:JSON.stringify(err)});
}
});
iOS 系统
可提供的 1.0.0 及更高版本
获取 nonce 监听,成功获取 nonce 后开始发到服务器端扣款
didAuthorizePaymentListener(callback(ret,err))
ret:
{
status:, //布尔类型;是否成功返回nonce
tokenizedApplePayPayment: { //JSON对象;
binData: { //JSON对象;The BIN data for the card number associated with this nonce
prepaid:'', //字符串类型;Whether the card is a prepaid card. Possible values: Yes/No/Unknown
healthcare:'', //字符串类型;Whether the card is a healthcare card. Possible values: Yes/No/Unknown
debit:'', //字符串类型;Whether the card is a debit card. Possible values: Yes/No/Unknown
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
commercial:'', //字符串类型;Whether the card type is a commercial card and is capable of processing Level 2 transactions. Possible values: Yes/No/Unknown
payroll:'', //字符串类型;Whether the card is a payroll card. Possible values: Yes/No/Unknown
issuingBank:'', //字符串类型;The bank that issued the credit card, if available.
countryOfIssuance:'', //字符串类型;The country that issued the credit card, if available.
productId:'' //字符串类型;The code for the product type of the card (e.g. `D` (Visa Signature Preferred), `G` (Visa Business)), if available.
},
nonce:'', //字符串类型;The one-time use payment method nonce
localizedDescription:'', //字符串类型;A localized description of the payment info
type:'', //字符串类型;The type of the tokenized data, e.g. PayPal, Venmo, MasterCard, Visa, Amex
isDefault: //布尔类型;True if this nonce is the customer's default payment method, otherwise false.
}
}
err:
{
code: , //数字类型;错误码;
msg: '' //字符串类型;错误信息;
}
var braintreeApplePay = api.require('braintreeApplePay');
braintreeApplePay. didAuthorizePaymentListener(function(ret,err) {
if (ret.status) {
api.alert({msg:JSON.stringify(ret)});
} else {
api.alert({msg:JSON.stringify(err)});
}
});
iOS 系统
可提供的 1.0.0 及更高版本
监听完成事件
didFinishListener(callback(ret))
ret:
var braintreeApplePay = api.require('braintreeApplePay');
braintreeApplePay.didFinishListener(function() {
alert('支付完成');
});
iOS 系统
可提供的 1.0.0 及更高版本
设置苹果支付状态
setApplePayStatus({params}, callback(ret, err))
status:
var braintreeeApplePay = api.require('braintreeeApplePay');
braintreeeApplePay.setApplePayStatus({
status: 'success'
});
iOS 系统
可提供的 1.0.0 及更高版本