iOS-APP集成Apple Pay指南

版權(quán)聲明:本文為作者原創(chuàng)文章组橄, 如果有相同的或者相似的衣吠,那將是我的榮幸。

Apple Pay是什么小压?

Apple Pay目前在國(guó)內(nèi)上線(xiàn)已有一段時(shí)間,這意味著消費(fèi)者可通過(guò) 蘋(píng)果手機(jī)椰于、蘋(píng)果手表等智能設(shè)備來(lái)進(jìn)行支付怠益,它的功能類(lèi)似一個(gè)“卡包”,講實(shí)體銀行卡虛擬到手機(jī)里瘾婿,用戶(hù)可以綁定儲(chǔ)蓄卡或信用卡實(shí)現(xiàn)刷卡支付蜻牢。


為什么使用Apple Pay

從理論上看:微信支付也好、支付寶也好偏陪,均屬于“結(jié)算平臺(tái)”抢呆,他們會(huì)透過(guò)銀聯(lián),從你的銀行里提出現(xiàn)金代為托管笛谦;直至你把金錢(qián)放回銀行之前抱虐,都只能在微信/支付寶上使用。但 Apple Pay 只是一張電子信用卡饥脑,你的錢(qián)仍然在銀行里恳邀,付款時(shí)直接從銀聯(lián)向銀行提取。而從技上術(shù)上灶轰,微信支付也好谣沸、支付寶也好,在付款時(shí)都要透過(guò)相機(jī)或條碼機(jī)笋颤,讀取一次性的二維碼乳附;而 Apple Pay 則透過(guò)近場(chǎng)通信 (NFC) 的方式,讀取 iPhone 上的 Token 令牌伴澄。

從實(shí)際上看:目前微信支付及支付寶的優(yōu)勢(shì)在于低入場(chǎng)門(mén)檻:商店只要有臺(tái)智能手機(jī)赋除,就毋須為移動(dòng)支付購(gòu)入/租用新設(shè)備,而消費(fèi)者也不需要很高端的旗艦級(jí)設(shè)備秉版。而 Apple Pay 優(yōu)勢(shì)是良好的用戶(hù)體驗(yàn)贤重,使用 Apple Pay 付費(fèi),既安全清焕、又快捷并蝗、隱私度也比較高祭犯。


設(shè)備支持有哪些要求?

Apple Pay需要支持NFC功能滚停,目前只限于iPhone 6s沃粗、iPhone 6s Plus、iPhone 6键畴、iPhone 6 Plus和Apple Watch這幾款設(shè)備使用最盅。同時(shí),用戶(hù)需講手機(jī)操作系統(tǒng)版本升級(jí)到iOS 9.2以上起惕,Apple Watch則需要Watch OS 2.1版本以上涡贱。


Apple Pay如何使用?

iPhone上惹想,先打開(kāi)系統(tǒng)自帶的Wallet應(yīng)用问词,后點(diǎn)右上角的?符號(hào),這時(shí)你有兩個(gè)選擇嘀粱,可以用攝像頭拍卡就能識(shí)別激挪,也可以手動(dòng)輸入,或者通過(guò)iTunes綁定锋叨,至于Apple Watch怎么使用垄分,應(yīng)該操作差不多,具體情況本人未去實(shí)踐娃磺,還望諒解薄湿。


Apple Pay環(huán)境配置

  • 配置Bundle ID


    14671699608022.jpg
  • 添加商戶(hù)的ID


    14671702234549.jpg
  • 把工程中對(duì)應(yīng)的Bundle ID添加進(jìn)去


    14671703281837.jpg
  • 點(diǎn)擊創(chuàng)建好的商戶(hù)ID


    14671705166905.jpg
  • 編輯商戶(hù)ID


    14671711439975.jpg
  • 添加CSR文件


    14671714784874.jpg
  • 下載配置好的商戶(hù)ID


    14671715087391.jpg

    14671715713657.jpg
  • 創(chuàng)建對(duì)應(yīng)的App IDs


    14671716587260.jpg
  • 勾選Apple Pay


    14671717034194.jpg
  • 配置支付環(huán)境


    14671720852032.jpg
  • Clean一下工程,如果工程自動(dòng)添加此文件則以上步驟正確


    14671720005926.jpg

App項(xiàng)目?jī)?nèi)部集成方式

Apple Pay使用了PassKit框架偷卧,所以需要導(dǎo)入相應(yīng)頭文件

