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

Apple Pay入門

概述

利用apple,用戶可以在您的app中輕松地購買實(shí)物商品和服務(wù)耕挨∮德Γ客戶更喜歡使用 Apple Pay耸弄,因?yàn)樗麄冊(cè)谫徫飼r(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 之后,客戶的忠誠度和購買頻率也都提高了谤饭。

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

目前,Apple Pay 可在澳大利亞阱佛、加拿大帖汞、中國、英國和美國使用凑术。

先決條件

除了使用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è)購物車的標(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)系作者
  • 序言:七十年代末哈扮,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子蚓再,更是在濱河造成了極大的恐慌滑肉,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,542評(píng)論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件摘仅,死亡現(xiàn)場離奇詭異靶庙,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)娃属,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,822評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門六荒,熙熙樓的掌柜王于貴愁眉苦臉地迎上來护姆,“玉大人,你說我怎么就攤上這事掏击÷言恚” “怎么了?”我有些...
    開封第一講書人閱讀 163,912評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵砚亭,是天一觀的道長灯变。 經(jīng)常有香客問我,道長捅膘,這世上最難降的妖魔是什么添祸? 我笑而不...
    開封第一講書人閱讀 58,449評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮寻仗,結(jié)果婚禮上膝捞,老公的妹妹穿的比我還像新娘。我一直安慰自己愧沟,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,500評(píng)論 6 392
  • 文/花漫 我一把揭開白布鲤遥。 她就那樣靜靜地躺著沐寺,像睡著了一般。 火紅的嫁衣襯著肌膚如雪盖奈。 梳的紋絲不亂的頭發(fā)上混坞,一...
    開封第一講書人閱讀 51,370評(píng)論 1 302
  • 那天,我揣著相機(jī)與錄音钢坦,去河邊找鬼究孕。 笑死,一個(gè)胖子當(dāng)著我的面吹牛爹凹,可吹牛的內(nèi)容都是我干的厨诸。 我是一名探鬼主播,決...
    沈念sama閱讀 40,193評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼禾酱,長吁一口氣:“原來是場噩夢(mèng)啊……” “哼微酬!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起颤陶,我...
    開封第一講書人閱讀 39,074評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤颗管,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后滓走,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體垦江,經(jīng)...
    沈念sama閱讀 45,505評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,722評(píng)論 3 335
  • 正文 我和宋清朗相戀三年搅方,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了比吭。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片绽族。...
    茶點(diǎn)故事閱讀 39,841評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖梗逮,靈堂內(nèi)的尸體忽然破棺而出项秉,到底是詐尸還是另有隱情,我是刑警寧澤慷彤,帶...
    沈念sama閱讀 35,569評(píng)論 5 345
  • 正文 年R本政府宣布娄蔼,位于F島的核電站,受9級(jí)特大地震影響底哗,放射性物質(zhì)發(fā)生泄漏岁诉。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,168評(píng)論 3 328
  • 文/蒙蒙 一跋选、第九天 我趴在偏房一處隱蔽的房頂上張望涕癣。 院中可真熱鬧,春花似錦前标、人聲如沸坠韩。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,783評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽只搁。三九已至,卻和暖如春俭尖,著一層夾襖步出監(jiān)牢的瞬間氢惋,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,918評(píng)論 1 269
  • 我被黑心中介騙來泰國打工稽犁, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留焰望,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,962評(píng)論 2 370
  • 正文 我出身青樓已亥,卻偏偏與公主長得像熊赖,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子虑椎,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,781評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容