更新時間:2016年02月20日09時25分 來源:傳智播客 瀏覽次數(shù):
2016年2月18日上午,蘋果公司宣布,與中國銀聯(lián)達成合作,正式在中國大陸上線Apple Pay服務(wù)。
Apple Pay是一個基于NFC的支付系統(tǒng),幾乎所有的銀行都支持。不知道大家還有沒有印象,當(dāng)初支付寶和位置的支付剛出來的時候,銀行都恨不得想把他倆弄死。為啥Apple Pay一出來各大銀行都支持。因為它和支付寶支付、微信支付是完全不同的概念。Apple Pay根本不是一個第三方支付工具。它僅僅是一種支付的表現(xiàn)形式。說白了Apple Pay就是幫銀行刷卡而已。而支付寶和微信都是有自己的賬戶體系,甚至替代一部分銀聯(lián)功能。所以,各大銀行當(dāng)然會支持啦!
重點,我們還是來說說開發(fā)。
一 創(chuàng)建項目
這一步其實沒什么好說的。我們主要是為了要程序的bundle id。
二 配置環(huán)境
首先需要大家了解一個叫做merchant ID的東西,這是一個id,需要在官網(wǎng)上進行配置。就和真機調(diào)試的時候配置證書一樣。注冊過后,就相當(dāng)于有了一個商人的身份。這樣你就可以使用這個商人的身份來接受付款。
1)注冊一個merchant ID
1.在Member Center,選擇Certificates, Identifiers & Profiles。
2.在Identifiers下面,選擇“Merchant IDs”。
3.單擊右上角的“添加”按鈕(+)。
4.輸入描述和標(biāo)識符,然后單擊“繼續(xù)”。
5.完成
2)為你的merchant ID配置一個證書
1.在Member Center,選擇Certificates, Identifiers & Profiles。
2.在Identifiers下面,選擇“Merchant IDs”。
3.單擊“編輯”。
4.上傳CSR文件。(和真機調(diào)試一樣,通過鑰匙串生成)
5.下載證書通過點擊下載,并點擊完成。
三 添加項目對Apple Pay的支持
1.打開項目。
2.選擇項目
3.點擊Capabilities
4.打開Apple Pay的開關(guān)
5.并且勾選當(dāng)初注冊的merchant ID
這個時候你應(yīng)該三個灰色的小對勾,如果你按照上面的步驟是沒問題的。如果碰到輸入“diffrent strings”的字樣,就是你的某個ID被占用了。換個名字就行。
四 代碼
1)導(dǎo)入PassKit框架
#import
2)創(chuàng)建付款請求
付款請求是 PKPaymentRequest 類的實例。付款請求包括所購買的商品,用戶信息等等。
在創(chuàng)建付款請求之前,確定用戶是否可以使用網(wǎng)絡(luò),通過調(diào)用 PKPaymentAuthorizationViewController 類中的 canMakePaymentsUsingNetworks: 的方法。確定用戶設(shè)備是否允許使用Apple Pay,通過調(diào)用 PKPaymentAuthorizationViewController 類中的 canMakePayments 方法
如果 canMakePayments 返回 NO,那么說明該設(shè)備不支持Apple Pay。
如果 canMakePayments 返回 YES,但 canMakePaymentsUsingNetworks:返回 NO,設(shè)備支持蘋果支付,但用戶未添加任何所要求的銀行卡。
PKPaymentRequest *request = [[PKPaymentRequest alloc] init];
2.1)創(chuàng)建相關(guān)商品信息
商品信息的關(guān)鍵類是 PKPaymentSummaryItem,每一個item對象都是一個商品信息,描述了一個商品和它的價格。通過 PKPaymentSummaryItem 的類方法 summaryItemWithLabel:(NSString )label amount:(NSDecimalNumber )amount,可以創(chuàng)建出一個商品信息的實例。
然后放入 request.paymentSummaryItems 數(shù)組當(dāng)中。數(shù)組中,最后的對象是總價。
PKPaymentSummaryItem *good1 = [PKPaymentSummaryItem summaryItemWithLabel:@"HHKB professional 2" amount:[NSDecimalNumber decimalNumberWithString:@"1388"]]; PKPaymentSummaryItem *good2 = [PKPaymentSummaryItem summaryItemWithLabel:@"營養(yǎng)快線" 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)支付處理標(biāo)準(zhǔn)
通過指定merchantCapabilities屬性來指定你支持的支付處理標(biāo)準(zhǔn),3DS支付方式是必須支持的,EMV方式是可選的。
request.merchantCapabilities = PKMerchantCapabilityEMV;
2.6)配送信息
設(shè)置后,如果用戶之前沒有填寫過,那么會要求用戶必須填寫才能夠使用Apple Pay。
request.requiredShippingAddressFields = PKAddressFieldPostalAddress | PKAddressFieldPhone | PKAddressFieldEmail | PKAddressFieldName;
3)創(chuàng)建用來顯示支付信息的控制器
這個專門用來顯示支付’息的控制器是 PKPaymentAuthorizationViewController 類的實例??梢栽诔跏蓟椒ㄖ袀魅胍粋€付款請求。然后使用modal的方式顯示出來即可。
PKPaymentAuthorizationViewController *paymentPane = [[PKPaymentAuthorizationViewController alloc] initWithPaymentRequest:request]; [self presentViewController:paymentPane animated:YES completion:nil];
3.1)為顯示支付信息的控制器設(shè)置代理
遵守 PKPaymentAuthorizationViewControllerDelegate 協(xié)議,然后設(shè)置代理。
paymentPane.delegate = self;
這個協(xié)議中與兩個required的方法。
- (void)paymentAuthorizationViewControllerDidFinish:(PKPaymentAuthorizationViewController *)controller { [self dismissViewControllerAnimated:YES completion:nil]; }
這個方法在支付結(jié)束和點擊取消的時候調(diào)用,所有直接寫上dismiss就可以了。
- (void) paymentAuthorizationViewController:(PKPaymentAuthorizationViewController *)controller didAuthorizePayment:(PKPayment *)payment completion:(void (^)(PKPaymentAuthorizationStatus))completion { completion(PKPaymentAuthorizationStatusSuccess); }
用戶發(fā)送付款請求后會調(diào)用該方法。在這個方法中發(fā)送相關(guān)的支付信息到你的服務(wù)器,最后通過服務(wù)器來處理。如果服務(wù)期處理成功,那么需要調(diào)用 completion 的block 并且傳入 PKPaymentAuthorizationStatusSuccess 的標(biāo)記即可。如果服務(wù)器處理不成功,那么傳一個其他的標(biāo)記就可以了。