Apple Pay--iOS開發(fā)

一、什么是Apple Pay?

  1. 概念
    Apple Pay,簡單來說, 就是一種移動支付方式。通過Touch ID/ Passcode,用戶可使用存儲在iPhone 6, 6p等設(shè)備上的信用卡和借記卡支付證書來授權(quán)支付; 它是蘋果公司在2014蘋果秋季新品發(fā)布會上發(fā)布的一種基于NFC的手機支付功能,于2014年10月20日在美國正式上線,2016年2月18日凌晨5:00, Apple Pay 業(yè)務(wù)在中國上線。
  2. 使用前提
    (1)支持設(shè)備
Paste_Image.png

(3)銀行支持
(2)系統(tǒng)支持(iOS8.0+版本, 注意:iOS9.2才真正的支持“銀聯(lián)支付”, 意味著iOS9.2以后才可以在中國市場使用)
需要將被支持銀行的銀行卡, 添加到手機wallet應(yīng)用當(dāng)中 

1463646106122946.png

二、 應(yīng)用場景?

  1. 線下支付

除下使用前提之外, 還要求      
商家支持(要求必須有支持NFC的刷卡機)
如果發(fā)現(xiàn)以下標(biāo)識,就代表該商家支持Apple Pay
蘋果公開的Apple Pay商家有:


1463646216287151.png
  1. 線上支付

除下使用前提之外, 還要求
App 支持

目前支持Apple Pay支付方式的App并不多。很多公司也在集成當(dāng)中,這也是寫這篇博客的目的。
1463646348641388.png

唯品會


1463646612131578.png

大眾點評

目前, 蘋果公開的支持Apple Pay的APP列表:


1463646495715575.png

三、 與微信支付以及支付寶等第三方支付平臺的區(qū)別?

  1. 硬件方面
    Apple Pay:必須是iOS設(shè)備, 而且是按照線上支付和線下支付區(qū)分不同的真機設(shè)備(具體參考表1)
    微信、支付寶: 基本跟硬件設(shè)備無關(guān), 支持大多數(shù)的只能手機
  2. 網(wǎng)絡(luò)環(huán)境要求
    Apple Pay:線上支付需要聯(lián)網(wǎng), 線下支付無需聯(lián)網(wǎng)就可以支付
    微信、支付寶: 無論是線上還是線下支付, 都需要聯(lián)網(wǎng)使用
  3. 使用技術(shù)
    Apple Pay:線下支付使用的是 基于NFC的近場通訊技術(shù)
    微信、支付寶: 線下支付使用的是 掃碼支付(條形碼、二維碼)
  4. 主要功能
    Apple Pay:線上支付、線下支付、部分升級后的ATM機可以取款
    微信、支付寶: 線上支付、線下支付、轉(zhuǎn)賬、理財?shù)?/li>
  5. 安全性能
    Apple Pay:不保留銀行卡信息,并且不會暴漏給外界、不分流銀行存款(不需要從銀行卡轉(zhuǎn)錢到另外一個平臺)、不能充值 ,安全性較高。
    微信、支付寶: 密碼保護,身份驗證等手段保護賬戶,安全性相對稍差。
  6. 支付時長
    Apple Pay:無論是線上支付,還是線下支付, 只需要驗證指紋即可支付。非常迅速
    微信、支付寶: 需要掃碼支付, 流程相對繁瑣,所以時長較長
  7. 各自弊端
    Apple Pay:只適用于蘋果設(shè)備, 支付場景單一,無轉(zhuǎn)賬理財?shù)葮I(yè)務(wù)
    微信、支付寶: 安全性較差, 必須聯(lián)網(wǎng)操作,需要充值到對應(yīng)平臺

四、線上支付集成步驟
 1. 配置支付環(huán)境
使用XCode創(chuàng)建一個工程, 并設(shè)置好對應(yīng)的BundleID

