為你的iOS應(yīng)用集成Apple Pay

Apple Pay正式在國內(nèi)上線的那天唆香,一起工作的小伙伴就走進(jìn)了Starbucks,7-11等帶有銀聯(lián)閃付的店進(jìn)行了嘗鮮吨艇。不管是否要再次輸入一次密碼躬它,但是它的出現(xiàn)確實給我們帶來了極大的便捷。下面就嘗試在一個Demo中來集成下Apple Pay的功能东涡。


Apple Pay流程

Apple Pay運行環(huán)境:

iPhone 6以上設(shè)備冯吓,當(dāng)然也包括最新出來的iPhone SE。iOS版本在9.2以上疮跑。

Xcode版本號 7.2.1

APP接入ApplePay不需要POS機(jī)组贺,但是還是要和銀行簽約,比如和銀聯(lián)簽約祖娘。

準(zhǔn)備工作

在接入Apple Pay之前失尖,首先要申請MerchantID及對應(yīng)的證書。


申請Merchant ID

需要以merchant開頭的一個字符串


僅在中國使用

申請App ID,這里和Merchant ID填寫一樣的名字為了辨別

申請好后再權(quán)限里面打開ApplePay功能渐苏,并配置merchant證書

選擇Edit進(jìn)行相應(yīng)配置

配置成功后你會看到


配置APP ID和Merchant ID關(guān)聯(lián)成功

搭建工程文件

bundleID設(shè)置掀潮,對應(yīng)手動生成的bundleID


Bundle Id設(shè)置

Capability中啟用Apple Pay權(quán)限,并選擇merchantID.


Apple Pay使能并勾選對應(yīng)merchantID

設(shè)置需要導(dǎo)入的頭文件琼富、引入的庫

#import <PassKit/PassKit.h>//用戶綁定的銀行卡信息

#import <PassKit/PKPaymentAuthorizationViewController.h>//Apple pay的展示控件

#import <AddressBook/AddressBook.h>//用戶聯(lián)系信息相關(guān)

在開始Apple Pay支付前需要帶代碼中進(jìn)行仪吧,系統(tǒng)版本檢測,設(shè)備是否支持ApplePay檢測以及用戶是否綁定有對應(yīng)的銀行鞠眉,三步操作薯鼠。

if(![PKPaymentAuthorizationViewControllerclass]) {

//PKPaymentAuthorizationViewController需iOS8.0以上支持

NSLog(@"操作系統(tǒng)不支持ApplePay,請升級至9.0以上版本械蹋,且iPhone6以上設(shè)備才支持");

return;

}

//檢查當(dāng)前設(shè)備是否可以支付

if(![PKPaymentAuthorizationViewControllercanMakePayments]) {

//支付需iOS9.0以上支持

NSLog(@"設(shè)備不支持ApplePay出皇,請升級至9.0以上版本,且iPhone6以上設(shè)備才支持");

return;

}

//檢查用戶是否可進(jìn)行某種卡的支付朝蜘,是否支持Amex、MasterCard涩金、Visa與銀聯(lián)四種卡谱醇,根據(jù)自己項目的需要進(jìn)行檢測

NSArray*supportedNetworkCards =@[PKPaymentNetworkAmex,PKPaymentNetworkMasterCard,PKPaymentNetworkVisa,PKPaymentNetworkChinaUnionPay];

if(![PKPaymentAuthorizationViewControllercanMakePaymentsUsingNetworks:supportedNetworks]) {

NSLog(@"沒有綁定支付卡");

return;

}

NSLog(@"可以支付暇仲,開始建立支付請求");

//當(dāng)以上三種檢查都通過后我這里以人民幣作為測試

//設(shè)置幣種、國家碼及merchant標(biāo)識符等基本信息

PKPaymentRequest*payRequest = [[PKPaymentRequestalloc]init];

payRequest.countryCode=@"CN";//國家代碼

payRequest.currencyCode=@"CNY";//RMB的幣種代碼

payRequest.merchantIdentifier=@"merchant.com.rm.applepay";//申請的merchantID

payRequest.supportedNetworks= supportedNetworkCards;//用戶可進(jìn)行支付的銀行卡

payRequest.merchantCapabilities=PKMerchantCapability3DS|PKMerchantCapabilityEMV;//設(shè)置支持的交易處理協(xié)議副渴,3DS必須支持奈附,EMV為可選

//payRequest.requiredBillingAddressFields = PKAddressFieldEmail;

//payRequest.requiredShippingAddressFields = PKAddressFieldPostalAddress|PKAddressFieldPhone|PKAddressFieldName;

payRequest.requiredShippingAddressFields=PKAddressFieldNone;

//設(shè)置兩種配送方式,一般都是商戶App,里面一般自帶配送方式e.g.京東配送

payRequest.shippingMethods=@[];

NSDecimalNumber*totalAmount = [NSDecimalNumberdecimalNumberWithString:@"10000000"];

PKPaymentSummaryItem*total = [PKPaymentSummaryItemsummaryItemWithLabel:@"眉州彥祖"amount:totalAmount];

summaryItems= [NSMutableArrayarrayWithArray:@[total]];

//summaryItems為賬單列表,類型是NSMutableArray煮剧,這里設(shè)置成成員變量斥滤,在后續(xù)的代理回調(diào)中可以進(jìn)行支付金額的調(diào)整。

payRequest.paymentSummaryItems=summaryItems;

//ApplePay控件

PKPaymentAuthorizationViewController*view = [[PKPaymentAuthorizationViewControlleralloc]initWithPaymentRequest:payRequest];

