更新時間:2016年02月20日09時25分 來源:傳智播客html
2016年2月18日上午,蘋果公司宣佈,與中國銀聯達成合做,正式在中國大陸上線Apple Pay服務。數組
Apple Pay是一個基於NFC的支付系統,幾乎全部的銀行都支持。不知道你們還有沒有印象,當初支付寶和位置的支付剛出來的時候,銀行都巴不得想把他倆弄死。爲啥Apple Pay一出來各大銀行都支持。由於它和支付寶支付、微信支付是徹底不一樣的概念。Apple Pay根本不是一個第三方支付工具。它僅僅是一種支付的表現形式。說白了Apple Pay就是幫銀行刷卡而已。而支付寶和微信都是有本身的帳戶體系,甚至替代一部分銀聯功能。因此,各大銀行固然會支持啦!服務器
重點,咱們仍是來講說開發。微信
一 建立項目網絡
這一步其實沒什麼好說的。咱們主要是爲了要程序的bundle id。框架
二 配置環境工具
首先須要你們瞭解一個叫作merchant ID的東西,這是一個id,須要在官網上進行配置。就和真機調試的時候配置證書同樣。註冊事後,就至關於有了一個商人的身份。這樣你就能夠使用這個商人的身份來接受付款。微信支付
1)註冊一個merchant IDui
1.在Member Center,選擇Certificates, Identifiers & Profiles。代理
2.在Identifiers下面,選擇「Merchant IDs」。
3.單擊右上角的「添加」按鈕(+)。
4.輸入描述和標識符,而後單擊「繼續」。
5.完成
2)爲你的merchant ID配置一個證書
1.在Member Center,選擇Certificates, Identifiers & Profiles。
2.在Identifiers下面,選擇「Merchant IDs」。
3.單擊「編輯」。
4.上傳CSR文件。(和真機調試同樣,經過鑰匙串生成)
5.下載證書經過點擊下載,並點擊完成。
三 添加項目對Apple Pay的支持
1.打開項目。
2.選擇項目
3.點擊Capabilities
4.打開Apple Pay的開關
5.而且勾選當初註冊的merchant ID
這個時候你應該三個灰色的小對勾,若是你按照上面的步驟是沒問題的。若是碰到輸入「diffrent strings」的字樣,就是你的某個ID被佔用了。換個名字就行。
四 代碼
1)導入PassKit框架
#import
2)建立付款請求
付款請求是 PKPaymentRequest 類的實例。付款請求包括所購買的商品,用戶信息等等。
在建立付款請求以前,肯定用戶是否能夠使用網絡,經過調用 PKPaymentAuthorizationViewController 類中的 canMakePaymentsUsingNetworks: 的方法。肯定用戶設備是否容許使用Apple Pay,經過調用 PKPaymentAuthorizationViewController 類中的 canMakePayments 方法
若是 canMakePayments 返回 NO,那麼說明該設備不支持Apple Pay。
若是 canMakePayments 返回 YES,但 canMakePaymentsUsingNetworks:返回 NO,設備支持蘋果支付,但用戶未添加任何所要求的銀行卡。
PKPaymentRequest *request = [[PKPaymentRequest alloc] init];
2.1)建立相關商品信息
商品信息的關鍵類是 PKPaymentSummaryItem,每個item對象都是一個商品信息,描述了一個商品和它的價格。經過 PKPaymentSummaryItem 的類方法 summaryItemWithLabel:(NSString )label amount:(NSDecimalNumber )amount,能夠建立出一個商品信息的實例。
而後放入 request.paymentSummaryItems 數組當中。數組中,最後的對象是總價。
PKPaymentSummaryItem *good1 = [PKPaymentSummaryItem summaryItemWithLabel:@"HHKB professional 2" amount:[NSDecimalNumber decimalNumberWithString:@"1388"]]; PKPaymentSummaryItem *good2 = [PKPaymentSummaryItem summaryItemWithLabel:@"養分快線" amount:[NSDecimalNumber decimalNumberWithString:@"4"]]; PKPaymentSummaryItem *total = [PKPaymentSummaryItem summaryItemWithLabel:@"德瑪西亞" amount:[NSDecimalNumber decimalNumberWithString:@"1392"]]; request.paymentSummaryItems = @[ good1, good2, total ];
2.2)貨幣單位
貨幣單位須要使用
request.currencyCode = @"CNY」;(人民幣)
2.3)Wallet所綁定的卡的類型
request.supportedNetworks = @[ PKPaymentNetworkMasterCard, PKPaymentNetworkVisa, PKPaymentNetworkChinaUnionPay ];
2.4)merchant ID
request.merchantIdentifier = @"merchant.cn.itcast.ITCASTPayDemo";
2.5)支付處理標準
經過指定merchantCapabilities屬性來指定你支持的支付處理標準,3DS支付方式是必須支持的,EMV方式是可選的。
request.merchantCapabilities = PKMerchantCapabilityEMV;
2.6)配送信息
設置後,若是用戶以前沒有填寫過,那麼會要求用戶必須填寫纔可以使用Apple Pay。
request.requiredShippingAddressFields = PKAddressFieldPostalAddress | PKAddressFieldPhone | PKAddressFieldEmail | PKAddressFieldName;
3)建立用來顯示支付信息的控制器
這個專門用來顯示支付’息的控制器是 PKPaymentAuthorizationViewController 類的實例。能夠在初始化方法中傳入一個付款請求。而後使用modal的方式顯示出來便可。
PKPaymentAuthorizationViewController *paymentPane = [[PKPaymentAuthorizationViewController alloc] initWithPaymentRequest:request]; [self presentViewController:paymentPane animated:YES completion:nil];
3.1)爲顯示支付信息的控制器設置代理
遵照 PKPaymentAuthorizationViewControllerDelegate 協議,而後設置代理。
paymentPane.delegate = self;
這個協議中與兩個required的方法。
- (void)paymentAuthorizationViewControllerDidFinish:(PKPaymentAuthorizationViewController *)controller { [self dismissViewControllerAnimated:YES completion:nil]; }
這個方法在支付結束和點擊取消的時候調用,全部直接寫上dismiss就能夠了。
- (void) paymentAuthorizationViewController:(PKPaymentAuthorizationViewController *)controller didAuthorizePayment:(PKPayment *)payment completion:(void (^)(PKPaymentAuthorizationStatus))completion { completion(PKPaymentAuthorizationStatusSuccess); }
用戶發送付款請求後會調用該方法。在這個方法中發送相關的支付信息到你的服務器,最後經過服務器來處理。若是服務期處理成功,那麼須要調用 completion 的block 而且傳入 PKPaymentAuthorizationStatusSuccess 的標記便可。若是服務器處理不成功,那麼傳一個其餘的標記就能夠了。