注冊并配置一個商業(yè)標(biāo)示符

添加一個App ID

配置Merchant ID

為Merchant ID 配置證書, 并下載證書安裝到鑰匙串

檢查安裝到鑰匙串中的證書是否有效

綁定Merchant ID 到 APP ID

2. 配置Xcode 項目
調(diào)整系統(tǒng)最低部署版本(iOS8.0)

開啟Apple Pay功能

3. 代碼實現(xiàn)
判斷當(dāng)前設(shè)備是否可以支付

判斷"Wallet有沒有添加該支付網(wǎng)絡(luò)的儲蓄卡/信用卡"

創(chuàng)建一個支付請求, 并配置各項信息

彈出授權(quán)控制器,讓用戶給支付授權(quán)

處理支付憑證

4. 服務(wù)器處理

五、 具體步驟實現(xiàn)
 1. 配置支付環(huán)境
使用XCode創(chuàng)建一個工程, 并設(shè)置好對應(yīng)的BundleID

1463647751122748.png

注冊并配置一個商業(yè)標(biāo)示符

(1)添加一個App ID, 并勾選Apple Pay功能


1463647813346836.png

1463647820105539.png

(2)配置Merchant ID


1463647849472058.png

1463647859858225.png

(3)為Merchant ID 配置證書, 并下載證書安裝到鑰匙串

1463647881293562.png

1463647889569181.png

1463647896134977.png

        
(4)檢查安裝到鑰匙串中的證書是否有效
問題描述:有可能會出現(xiàn)
1463648006106391.png
提示
問題原因:系統(tǒng)根證書/中級證書頒發(fā)機構(gòu)過期
解決方案: 重新下載證書, 并安裝,具體下載列表看下圖
1463648019652103.png
  
     
(5)綁定Merchant ID 到 APP ID
1463648044125583.png

1463648060105234.png

1463648072120226.png

1463648082729646.png
 
1463648130134801.png
 
        
 2. 配置Xcode 項目
調(diào)整系統(tǒng)最低部署版本(iOS8.0)

1463648171914855.png

      
開啟Apple Pay功能

1463648416102196.png

注意: 以上步驟截圖,只是關(guān)鍵處截圖,如果在具體細(xì)節(jié)處遇到問題,歡迎關(guān)注公眾號(王順子),共同探討?;蛘邊⒄站唧w視頻教程,鏈接地址,后續(xù)附上。
  
 3. 代碼實現(xiàn)    
(1)判斷當(dāng)前設(shè)備是否可以支付

if(![PKPaymentAuthorizationViewController canMakePayments])
{
    NSLog(@"不能支付");
    return;
}

(2)判斷"Wallet有沒有添加該支付網(wǎng)絡(luò)的儲蓄卡/信用卡"

 if (![PKPaymentAuthorizationViewController canMakePaymentsUsingNetworks:@[PKPaymentNetworkAmex, PKPaymentNetworkMasterCard, PKPaymentNetworkVisa, PKPaymentNetworkChinaUnionPay]]) {
        NSLog(@"Wallet沒有添加該支付網(wǎng)絡(luò)的儲蓄卡/信用卡");
  
        // 創(chuàng)建一個設(shè)置按鈕
//        PKPaymentButton *button = [PKPaymentButton buttonWithType:PKPaymentButtonTypeSetUp style:PKPaymentButtonStyleWhiteOutline];
//        [button addTarget:self action:@selector(jump) forControlEvents:UIControlEventTouchUpInside];
//        button.center = self.view.center;
//        [self.view addSubview:button];
  
  
        return;
    }

(3)創(chuàng)建一個支付請求, 并配置各項信息

