應(yīng)用內(nèi)集成Apple Pay

轉(zhuǎn)載并整理于博客園"大順子"博客
轉(zhuǎn)載并整理于CocoaChina-iOS開發(fā)

--參考資料
蘋果開發(fā)者中心-Apple Pay入門
PassKit Framework

Apple pay目前的設(shè)備支持情況

設(shè)備支持圖

可以看到對于iPhone主要是iphone6以上的設(shè)備

Apple Pay目前的系統(tǒng)支持情況

iOS8.0以上,但是需要注意的是直到iOS9.2才真正的支持銀聯(lián)支付

Apple Pay的集成

  1. 配置支付環(huán)境萌京、標(biāo)識符以及相應(yīng)的證書

    • 創(chuàng)建一個(gè)工程闪彼,并設(shè)置好對應(yīng)的Bundle ID
    • 注冊并配置一個(gè)商業(yè)標(biāo)識符(merchant ID)
      • 添加一個(gè)App ID,并在App Services中勾選Apple Pay選項(xiàng)
      • 配置一個(gè)Merchat ID秃流,并點(diǎn)擊Edit將選項(xiàng)勾選為Yes巫击,表示支持美國以外的地區(qū)支持支付
      • 下載Merchant ID證書蚓哩,并且驗(yàn)證有效性
      • 綁定Merchant ID到App ID
  2. 配置Xcode中的選項(xiàng)

    • 更改iOS Deployment Target為8.0
    • 在Target -> Capabilities 中開啟Apple Pay服務(wù)并選擇Marchat ID
  3. 步驟理解以及相應(yīng)的代碼實(shí)現(xiàn)


    • 判斷當(dāng)前設(shè)備是否可以支付(包含兩個(gè)部分:1规婆、當(dāng)前設(shè)備的硬件是否支持泽裳;2隘谣、當(dāng)前設(shè)備的軟件環(huán)境是否支持)

         // 1增拥、當(dāng)前設(shè)備是否支持Apple Pay
        if (![PKPaymentAuthorizationViewController canMakePayments]) {
            NSLog(@"當(dāng)前設(shè)備不支持Apple Pay支付");
        }
      
    • 判斷是否已經(jīng)添加了可以支付的銀行卡

        // 2、判斷是否添加了可用于支付的銀行卡
        // PKPaymentNetworkPrivateLabel為儲蓄卡/信用卡
        if (![PKPaymentAuthorizationViewController canMakePaymentsUsingNetworks:@[PKPaymentNetworkAmex,PKPaymentNetworkDiscover,PKPaymentNetworkMasterCard,PKPaymentNetworkPrivateLabel,PKPaymentNetworkVisa]]) {
            NSLog(@"沒有添加銀行卡");
            
            // 2.1 當(dāng)沒有銀行卡的時(shí)候創(chuàng)建按鈕
            PKPaymentButton *payButton = [PKPaymentButton buttonWithType:PKPaymentButtonTypeSetUp style:PKPaymentButtonStyleWhiteOutline];
            [payButton addTarget:self action:@selector(addCard:) forControlEvents:UIControlEventTouchUpInside];
            //將payButton添加到頁面的指定位置上 
        }else{
            // 2.2 當(dāng)有銀行卡的時(shí)候創(chuàng)建按鈕
            PKPaymentButton *payButton = [PKPaymentButton buttonWithType:PKPaymentButtonTypeBuy style:PKPaymentButtonStyleBlack];
            [payButton addTarget:self action:@selector(pay:) forControlEvents:UIControlEventTouchUpInside];
            //將payButton添加到頁面的指定位置上 
        }
        
        // 2.3 沒有銀行卡時(shí)跳轉(zhuǎn)至添加銀行卡頁面
        - (void)addCard:(PKPaymentButton*)button{
             PKPassLibrary *passLibrary = [[PKPassLibrary alloc] init];
             if ([passLibrary isPaymentPassActivationAvailable]) {
                [passLibrary openPaymentSetup];
            }   
        }
        
        // 2.4 有銀行卡時(shí)跳轉(zhuǎn)至支付頁面
        - (void)pay:(PKPaymentButton*)button{
            //創(chuàng)建支付請求并進(jìn)行授權(quán)處理
        }
      
    • 創(chuàng)建一個(gè)支付請求寻歧,并配置各項(xiàng)信息

        // 1跪者、創(chuàng)建一個(gè)支付請求
        PKPaymentRequest *request = [[PKPaymentRequest alloc] init];
      
        // 1.1 創(chuàng)建支付請求
        // 1.1.1 配置 merchant id
        request.merchantIdentifier = @"xxx";
      
        // 1.1.2 配置貨幣信息以及國家信息
        request.countryCode = @"CN";
        request.currencyCode = @"CNY";
      
        // 1.1.3  配置請求支持的卡片類型
        request.supportedNetworks =     @[PKPaymentNetworkChinaUnionPay,PKPaymentNetworkVisa];
      
        // 1.1.4 配置商家驗(yàn)證方式
        request.merchantCapabilities = PKMerchantCapability3DS;
      
        // 1.1.5 配置商品列表(需要注意的點(diǎn)是paymentSummaryItems數(shù)組的最后一個(gè)成員應(yīng)該為總額)
        NSDecimalNumber *price = [NSDecimalNumber decimalNumberWithString:@"12.6"];
        PKPaymentSummaryItem *item = [PKPaymentSummaryItem summaryItemWithLabel:@"蘋果" amount:price];
      
        NSDecimalNumber *totalPrice = [NSDecimalNumber decimalNumberWithString:@"12.6"];
        PKPaymentSummaryItem *totalItemCost = [PKPaymentSummaryItem summaryItemWithLabel:@"總額" amount:totalPrice];
        request.paymentSummaryItems = @[item,totalItemCost];
      
        // 1.2 配置請求的附加項(xiàng)
        // 1.2.1 配置發(fā)票的收獲地址
        request.requiredBillingAddressFields = PKAddressFieldAll;
      
      
        // 1.2.2 是否顯示收獲地址
        request.requiredShippingAddressFields = PKAddressFieldAll;
      
        // 1.2.3 配置快遞方式
        NSDecimalNumber *number = [NSDecimalNumber decimalNumberWithString:@"12.0"];
        PKShippingMethod *method = [PKShippingMethod summaryItemWithLabel:@"順風(fēng)快遞" amount:number];
        method.identifier = @"shunfeng";
        method.detail = @"當(dāng)日可達(dá)";
        request.shippingMethods = @[method];
      
    • 彈出授權(quán)控制器,讓用戶進(jìn)行支付授權(quán)

        // 彈出用戶支付授權(quán)頁面
        PKPaymentAuthorizationViewController *authCtrl = [[PKPaymentAuthorizationViewController alloc] initWithPaymentRequest:request];
        authCtrl.delegate = self;
        [self presentViewController:authCtrl animated:YES completion:nil];
      
    • 處理支付憑證熄求,以及彈出的模態(tài)控制器的處理

        //支付憑證是一個(gè)需要由服務(wù)器參與的過程渣玲,蘋果通過產(chǎn)生支付憑證,發(fā)送給服務(wù)器弟晚,
        服務(wù)器對憑證進(jìn)行處理忘衍,處理完之后將支付狀態(tài)返回給客戶端,讓客戶端進(jìn)行處理卿城。
      
      憑證產(chǎn)生圖
        //具體的返回地方實(shí)在委托當(dāng)中
        // 授權(quán)成功調(diào)用此方法
        - (void)paymentAuthorizationViewController:(PKPaymentAuthorizationViewController *)controller
                   didAuthorizePayment:(PKPayment *)payment
                            completion:(void (^)(PKPaymentAuthorizationStatus           status))completion{
                            //服務(wù)器處理結(jié)果的過程
                            //payment中有一個(gè)token枚钓,包含支付信息,發(fā)送給服務(wù)器瑟押,
                                服務(wù)器進(jìn)行相應(yīng)的處理后返回一個(gè)支付狀態(tài)搀捷,然后客戶端進(jìn)行
                                處理;
                            //可以對支付狀態(tài)進(jìn)行匹配多望。包含在PKPaymentAuthorizationStatus中嫩舟。
        }
        
        // 授權(quán)是否結(jié)束,包括授權(quán)finish怀偷,或者取消授權(quán)家厌,對控制器的處理
        - (void)paymentAuthorizationViewControllerDidFinish:(PKPaymentAuthorizationViewController *)controller{
            NSLog(@"授權(quán)完成");
            [self dismissViewControllerAnimated:YES completion:nil];
        }
      
  4. 服務(wù)器處理

    • 驗(yàn)證支付數(shù)據(jù)的哈希表和簽名
    • 為加密過的支付數(shù)據(jù)解碼
    • 向支付處理系統(tǒng)提交支付數(shù)據(jù)
    • 向訂單追蹤系統(tǒng)提交訂單
      處理支付請求時(shí),你有兩個(gè)選擇椎工;你既可以利用支付平臺處理支付請求饭于,也可以自己實(shí)現(xiàn)支付請求處理流程蜀踏。一個(gè)常用的支付平臺可以完成上述大部分操作。

