Apple Pay入門詳細(xì)指南

Apple Pay入門

概述

利用apple,用戶可以在您的app中輕松地購(gòu)買實(shí)物商品和服務(wù)??蛻舾矚g使用 Apple Pay,因?yàn)樗麄冊(cè)谫?gòu)物時(shí)無需輸入賬單、送貨和聯(lián)系人詳細(xì)信息。而且,Apple Pay 具有更高的安全性,能讓客戶和開發(fā)者安心使用。Apple 不會(huì)存儲(chǔ)或共享客戶的實(shí)際信用卡和借記卡卡號(hào),因此商家和 App 開發(fā)者無需負(fù)責(zé)管理和保護(hù)實(shí)際的信用卡和借記卡卡號(hào)。

由于具備這些優(yōu)點(diǎn),在按照推薦方式實(shí)施了 Apple Pay 之后,開發(fā)者的結(jié)賬轉(zhuǎn)換率提高為原來的 2 倍,結(jié)賬時(shí)間也大幅縮短;而且,在整合了 Apple Pay 之后,客戶的忠誠(chéng)度和購(gòu)買頻率也都提高了。

在您的 App 中,用戶可以使用 Touch ID 為付款授權(quán),以釋放安全地存儲(chǔ)在 iPhone 和 iPad 上的令牌化信用卡和借記卡付款憑證。此外,用戶還可將其賬單、送貨和聯(lián)系人信息存儲(chǔ)在 Wallet 這一 App 中。這樣一來,當(dāng)客戶在您的 App 中使用 Touch ID 為購(gòu)買項(xiàng)目授權(quán)時(shí),系統(tǒng)就會(huì)隨付款憑證一道提供這些信息。

目前,Apple Pay 可在澳大利亞、加拿大、中國(guó)、英國(guó)和美國(guó)使用。

先決條件

除了使用PassKit 框架實(shí)施 Apple Pay 之外,您還必須:

  • 通過付款處理機(jī)構(gòu)或網(wǎng)關(guān)設(shè)置一個(gè)帳戶。
  • 通過“證書、標(biāo)識(shí)符和描述文件”(“Certificates, Identifiers & Profiles”)注冊(cè)一個(gè)商家 ID。
  • 生成一個(gè) Apple Pay 證書,用于加密和解密付款令牌
  • 在您的 App 中包括一個(gè) Apple Pay 授權(quán)
  • 遵循“應(yīng)用審核準(zhǔn)則”的第 29 節(jié)中列出的要求
  • 遵循《App 審核準(zhǔn)則》(“App Review Guidelines”)第 29 節(jié)中列出的要求。

在App中設(shè)置Apple Pay

Apple Pay

? ? ? ?第一步先修改target為iOS 8.1,然后在項(xiàng)目Capabilities里將Apple Pay設(shè)置為on,這將自動(dòng)導(dǎo)入需要的庫文件,然后添加一個(gè)權(quán)限文件并設(shè)置,最后修改或創(chuàng)建你的App ID。

設(shè)置Apple Pay為on

? ? ? ?如果沒有有效merchant ID,我們需要?jiǎng)?chuàng)建一個(gè),訪問蘋果iOS 開發(fā)者中心的位于Identifiers > Merchant ID的頁面。
? ? ? ?跟隨創(chuàng)建流程創(chuàng)建完成后,我們需要給Merchant ID添加一個(gè)證書簽名請(qǐng)求(Certificate Signing Request),以便加密支付令牌來保證其安全性。為達(dá)到這個(gè)目的,導(dǎo)航至你的Merchant ID,并點(diǎn)擊Edit按鈕來修改它。跟隨流程添加證書簽名請(qǐng)求
? ? ? ?編輯完成后回到Xcode,刷新Merchant ID區(qū)塊。選中merchant ID 然后進(jìn)入代碼編寫

編寫代碼

  • 在適當(dāng)?shù)奈募袑?dǎo)入passkit框架
    #import <PassKit/PassKit.h>
  • 遵循代理協(xié)議
    @interface ViewController () <PKPaymentAuthorizationViewControllerDelegate>
  • 創(chuàng)建支付請(qǐng)求
    首先確認(rèn)設(shè)備是否支持Apple Pay支付
    if([PKPaymentAuthorizationViewController canMakePayments])
    接下來開始創(chuàng)建Apple Pay支付請(qǐng)求
    PKPaymentRequest *request = [[PKPaymentRequest alloc] init];
    request.countryCode = @"CN";
    request.currencyCode = @"CNY";
    request.supportedNetworks = @[PKPaymentNetworkAmex, PKPaymentNetworkMasterCard, PKPaymentNetworkVisa];
    request.merchantCapabilities = PKMerchantCapability3DS | PKMerchantCapabilityEMV;
    request.merchantIdentifier = @"merchant.com.UNIBOX.UNIBOX";
    request.requiredBillingAddressFields = PKAddressFieldEmail | PKAddressFieldPostalAddress;
    request.requiredShippingAddressFields = PKAddressFieldPostalAddress;
    currencyCode列表查詢
    countryCode列表查詢
    supportedNetworks 支持的支付方式

通過在supportedNetworks屬性中填入字符串常量數(shù)組來指定你支持的支付網(wǎng)絡(luò)。通過指定merchantCapabilities屬性來指定你支持的支付處理標(biāo)準(zhǔn),3DS支付方式是必須支持的,EMV方式是可選的。

通過填充 requiredBillingAddressFieldsrequiredShippingAddressFields屬性來指定所需賬單信息和配送地址信息