// 1. 創(chuàng)建一個支付請求
    PKPaymentRequest *request = [[PKPaymentRequest alloc] init];
  
  
    // 2. 參數(shù)配置
    // 2.1 商店標(biāo)識
    request.merchantIdentifier = @"merchant.520it.com";
  
    // 2.2 貨幣代碼
    request.currencyCode = @"CNY";
  
    // 2.3 國家編碼
    request.countryCode = @"CN";
  
    // 2.4 支持的支付網(wǎng)絡(luò)(PKPaymentNetworkChinaUnionPay iOS9.2開始支持)
    request.supportedNetworks = @[PKPaymentNetworkAmex, PKPaymentNetworkMasterCard, PKPaymentNetworkVisa, PKPaymentNetworkChinaUnionPay];
  
    // 2.5 支付請求包含一個支付摘要項目的列表
    NSDecimalNumber *price1 = [NSDecimalNumber decimalNumberWithString:@"2"];
    PKPaymentSummaryItem *item1 = [PKPaymentSummaryItem summaryItemWithLabel:@"手榴彈" amount:price1];
  
    NSDecimalNumber *price2 = [NSDecimalNumber decimalNumberWithString:@"6"];
    PKPaymentSummaryItem *item2 = [PKPaymentSummaryItem summaryItemWithLabel:@"炸彈" amount:price2 type:PKPaymentSummaryItemTypePending];
  
    NSDecimalNumber *totalAmount = [NSDecimalNumber zero];
    totalAmount = [totalAmount decimalNumberByAdding:price1];
    totalAmount = [totalAmount decimalNumberByAdding:price2];
    PKPaymentSummaryItem *total = [PKPaymentSummaryItem summaryItemWithLabel:@"小碼哥財務(wù)中心" amount:totalAmount type:PKPaymentSummaryItemTypePending];
    // 注意: 數(shù)組最后一個是總價格
    request.paymentSummaryItems = @[item1, item2, total];
  
  
    // 2.6 運輸方式
    NSDecimalNumber *shippingPrice = [NSDecimalNumber decimalNumberWithString:@"18.0"];
    PKShippingMethod *method = [PKShippingMethod summaryItemWithLabel:@"順豐快遞" amount:shippingPrice];
    method.detail = @"24小時送到!";
    method.identifier = @"shunfeng";
    request.shippingMethods = @[method];
    request.shippingType = PKShippingTypeServicePickup;
  
  
    // 2.7 通過指定merchantCapabilities屬性來指定你支持的支付處理標(biāo)準(zhǔn),3DS支付方式是必須支持的,EMV方式是可選的,
    request.merchantCapabilities = PKMerchantCapability3DS | PKMerchantCapabilityEMV | PKMerchantCapabilityCredit | PKMerchantCapabilityDebit;
      
    // 2.8 需要的配送信息和賬單信息
    request.requiredBillingAddressFields = PKAddressFieldAll;
    request.requiredShippingAddressFields = PKAddressFieldAll;
  
    // 2.9 存儲額外信息
    // 使用applicationData屬性來存儲一些在你的應(yīng)用中關(guān)于這次支付請求的唯一標(biāo)識信息,比如一個購物車的標(biāo)識符。在用戶授權(quán)支付之后,這個屬性的哈希值會出現(xiàn)在這次支付的token中。
    request.applicationData = [@"購物車ID: 123456" dataUsingEncoding:NSUTF8StringEncoding];

(4)彈出授權(quán)控制器,讓用戶給支付授權(quán)

// 3. 開始支付
    PKPaymentAuthorizationViewController *paymentPane = [[PKPaymentAuthorizationViewController alloc] initWithPaymentRequest:request];
    if (paymentPane == nil) {
        NSLog(@"授權(quán)控制器創(chuàng)建失敗");
        return;
    }
    paymentPane.delegate = self;
    [self presentViewController:paymentPane animated:YES completion:nil];

(5)處理支付憑證(token)

 *  當(dāng)授權(quán)成功之后會調(diào)用這個代理方法
 */