關(guān)于支持Apple Pay支付平臺的更多信息掰吕,請參考developer.apple.com/apple-pay/

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末果覆,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子殖熟,更是在濱河造成了極大的恐慌随静,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,576評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件吗讶,死亡現(xiàn)場離奇詭異燎猛,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)照皆,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,515評論 3 399
  • 文/潘曉璐 我一進(jìn)店門重绷,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人膜毁,你說我怎么就攤上這事昭卓。” “怎么了瘟滨?”我有些...
    開封第一講書人閱讀 168,017評論 0 360
  • 文/不壞的土叔 我叫張陵候醒,是天一觀的道長。 經(jīng)常有香客問我杂瘸,道長倒淫,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,626評論 1 296
  • 正文 為了忘掉前任败玉,我火速辦了婚禮敌土,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘运翼。我一直安慰自己返干,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,625評論 6 397
  • 文/花漫 我一把揭開白布血淌。 她就那樣靜靜地躺著矩欠,像睡著了一般。 火紅的嫁衣襯著肌膚如雪悠夯。 梳的紋絲不亂的頭發(fā)上癌淮,一...
    開封第一講書人閱讀 52,255評論 1 308
  • 那天,我揣著相機(jī)與錄音疗疟,去河邊找鬼该默。 笑死瞳氓,一個(gè)胖子當(dāng)著我的面吹牛策彤,可吹牛的內(nèi)容都是我干的栓袖。 我是一名探鬼主播,決...
    沈念sama閱讀 40,825評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼店诗,長吁一口氣:“原來是場噩夢啊……” “哼裹刮!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起庞瘸,我...
    開封第一講書人閱讀 39,729評論 0 276
  • 序言:老撾萬榮一對情侶失蹤捧弃,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后擦囊,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體违霞,經(jīng)...
    沈念sama閱讀 46,271評論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,363評論 3 340
  • 正文 我和宋清朗相戀三年瞬场,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了买鸽。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,498評論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡贯被,死狀恐怖眼五,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情彤灶,我是刑警寧澤看幼,帶...
    沈念sama閱讀 36,183評論 5 350
  • 正文 年R本政府宣布,位于F島的核電站幌陕,受9級特大地震影響诵姜,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜搏熄,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,867評論 3 333
  • 文/蒙蒙 一茅诱、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧搬卒,春花似錦瑟俭、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,338評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至坯门,卻和暖如春微饥,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背古戴。 一陣腳步聲響...
    開封第一講書人閱讀 33,458評論 1 272
  • 我被黑心中介騙來泰國打工欠橘, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人现恼。 一個(gè)月前我還...
    沈念sama閱讀 48,906評論 3 376
  • 正文 我出身青樓肃续,卻偏偏與公主長得像黍檩,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子始锚,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,507評論 2 359

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

  • Apple Pay 一個(gè)方便 & 安全的移動(dòng)支付技術(shù)刽酱,讓用戶完成他們的支付環(huán)節(jié)并把支付相關(guān)的信息告訴你 只可以購買...
    skingtree閱讀 1,999評論 0 4
  • 1.About Apple Pay Apple Pay是一種移動(dòng)支付技術(shù),讓使用者把它們對真實(shí)的物品和服務(wù)的支付信...
    NEWWORLD閱讀 5,203評論 14 51
  • Apple Pay入門 概述 利用apple,用戶可以在您的app中輕松地購買實(shí)物商品和服務(wù)瞧捌】美铮客戶更喜歡使用 Ap...
    趴著等天鵝閱讀 974評論 3 6
  • 關(guān)于 Apple Pay apple pay 是一種移動(dòng)支付技術(shù),它可以讓用戶將自己在現(xiàn)實(shí)生活中購物姐呐、享受服務(wù)的支...
    LuxDark閱讀 537評論 0 2
  • 簡述 2016年2月18日上午殿怜,蘋果公司宣布,正式在中國大陸上線Apple Pay服務(wù)曙砂。Apple Pay是一個(gè)基...
    奮斗的蝸牛閱讀 724評論 0 1