使用applicationData屬性來存儲(chǔ)一些在你的應(yīng)用中關(guān)于這次支付請(qǐng)求的唯一標(biāo)識(shí)信息,比如一個(gè)購(gòu)物車的標(biāo)識(shí)符。在用戶授權(quán)支付之后,這個(gè)屬性的哈希值會(huì)出現(xiàn)在這次支付的token中。

  • 添加物品到支付頁
    使用PKPaymentSummaryItem來創(chuàng)建物品并顯示,這個(gè)對(duì)象描述了一個(gè)物品和它的價(jià)格,數(shù)組最后的對(duì)象必須是總價(jià)格。
    PKPaymentSummaryItem *widget1 = [PKPaymentSummaryItem summaryItemWithLabel:@"Widget 1" amount:[NSDecimalNumber decimalNumberWithString:@"0.99"]];

    PKPaymentSummaryItem *widget2 = [PKPaymentSummaryItem summaryItemWithLabel:@"Widget 2" amount:[NSDecimalNumber decimalNumberWithString:@"1.00"]];
    
    PKPaymentSummaryItem *total = [PKPaymentSummaryItem summaryItemWithLabel:@"My Company Name" amount:[NSDecimalNumber decimalNumberWithString:@"1.99"]];
    
    request.paymentSummaryItems = @[widget1, widget2, total];
    
  • 配置配送方式
    PKShippingMethod *method1 = [PKShippingMethod summaryItemWithLabel:@"24小時(shí)內(nèi)配送" amount:[NSDecimalNumber decimalNumberWithString:@"10。00"]];
    method1.detail = @"24小時(shí)內(nèi)配送";
    method1.identifier = @"24hours";
    PKShippingMethod *method2 = [PKShippingMethod summaryItemWithLabel:@"兩天內(nèi)配送" amount:[NSDecimalNumber decimalNumberWithString:@"5.00"]];
    method2.detail = @"兩天內(nèi)配送";
    method2.identifier = @"2days";
    request.shippingMethods = @[method1,method2];

  • 顯示認(rèn)證視圖
    PKPaymentAuthorizationViewController *paymentPane = [[PKPaymentAuthorizationViewController alloc] initWithPaymentRequest:request];
    paymentPane.delegate = self;
    [self presentViewController:paymentPane animated:YES completion:nil];

  • 代理說明
    送貨地址回調(diào)
    -(void)paymentAuthorizationViewController:(PKPaymentAuthorizationViewController *)controller
    didSelectShippingContact:(PKContact *)contact
    completion:(void (^)(PKPaymentAuthorizationStatus, NSArray<pkshippingmethod *> * _Nonnull, NSArray<pkpaymentsummaryitem *> * _Nonnull))completion{
    //contact送貨地址信息,PKContact類型
    //送貨信息選擇回調(diào),如果需要根據(jù)送貨地址調(diào)整送貨方式,比如普通地區(qū)包郵+極速配送,偏遠(yuǎn)地區(qū)只有付費(fèi)普通配送,進(jìn)行支付金額重新計(jì)算,可以實(shí)現(xiàn)該代理,返回給系統(tǒng):shippingMethods配送方式,summaryItems賬單列表,如果不支持該送貨信息返回想要的PKPaymentAuthorizationStatus
    completion(PKPaymentAuthorizationStatusSuccess, shippingMethods, summaryItems);
    }
    送貨方式回調(diào)
    -(void)paymentAuthorizationViewController:(PKPaymentAuthorizationViewController *)controller
    didSelectShippingMethod:(PKShippingMethod *)shippingMethod
    completion:(void (^)(PKPaymentAuthorizationStatus, NSArray<pkpaymentsummaryitem *> * _Nonnull))completion{
    //配送方式回調(diào),如果需要根據(jù)不同的送貨方式進(jìn)行支付金額的調(diào)整,比如包郵和付費(fèi)加速配送,可以實(shí)現(xiàn)該代理
    completion(PKPaymentAuthorizationStatusSuccess, summaryItems);
    }
    支付卡選擇回調(diào)
    -(void)paymentAuthorizationViewController:(PKPaymentAuthorizationViewController *)controller didSelectPaymentMethod:(PKPaymentMethod *)paymentMethod completion:(void (^)(NSArray<pkpaymentsummaryitem *> * _Nonnull))completion{
    //支付銀行卡回調(diào),如果需要根據(jù)不同的銀行調(diào)整付費(fèi)金額,可以實(shí)現(xiàn)該代理
    completion(summaryItems);
    }
    付款成功蘋果服務(wù)器返回信息回調(diào),做服務(wù)器驗(yàn)證
    -(void)paymentAuthorizationViewController:(PKPaymentAuthorizationViewController *)controller
    didAuthorizePayment:(PKPayment *)payment
    completion:(void (^)(PKPaymentAuthorizationStatus status))completion {
    PKPaymentToken *payToken = payment.token;
    //支付憑據(jù),發(fā)給服務(wù)端進(jìn)行驗(yàn)證支付是否真實(shí)有效
    PKContact *billingContact = payment.billingContact; //賬單信息
    PKContact *shippingContact = payment.shippingContact; //送貨信息
    PKContact *shippingMethod = payment.shippingMethod; //送貨方式
    //等待服務(wù)器返回結(jié)果后再進(jìn)行系統(tǒng)block調(diào)用
    dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(3 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
    //模擬服務(wù)器通信
    completion(PKPaymentAuthorizationStatusSuccess);
    });
    }
    支付完成回調(diào)
    -(void)paymentAuthorizationViewControllerDidFinish:(PKPaymentAuthorizationViewController *)controller{
    [controller dismissViewControllerAnimated:YES completion:nil];
    }

擴(kuò)展閱讀

Apple Pay入門
Apple Pay編程指南
Apple Pay標(biāo)識(shí)指南

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

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

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