- (void)paymentAuthorizationViewController:(PKPaymentAuthorizationViewController *)controller
                       didAuthorizePayment:(PKPayment *)payment
                                completion:(void (^)(PKPaymentAuthorizationStatus status))completion;
{
//    PKPayment *temp = payment;
    NSLog(@"驗證授權(quán)---%@", payment.token);
    NSLog(@"驗證通過后, 需要開發(fā)者繼續(xù)完成交易");
    // 它需要你連接服務(wù)器并上傳支付令牌和 其他信息,以完成整個支付流程。
    BOOL isSuccess = YES;
    if (isSuccess) {
        completion(PKPaymentAuthorizationStatusSuccess);
    }else
    {
        completion(PKPaymentAuthorizationStatusFailure);
    }
      
}

(6)關(guān)閉授權(quán)控制器

/**
 *  當(dāng)授權(quán)成功之后或者取消授權(quán)之后會調(diào)用這個代理方法
 */
- (void)paymentAuthorizationViewControllerDidFinish:(PKPaymentAuthorizationViewController *)controller
{
    NSLog(@"取消或者交易完成");
    [self dismissViewControllerAnimated:YES completion:nil];
}
  • 支付授權(quán)的流程:
    框架發(fā)送支付請求給安全模塊,只有安全模塊可以訪問存儲在設(shè)備上的標(biāo)記化的卡信息。

安全模塊把特定的卡和商家等支付數(shù)據(jù)加密,以保證只有蘋果可以讀取,然后發(fā)送給框架??蚣軙⑦@些數(shù)據(jù)發(fā)送給蘋果。

蘋果服務(wù)器再次加密這些支付數(shù)據(jù),以保證只有商家可以讀取。然后服務(wù)器對它進行簽名,生成支付token,然后發(fā)送給設(shè)備。

框架調(diào)用相應(yīng)的代理方法并傳入這個token,然后你的代理方法傳送token給你的服務(wù)器。

Paste_Image.png

  
  4. 服務(wù)器接收到token后的一般處理流程
驗證支付數(shù)據(jù)的哈希表和簽名

為加密過的支付數(shù)據(jù)解碼

向支付處理系統(tǒng)提交支付數(shù)據(jù)

向訂單追蹤系統(tǒng)提交訂單

處理支付請求時,你有兩個選擇;你既可以利用支付平臺處理支付請求,也可以自己實現(xiàn)支付請求處理流程。一個常用的支付平臺可以完成上述大部分操作。
  關(guān)于支持Apple Pay支付平臺的更多信息,請參考developer.apple.com/apple-pay/

視頻獲取鏈接:
http://pan.baidu.com/s/1mhzzqic 提取碼回復(fù)后可見。

來源:
http://bbs.520it.com/forum.php?mod=viewthread&tid=254&extra=page%3D1

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 一、什么是Apple Pay? 概念 Apple Pay,簡單來說, 就是一種移動支付方式。通過Touch ID/...
    Jack_Baiyx閱讀 12,138評論 0 3
  • 蘋果支付(Apple Pay): Apple Pay,簡單來說, 就是一種移動支付方式。通過Touch ID/ P...
    西風(fēng)頌閱讀 3,952評論 6 19
  • Apple Pay 一個方便 & 安全的移動支付技術(shù),讓用戶完成他們的支付環(huán)節(jié)并把支付相關(guān)的信息告訴你 只可以購買...
    skingtree閱讀 2,289評論 0 4
  • 1.About Apple Pay Apple Pay是一種移動支付技術(shù),讓使用者把它們對真實的物品和服務(wù)的支付信...
    NEWWORLD閱讀 5,309評論 14 51
  • 山村夜深, 蟲鳴嚶嚶,蟋蟀唧唧,聲響清晰,就在窗外------屋后山坡。蛙聲咕咕變奏,不太容易聽清,來自遠(yuǎn)處田地池...
    caa45b5096fb閱讀 152評論 0 0

友情鏈接更多精彩內(nèi)容