#import <PassKit/PassKit.h>

接收Apple Pay處理信息的回調(diào)嘿般,需要遵守協(xié)議,實(shí)現(xiàn)相應(yīng)的代理方法

@interface ViewController ()<PKPaymentAuthorizationViewControllerDelegate>
@end

為了方便測(cè)試涯冠,觸發(fā)支付操作時(shí)間寫(xiě)在touchBegan:方法中

- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event {
    // code...
}

具體代碼實(shí)現(xiàn)如下:

  • 判斷設(shè)備是否支持Apple Pay快捷支付功能
if (![PKPaymentAuthorizationViewController canMakePayments]) {
        // 提示用戶(hù)該設(shè)備不支持Apple Pay快捷支付功能
        // code...
        return;
    }
  • 判斷設(shè)備是否綁定過(guò)可支付的銀行卡
    /**
     *  若沒(méi)有可用銀行卡炉奴,則跳轉(zhuǎn)到設(shè)置銀行卡界面
     *  PKPaymentNetworkVisa                Visa國(guó)際卡
     *  PKPaymentNetworkChinaUnionPay       中國(guó)銀聯(lián)
     *  PKPaymentNetworkDiscover            Discover(美國(guó)流行的信用卡)
     */
    if (![PKPaymentAuthorizationViewController canMakePaymentsUsingNetworks:@[PKPaymentNetworkVisa, PKPaymentNetworkChinaUnionPay, PKPaymentNetworkDiscover]]) {
        
        // 進(jìn)入設(shè)置銀行卡界面
        [[[PKPassLibrary alloc] init] openPaymentSetup];
        
    }

  • 設(shè)置商品參數(shù)
    // 創(chuàng)建商品
    NSDecimalNumber *firstAmount = [NSDecimalNumber decimalNumberWithString:@"1.11"];
    NSDecimalNumber *secondAmount = [NSDecimalNumber decimalNumberWithString:@"2.22"];
    NSDecimalNumber *thirdAmount = [NSDecimalNumber decimalNumberWithString:@"3.33"];
    
    NSDecimalNumber *amountSum = [NSDecimalNumber zero];
    amountSum = [amountSum decimalNumberByAdding:firstAmount];
    amountSum = [amountSum decimalNumberByAdding:secondAmount];
    amountSum = [amountSum decimalNumberByAdding:thirdAmount];
    
    /**
     *  @param label        商品名稱(chēng)(英文名稱(chēng)默認(rèn)全部顯示大寫(xiě))
     *  @param amount       商品價(jià)格 - NSDecimalNumber類(lèi)型
     */
    PKPaymentSummaryItem *firstItem = [PKPaymentSummaryItem summaryItemWithLabel:@"FirstItem" amount:firstAmount];
    PKPaymentSummaryItem *secondItem = [PKPaymentSummaryItem summaryItemWithLabel:@"SecondItem" amount:secondAmount];
    PKPaymentSummaryItem *thirdItem = [PKPaymentSummaryItem summaryItemWithLabel:@"ThirdtItem" amount:thirdAmount];
    
    PKPaymentSummaryItem *itemsSum = [PKPaymentSummaryItem summaryItemWithLabel:@"PJChao" amount:amountSum];
  • 創(chuàng)建支付請(qǐng)求(基本配置)
    PKPaymentRequest *request = [[PKPaymentRequest alloc] init];
    
    // 設(shè)置商戶(hù)ID(merchant IDs)
    request.merchantIdentifier = @"merchant.com.zpj.ApplePayTest";
    
    // 設(shè)置國(guó)家代碼(中國(guó)大陸)
    request.countryCode = @"CN";
    
    // 設(shè)置支付貨幣(人民幣)
    request.currencyCode = @"CNY";
    
    // 設(shè)置商戶(hù)的支付標(biāo)準(zhǔn)(3DS支付方式必須支持,其他方式可選)
    request.merchantCapabilities = PKMerchantCapability3DS;
    request.paymentSummaryItems = @[firstItem, secondItem, thirdItem, itemsSum];
    
    /**
     *  以上參數(shù)都是必須的
     *  以下參數(shù)不是必須的
     */
     
    // 設(shè)置收據(jù)內(nèi)容
    request.requiredBillingAddressFields = PKAddressFieldAll;
    
    // 設(shè)置送貨內(nèi)容
    request.requiredShippingAddressFields = PKAddressFieldAll;
    
    // 設(shè)置送貨方式
    PKShippingMethod *method = [PKShippingMethod summaryItemWithLabel:@"阿敏" amount:[NSDecimalNumber decimalNumberWithString:@"10.00"]];
    method.identifier = @"阿敏物流";
    method.detail = @"12小時(shí)到達(dá)";
    
    request.shippingMethods = @[method];
  • 顯示支付界面
    PKPaymentAuthorizationViewController *paymentVC = [[PKPaymentAuthorizationViewController alloc] initWithPaymentRequest:request];
    paymentVC.delegate = self;
    
    if (paymentVC == nil) return;
    
    [self presentViewController:paymentVC animated:YES completion:nil];
  • 代理方法的實(shí)現(xiàn)
