Apple Pay
公司在2014蘋果秋季新品發(fā)布會(huì)上發(fā)布的一種基于NFC近距離無線通訊技術(shù)的手機(jī)支付功能,于2014年10月20日在美國(guó)正式上線。
2016年2月18日凌晨5:00, Apple Pay 業(yè)務(wù)在中國(guó)上線。

屏幕快照 2016-08-02 下午6.20.32.png
支持系統(tǒng)和機(jī)型
操作系統(tǒng)最低iOS9.0以上,部分信息設(shè)置需要iOS9.2以上

適用設(shè)備.png
App接入Apple Pay
- 基于iOS的PassKitFramework:
需要對(duì)Payment Sheet的邏輯和異常情況做好相應(yīng)的UI處理。同時(shí)在后臺(tái)也需要做好支付信息解密、銀聯(lián)接口的交互以及訂單狀態(tài)處理。 - 使用第三方SDK接入
- 中國(guó)銀聯(lián)
- 連連支付
- 首信易支付
-
易寶支付
蘋果目前建議國(guó)內(nèi)和第三方合作接入ApplePay,能夠省去了一家家銀行簽約的過程,由第三方和一家家銀行溝通事項(xiàng),商戶和第三方溝通。所以簽約部分就是和第三方支付平臺(tái)簽約了,錢會(huì)進(jìn)入和第三方簽約的銀行卡內(nèi)。
基于基于iOS PassKit Framework 接入Apple Pay
- 申請(qǐng)Merchant ID以及證書
-
工程中Capbility 啟用ApplePay權(quán)限
工程設(shè)置.png
集成
- 導(dǎo)入頭文件
#import<PassKit/PassKit.h>用戶綁定的銀行卡信息
#import<PassKit/PKPaymentAuthorizationViewController.h>Apple pay的展示控件
- 系統(tǒng)檢測(cè)
if (![PKPaymentAuthorizationViewController class]) {
PKPaymentAuthorizationViewController需iOS8.0以上支持
return;
}
- 設(shè)備檢測(cè)
if (![PKPaymentAuthorizationViewController canMakePayments]) {
支付需iOS9.0以上支持
如果當(dāng)前設(shè)備不支持ApplePay需要隱藏ApplePay支付按鈕
return;
}
- 檢測(cè)用戶可進(jìn)行支付卡的類型
是否支持Amex、MasterCard、Visa與銀聯(lián)四種卡,根據(jù)自己項(xiàng)目的需要進(jìn)行檢測(cè)
NSArray *supportedNetworks = @[PKPaymentNetworkAmex, PKPaymentNetworkMasterCard,PKPaymentNetworkVisa,PKPaymentNetworkChinaUnionPay];
if (![PKPaymentAuthorizationViewController canMakePaymentsUsingNetworks:supportedNetworks])
{
如果當(dāng)前設(shè)備未設(shè)置/當(dāng)前設(shè)備設(shè)置的支付銀行卡無法在商戶提供的支付平臺(tái)支付,則隱藏ApplePay支付按鈕,可以顯示SetApple Pay按鈕(可選),提醒用戶進(jìn)行設(shè)置ApplePay。
return;
}
- 創(chuàng)建支付請(qǐng)求
PKPaymentRequest
?//設(shè)置幣種、國(guó)家碼及merchant標(biāo)識(shí)符等基本信息
PKPaymentRequest *payRequest = [[PKPaymentRequest alloc]init];
payRequest.countryCode = @"CN"; //國(guó)家代碼
payRequest.currencyCode = @“CNY”; //RMB的幣種代碼payRequest.merchantIdentifier = @“merchant.ApplePayAiitecDemo”; //申請(qǐng)的merchantID
payRequest.supportedNetworks = supportedNetworks; //用戶可進(jìn)行支付的銀行卡
payRequest.merchantCapabilities = PKMerchantCapability3DS|PKMerchantCapabilityEMV;
- 送貨地址
需要根據(jù)不同的商品類型來設(shè)置requiredShippingAddressFields
?如果使電子/虛擬商品(一般為提取/下載鏈接),則顯示聯(lián)系人郵箱。
?如果為實(shí)物,則顯示聯(lián)系人地址、手機(jī)號(hào)以及郵箱
payRequest.requiredShippingAddressFields = PKAddressFieldPostalAddress|PKAddressFieldPhone|PKAddressFieldName;
//送貨地址信息,這里設(shè)置需要地址和聯(lián)系方式和姓名,如果需要進(jìn)行設(shè)置,默認(rèn)PKAddressFieldNone(沒有送貨地址)
- 配送方式
//設(shè)置商品的配送方式
PKShippingMethod *freeShipping = [PKShippingMethod summaryItemWithLabel:@"包郵" amount:[NSDecimalNumber zero]];
freeShipping.identifier = @"freeshipping";
freeShipping.detail = @"6-8 天 送達(dá)";
PKShippingMethod *expressShipping = [PKShippingMethod summaryItemWithLabel:@"極速送達(dá)" amount:[NSDecimalNumber decimalNumberWithString:@"10.00"]];
expressShipping.identifier = @"expressshipping";
expressShipping.detail = @"2-3 小時(shí) 送達(dá)”;
payRequest.shippingMethods = @[freeShipping, expressShipping];
- 賬單信息
賬單列表使用PKPaymentSummaryItem添加描述和價(jià)格,價(jià)格使用NSDecimalNumber。
PKPaymentSummaryItem初始化:
label為商品名字或者是描述,amount為商品價(jià)格,折扣為負(fù)數(shù),type為該條賬單為最終價(jià)格還是估算價(jià)格
NSDecimalNumber*subtotalAmount= [NSDecimalNumber decimalNumberWithMantissa:1275 exponent:-2isNegative:NO]; //12.75
PKPaymentSummaryItem *subtotal =[PKPaymentSummaryItem summaryItemWithLabel:@"商品價(jià)格"amount:subtotalAmount];
NSDecimalNumber*discountAmount = [NSDecimalNumber decimalNumberWithString:@"-12.74"]; //-12.74
PKPaymentSummaryItem *discount =[PKPaymentSummaryItem summaryItemWithLabel:@"優(yōu)惠折扣"amount:discountAmount];
- 顯示Apple Pay 控件
PKPaymentAuthorizationViewController *viewController = [[PKPaymentAuthorizationViewController alloc]initWithPaymentRequest:payRequest];
viewController.delegate= self;
[self presentViewController:viewController animated:YES completion:nil];

界面1.png

界面2.png
代理方法

代理方法.png
Apple Pay UI強(qiáng)制要求

UI要求.png
官方文檔
