教育行業(yè)A股IPO第一股(股票代碼 003032)

全國(guó)咨詢/投訴熱線:400-618-4000

快速玩轉(zhuǎn)Apple Pay開(kāi)發(fā)

更新時(shí)間:2016年02月20日09時(shí)25分 來(lái)源:傳智播客 瀏覽次數(shù):

  Apple Pay

  2016年2月18日上午,蘋(píng)果公司宣布,與中國(guó)銀聯(lián)達(dá)成合作,正式在中國(guó)大陸上線Apple Pay服務(wù)。

  Apple Pay是一個(gè)基于NFC的支付系統(tǒng),幾乎所有的銀行都支持。不知道大家還有沒(méi)有印象,當(dāng)初支付寶和位置的支付剛出來(lái)的時(shí)候,銀行都恨不得想把他倆弄死。為啥Apple Pay一出來(lái)各大銀行都支持。因?yàn)樗椭Ц秾氈Ц?、微信支付是完全不同的概念。Apple Pay根本不是一個(gè)第三方支付工具。它僅僅是一種支付的表現(xiàn)形式。說(shuō)白了Apple Pay就是幫銀行刷卡而已。而支付寶和微信都是有自己的賬戶體系,甚至替代一部分銀聯(lián)功能。所以,各大銀行當(dāng)然會(huì)支持啦!

  重點(diǎn),我們還是來(lái)說(shuō)說(shuō)開(kāi)發(fā)。


  一 創(chuàng)建項(xiàng)目


  這一步其實(shí)沒(méi)什么好說(shuō)的。我們主要是為了要程序的bundle id。

  

  二 配置環(huán)境


  首先需要大家了解一個(gè)叫做merchant ID的東西,這是一個(gè)id,需要在官網(wǎng)上進(jìn)行配置。就和真機(jī)調(diào)試的時(shí)候配置證書(shū)一樣。注冊(cè)過(guò)后,就相當(dāng)于有了一個(gè)商人的身份。這樣你就可以使用這個(gè)商人的身份來(lái)接受付款。


  1)注冊(cè)一個(gè)merchant ID

  1.在Member Center,選擇Certificates, Identifiers & Profiles。

  2.在Identifiers下面,選擇“Merchant IDs”。

  3.單擊右上角的“添加”按鈕(+)。

  4.輸入描述和標(biāo)識(shí)符,然后單擊“繼續(xù)”。

  5.完成


  2)為你的merchant ID配置一個(gè)證書(shū)

  1.在Member Center,選擇Certificates, Identifiers & Profiles。

  2.在Identifiers下面,選擇“Merchant IDs”。

  3.單擊“編輯”。

  4.上傳CSR文件。(和真機(jī)調(diào)試一樣,通過(guò)鑰匙串生成)

  5.下載證書(shū)通過(guò)點(diǎn)擊下載,并點(diǎn)擊完成。


  三 添加項(xiàng)目對(duì)Apple Pay的支持


  1.打開(kāi)項(xiàng)目。

  2.選擇項(xiàng)目

  3.點(diǎn)擊Capabilities

  4.打開(kāi)Apple Pay的開(kāi)關(guān)

  5.并且勾選當(dāng)初注冊(cè)的merchant ID

  這個(gè)時(shí)候你應(yīng)該三個(gè)灰色的小對(duì)勾,如果你按照上面的步驟是沒(méi)問(wèn)題的。如果碰到輸入“diffrent strings”的字樣,就是你的某個(gè)ID被占用了。換個(gè)名字就行。


  四 代碼


  1)導(dǎo)入PassKit框架

  #import


  2)創(chuàng)建付款請(qǐng)求

  付款請(qǐng)求是 PKPaymentRequest 類的實(shí)例。付款請(qǐng)求包括所購(gòu)買(mǎi)的商品,用戶信息等等。

  在創(chuàng)建付款請(qǐng)求之前,確定用戶是否可以使用網(wǎng)絡(luò),通過(guò)調(diào)用 PKPaymentAuthorizationViewController 類中的 canMakePaymentsUsingNetworks: 的方法。確定用戶設(shè)備是否允許使用Apple Pay,通過(guò)調(diào)用 PKPaymentAuthorizationViewController 類中的 canMakePayments 方法

  如果 canMakePayments 返回 NO,那么說(shuō)明該設(shè)備不支持Apple Pay。

  如果 canMakePayments 返回 YES,但 canMakePaymentsUsingNetworks:返回 NO,設(shè)備支持蘋(píng)果支付,但用戶未添加任何所要求的銀行卡。

  PKPaymentRequest *request = [[PKPaymentRequest alloc] init];


  2.1)創(chuàng)建相關(guān)商品信息

  商品信息的關(guān)鍵類是 PKPaymentSummaryItem,每一個(gè)item對(duì)象都是一個(gè)商品信息,描述了一個(gè)商品和它的價(jià)格。通過(guò) PKPaymentSummaryItem 的類方法 summaryItemWithLabel:(NSString )label amount:(NSDecimalNumber )amount,可以創(chuàng)建出一個(gè)商品信息的實(shí)例。

  然后放入 request.paymentSummaryItems 數(shù)組當(dāng)中。數(shù)組中,最后的對(duì)象是總價(jià)。

  PKPaymentSummaryItem *good1 = [PKPaymentSummaryItem summaryItemWithLabel:@"HHKB professional 2" amount:[NSDecimalNumber decimalNumberWithString:@"1388"]]; PKPaymentSummaryItem *good2 = [PKPaymentSummaryItem summaryItemWithLabel:@"營(yíng)養(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)

  通過(guò)指定merchantCapabilities屬性來(lái)指定你支持的支付處理標(biāo)準(zhǔn),3DS支付方式是必須支持的,EMV方式是可選的。

  request.merchantCapabilities = PKMerchantCapabilityEMV;

  2.6)配送信息

  設(shè)置后,如果用戶之前沒(méi)有填寫(xiě)過(guò),那么會(huì)要求用戶必須填寫(xiě)才能夠使用Apple Pay。

  request.requiredShippingAddressFields = PKAddressFieldPostalAddress | PKAddressFieldPhone | PKAddressFieldEmail | PKAddressFieldName;


  3)創(chuàng)建用來(lái)顯示支付信息的控制器

  這個(gè)專門(mén)用來(lái)顯示支付’息的控制器是 PKPaymentAuthorizationViewController 類的實(shí)例??梢栽诔跏蓟椒ㄖ袀魅胍粋€(gè)付款請(qǐng)求。然后使用modal的方式顯示出來(lái)即可。

  PKPaymentAuthorizationViewController *paymentPane = [[PKPaymentAuthorizationViewController alloc] initWithPaymentRequest:request]; [self presentViewController:paymentPane animated:YES completion:nil];


  3.1)為顯示支付信息的控制器設(shè)置代理

  遵守 PKPaymentAuthorizationViewControllerDelegate 協(xié)議,然后設(shè)置代理。

  paymentPane.delegate = self;

  這個(gè)協(xié)議中與兩個(gè)required的方法。

  - (void)paymentAuthorizationViewControllerDidFinish:(PKPaymentAuthorizationViewController *)controller { [self dismissViewControllerAnimated:YES completion:nil]; }

  這個(gè)方法在支付結(jié)束和點(diǎn)擊取消的時(shí)候調(diào)用,所有直接寫(xiě)上dismiss就可以了。

  - (void) paymentAuthorizationViewController:(PKPaymentAuthorizationViewController *)controller didAuthorizePayment:(PKPayment *)payment completion:(void (^)(PKPaymentAuthorizationStatus))completion { completion(PKPaymentAuthorizationStatusSuccess); }

  用戶發(fā)送付款請(qǐng)求后會(huì)調(diào)用該方法。在這個(gè)方法中發(fā)送相關(guān)的支付信息到你的服務(wù)器,最后通過(guò)服務(wù)器來(lái)處理。如果服務(wù)期處理成功,那么需要調(diào)用 completion 的block 并且傳入 PKPaymentAuthorizationStatusSuccess 的標(biāo)記即可。如果服務(wù)器處理不成功,那么傳一個(gè)其他的標(biāo)記就可以了。

  

0 分享到:
和我們?cè)诰€交談!