#pragma mark - <PKPaymentAuthorizationViewControllerDelegate>
- (void)paymentAuthorizationViewController:(PKPaymentAuthorizationViewController *)controller
                       didAuthorizePayment:(PKPayment *)payment
                                completion:(void (^)(PKPaymentAuthorizationStatus status))completion
{
    /**
     *  在這里支付信息應(yīng)發(fā)送給服務(wù)器/第三方的SDK(銀聯(lián)SDK/易寶支付SDK/易智付SDK等)
     *  再根據(jù)服務(wù)器返回的支付成功與否進(jìn)行不同處理
     *  這里直接返回支付成功
     */
    completion(PKPaymentAuthorizationStatusSuccess);
}

- (void)paymentAuthorizationViewControllerDidFinish:(PKPaymentAuthorizationViewController *)controller
{
    // 點(diǎn)擊支付/取消按鈕隱藏界面
    [controller dismissViewControllerAnimated:YES completion:nil];
}

附上測(cè)試結(jié)果

14671851652964.jpg

test.gif

14671854207186.jpg

終于寫(xiě)完了蛇更,如果有什么問(wèn)題瞻赶,還望大神給予指點(diǎn),Thank you派任。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末砸逊,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子掌逛,更是在濱河造成了極大的恐慌师逸,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,686評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件豆混,死亡現(xiàn)場(chǎng)離奇詭異篓像,居然都是意外死亡动知,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,668評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門(mén)员辩,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)盒粮,“玉大人,你說(shuō)我怎么就攤上這事奠滑〉ぶ澹” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 158,160評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵宋税,是天一觀的道長(zhǎng)摊崭。 經(jīng)常有香客問(wèn)我揭厚,道長(zhǎng)灾常,這世上最難降的妖魔是什么移必? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,736評(píng)論 1 284
  • 正文 為了忘掉前任奏篙,我火速辦了婚禮,結(jié)果婚禮上渺杉,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好瓶珊,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,847評(píng)論 6 386
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著耸彪,像睡著了一般伞芹。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上蝉娜,一...
    開(kāi)封第一講書(shū)人閱讀 50,043評(píng)論 1 291
  • 那天唱较,我揣著相機(jī)與錄音,去河邊找鬼召川。 笑死南缓,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的荧呐。 我是一名探鬼主播汉形,決...
    沈念sama閱讀 39,129評(píng)論 3 410
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼倍阐!你這毒婦竟也來(lái)了概疆?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 37,872評(píng)論 0 268
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤峰搪,失蹤者是張志新(化名)和其女友劉穎岔冀,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體概耻,經(jīng)...
    沈念sama閱讀 44,318評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡使套,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,645評(píng)論 2 327
  • 正文 我和宋清朗相戀三年罐呼,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片童漩。...
    茶點(diǎn)故事閱讀 38,777評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡弄贿,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出矫膨,到底是詐尸還是另有隱情差凹,我是刑警寧澤,帶...
    沈念sama閱讀 34,470評(píng)論 4 333
  • 正文 年R本政府宣布侧馅,位于F島的核電站危尿,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏馁痴。R本人自食惡果不足惜谊娇,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,126評(píng)論 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望罗晕。 院中可真熱鬧济欢,春花似錦、人聲如沸小渊。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,861評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)酬屉。三九已至半等,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間呐萨,已是汗流浹背杀饵。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,095評(píng)論 1 267
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留谬擦,地道東北人切距。 一個(gè)月前我還...
    沈念sama閱讀 46,589評(píng)論 2 362
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像惨远,于是被迫代替她去往敵國(guó)和親蔚舀。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,687評(píng)論 2 351

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