view.delegate=self;

[selfpresentViewController:viewanimated:YEScompletion:nil];

接下來假如一切順利就會去調(diào)用服務(wù)端去調(diào)用對應(yīng)的支付網(wǎng)關(guān)完成付款.

- (void)paymentAuthorizationViewController:(PKPaymentAuthorizationViewController*)controller

didAuthorizePayment:(PKPayment*)payment

completion:(void(^)(PKPaymentAuthorizationStatusstatus))completion {

PKPaymentToken*payToken = payment.token;

//支付憑據(jù)勉盅,發(fā)給服務(wù)端進(jìn)行驗證支付是否真實有效

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);

});

}


點擊Apple Pay按鈕觸發(fā)


輸入指紋后


支付完成佑颇,??

后續(xù)工作

上面是模擬支付成功的回調(diào),真實環(huán)境你需要@服務(wù)端開發(fā)人員給你寫好驅(qū)動支付網(wǎng)關(guān)的代碼草娜,可以參考Apple Pay的官方文檔

https://developer.apple.com/library/ios/ApplePay_Guide/ProcessPayment.html#//apple_ref/doc/uid/TP40014764-CH5-SW4

Processing a payment involves several steps:

Sending the payment information to your server, along with other information needed to process the order

Verifying the hashes and signature of the payment data

Decrypting the encrypted payment data

Submitting payment data to the payment processing network

Submitting the order to your order-tracking system


服務(wù)端處理請求流程

其它選擇

接入Apple Pay還可以使用國內(nèi)使用人數(shù)較多的平臺

https://open.unionpay.com/ajweb/help/file/techFile?productId=80

銀聯(lián)Apple Pay控件開發(fā)包


銀聯(lián)SDK實現(xiàn)Apple Pay流程

1-2挑胸、 商戶生成訂單,通過商戶SERVER端將訂單信息發(fā)送給銀聯(lián)支付網(wǎng)關(guān);3-4、銀聯(lián)支付網(wǎng)關(guān)記錄訂單信息,返回用來標(biāo)識訂單的TN號,經(jīng)由商戶SERVER返回至給

商戶APP;

5宰闰、 商戶APP調(diào)用銀聯(lián)SDK,將TN號傳遞給銀聯(lián)SDK

6茬贵、 銀聯(lián)SDK向Apple公司的PASSKIT FRAMEWORK發(fā)起支付請求;

7、 接口返回加密的支付Token信息;

8-9移袍、銀聯(lián)SDK將支付Token傳遞給銀聯(lián)支付網(wǎng)關(guān),完成交易認(rèn)證;10-12解藻、銀聯(lián)將支付結(jié)果返回給商戶APP,商戶SERVER,商戶APP負(fù)責(zé)提示用戶交易結(jié)果。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末葡盗,一起剝皮案震驚了整個濱河市螟左,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌戳粒,老刑警劉巖路狮,帶你破解...
    沈念sama閱讀 218,284評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異蔚约,居然都是意外死亡奄妨,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,115評論 3 395
  • 文/潘曉璐 我一進(jìn)店門苹祟,熙熙樓的掌柜王于貴愁眉苦臉地迎上來砸抛,“玉大人,你說我怎么就攤上這事树枫≈北海” “怎么了?”我有些...
    開封第一講書人閱讀 164,614評論 0 354
  • 文/不壞的土叔 我叫張陵砂轻,是天一觀的道長奔誓。 經(jīng)常有香客問我,道長搔涝,這世上最難降的妖魔是什么厨喂? 我笑而不...
    開封第一講書人閱讀 58,671評論 1 293
  • 正文 為了忘掉前任和措,我火速辦了婚禮,結(jié)果婚禮上蜕煌,老公的妹妹穿的比我還像新娘派阱。我一直安慰自己,他們只是感情好斜纪,可當(dāng)我...
    茶點故事閱讀 67,699評論 6 392
  • 文/花漫 我一把揭開白布贫母。 她就那樣靜靜地躺著,像睡著了一般盒刚。 火紅的嫁衣襯著肌膚如雪腺劣。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,562評論 1 305
  • 那天伪冰,我揣著相機(jī)與錄音誓酒,去河邊找鬼。 笑死贮聂,一個胖子當(dāng)著我的面吹牛靠柑,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播吓懈,決...
    沈念sama閱讀 40,309評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼歼冰,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了耻警?” 一聲冷哼從身側(cè)響起隔嫡,我...
    開封第一講書人閱讀 39,223評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎甘穿,沒想到半個月后腮恩,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,668評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡温兼,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,859評論 3 336
  • 正文 我和宋清朗相戀三年秸滴,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片募判。...
    茶點故事閱讀 39,981評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡荡含,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出届垫,到底是詐尸還是另有隱情释液,我是刑警寧澤,帶...
    沈念sama閱讀 35,705評論 5 347
  • 正文 年R本政府宣布装处,位于F島的核電站误债,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜寝蹈,卻給世界環(huán)境...
    茶點故事閱讀 41,310評論 3 330
  • 文/蒙蒙 一糟袁、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧躺盛,春花似錦、人聲如沸形帮。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,904評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽辩撑。三九已至界斜,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間合冀,已是汗流浹背各薇。 一陣腳步聲響...
    開封第一講書人閱讀 33,023評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留君躺,地道東北人峭判。 一個月前我還...
    沈念sama閱讀 48,146評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像棕叫,于是被迫代替她去往敵國和親林螃。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,933評論 2 355

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