APP支付之使用ApplePay支付开发步骤
最近蘋(píng)果推出了一種新的支付方式–ApplePay支付,雖然毀譽(yù)參半,但是不得不承認(rèn)國(guó)內(nèi)很多的公司還有商家已經(jīng)開(kāi)通了ApplePay,可能最先鋒的莫過(guò)于肯德基和招商銀行了。拋開(kāi)優(yōu)劣與否不說(shuō),作為一個(gè)開(kāi)發(fā)者自然要第一時(shí)間把ApplePay搞懂搞通,用不用再另說(shuō)。
ApplePay的支付流程
在具體去進(jìn)行每一步操作的時(shí)候一定要先了解一下ApplePay的具體的操作流程。
這里是官方給出的開(kāi)發(fā)者文檔。所有的流程步驟還有邏輯流程都可以在這里找到答案。
開(kāi)發(fā)者傳送門(mén)
使用ApplePay開(kāi)發(fā)同樣的需要一個(gè)商戶ID,開(kāi)通權(quán)限,然后根據(jù)需求拼接支付請(qǐng)求。Apple Pay會(huì)對(duì)支付信息進(jìn)行加密處理,以防止未獲授權(quán)的第三方獲取用戶的支付信息。剩下的就是在自己的服務(wù)器上進(jìn)行支付流程和處理了。
ApplePay的開(kāi)發(fā)流程
1 獲取證書(shū)
詳細(xì)的官方指導(dǎo)可以參考這里
蘋(píng)果證書(shū)幫助
習(xí)慣了蘋(píng)果開(kāi)發(fā)的人一定會(huì)料到,新的蘋(píng)果支付一定是需要一個(gè)新的證書(shū)的,沒(méi)錯(cuò),需要?jiǎng)?chuàng)建一個(gè)新的商業(yè)證書(shū)。
選擇右側(cè)的[Merchant IDs],點(diǎn)擊右上角的添加。
點(diǎn)擊continue
點(diǎn)擊register
現(xiàn)在新添加的Merchant ID已經(jīng)顯示出來(lái)了,可以添加到列表里了。
將剛剛添加的MerchantID選中,選擇編輯。
將選項(xiàng)改為Yes,點(diǎn)Continue。再繼續(xù)Continue。然后會(huì)需要上傳一個(gè)證書(shū)。這個(gè)時(shí)候來(lái)到本地打開(kāi)鑰匙串,生成本地證書(shū),我這里直接貼每一步的截圖了。
將生成的證書(shū)放到桌面上。
選擇剛才創(chuàng)建的證書(shū)進(jìn)行上傳,并且點(diǎn)擊生成。
選擇描述文件選項(xiàng),創(chuàng)建一個(gè)描述文件,然后點(diǎn)開(kāi)他的詳細(xì)信息,點(diǎn)擊編輯。
確認(rèn)ApplePay的兩個(gè)選項(xiàng)都是enable。如果不是,點(diǎn)擊edit將其勾選上。
生成對(duì)應(yīng)的描述文件,在本地運(yùn)行添加到鑰匙串中。
2 工程配置
創(chuàng)建一個(gè)新工程,需要注意兩點(diǎn):
1 在BuildIdentifier中設(shè)置的必須和描述文件一樣。
2 在Capability標(biāo)簽中把ApplePay選項(xiàng)打開(kāi),并且將MerchantIDs選中,如下圖
3 代碼編寫(xiě)
1 導(dǎo)入頭文件
導(dǎo)入需要的框架對(duì)應(yīng)的頭文件PassKit/PassKit.h 和AddressBook/AddressBook.h,并且遵循PKPaymentAuthorizationViewControllerDelegate
| 1 2 3 | #import <PassKit/PassKit.h> #import <AddressBook/AddressBook.h> @interface ViewController ()<PKPaymentAuthorizationViewControllerDelegate> |
2 處理支付頁(yè)面
支付界面都是采用的PKPaymentAuthorizationViewController,每一條支付信息可以采用PKPaymentSummaryItem來(lái)進(jìn)行編輯,最后調(diào)用蘋(píng)果支付的時(shí)候就是調(diào)用的這個(gè)頁(yè)面。
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 | - (IBAction)payAction:(UIButton *)sender { if([PKPaymentAuthorizationViewController canMakePayments]) { NSLog(@"支持支付"); // 我們后面創(chuàng)建出來(lái)的支付頁(yè)面就是根據(jù)這個(gè)request PKPaymentRequest *request = [[PKPaymentRequest alloc] init]; // 商品目錄 PKPaymentSummaryItem *widget1 = [PKPaymentSummaryItem summaryItemWithLabel:@"麻辣燙" amount:[NSDecimalNumber decimalNumberWithString:@"0.01"]]; PKPaymentSummaryItem *widget2 = [PKPaymentSummaryItem summaryItemWithLabel:@"肯德基" amount:[NSDecimalNumber decimalNumberWithString:@"0.01"]]; PKPaymentSummaryItem *widget3 = [PKPaymentSummaryItem summaryItemWithLabel:@"海鮮大餐" amount:[NSDecimalNumber decimalNumberWithString:@"0.02"]]; PKPaymentSummaryItem *widget4 = [PKPaymentSummaryItem summaryItemWithLabel:@"coderqi" amount:[NSDecimalNumber decimalNumberWithString:@"0.03"] type:PKPaymentSummaryItemTypeFinal]; request.paymentSummaryItems = @[widget1, widget2, widget3, widget4]; // request.countryCode = @"CN"; // request.currencyCode = @"CNY";//人民幣 request.countryCode = @"US"; request.currencyCode = @"USD"; request.supportedNetworks = @[PKPaymentNetworkChinaUnionPay, PKPaymentNetworkMasterCard, PKPaymentNetworkVisa]; // 這里填的是就是我們創(chuàng)建的merchat IDs request.merchantIdentifier = @"merchant.com.coderqi.applepay.pay"; request.merchantCapabilities = PKMerchantCapabilityEMV; //增加郵箱及地址信息 request.requiredBillingAddressFields = PKAddressFieldEmail | PKAddressFieldPostalAddress; // 根據(jù)request去創(chuàng)建支付頁(yè)面 PKPaymentAuthorizationViewController *paymentPane = [[PKPaymentAuthorizationViewController alloc] initWithPaymentRequest:request]; // 設(shè)置代理 paymentPane.delegate = self; if (!paymentPane) { NSLog(@"出問(wèn)題了"); } else { // 模態(tài)推出頁(yè)面 [self presentViewController:paymentPane animated:YES completion:nil]; } } else { NSLog(@"該設(shè)備不支持支付"); } } |
3 編寫(xiě)代理回調(diào)
接下來(lái)就是代理回調(diào)的處理,服務(wù)器接收到了我們的請(qǐng)求之后收到返回信息會(huì)調(diào)用對(duì)應(yīng)的方法。
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 | #pragma mark ----支付狀態(tài) - (void)paymentAuthorizationViewController:(PKPaymentAuthorizationViewController *)controller didAuthorizePayment:(PKPayment *)payment completion:(void (^)(PKPaymentAuthorizationStatus status))completion{ /* //這是老版,已過(guò)時(shí) NSError *error; ABMultiValueRef addressMultiValue = ABRecordCopyValue(payment.billingAddress ,kABPersonAddressProperty); NSDictionary?*addressDictionary?=?(__bridge_transfer?NSDictionary?*) ABMultiValueCopyValueAtIndex(addressMultiValue,?0); //這里模擬取出地址里的每一個(gè)信息。 NSLog(@"%@",addressDictionary[@"State"]); NSData *json = [NSJSONSerialization dataWithJSONObject:addressDictionary options:NSJSONWritingPrettyPrinted error: &error]; //?這里需要將Token和地址信息發(fā)送到自己的服務(wù)器上,進(jìn)行訂單處理,處理之后,根據(jù)自己的服務(wù)器返回的結(jié)果調(diào)用completion()代碼塊,根據(jù)傳進(jìn)去的參數(shù)界面的顯示結(jié)果會(huì)不同 PKPaymentAuthorizationStatus status; //?From?your?server completion(status); */ //這是新版 //拿到token, PKPaymentToken *token = payment.token; //拿到訂單地址 NSString *city = payment.billingContact.postalAddress.city; NSLog(@"city:%@",city); ///在這里將token和地址發(fā)送到自己的服務(wù)器,有自己的服務(wù)器與銀行和商家進(jìn)行接口調(diào)用和支付將結(jié)果返回到這里 //我們根據(jù)結(jié)果生成對(duì)應(yīng)的狀態(tài)對(duì)象,根據(jù)狀態(tài)對(duì)象顯示不同的支付結(jié)構(gòu) //狀態(tài)對(duì)象 PKPaymentAuthorizationStatus status = PKPaymentAuthorizationStatusFailure; completion(status); } #pragma mark ----支付完成 - (void)paymentAuthorizationViewControllerDidFinish:(PKPaymentAuthorizationViewController *)controller { // 支付完成后讓支付頁(yè)面消失 [controller dismissViewControllerAnimated:YES completion:nil]; } |
好了,到這里就完事兒了。
最后,將工程的代碼貼在后邊,各位看官可以隨意下載。
代碼Demo。
附贈(zèng)鄙人錄得視頻地址:
優(yōu)酷:http://v.youku.com/v_show/id_XMTQ4Njk0NTE2MA==.html
總結(jié)
以上是生活随笔為你收集整理的APP支付之使用ApplePay支付开发步骤的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Java人力资源管理系统源码 HR源码
- 下一篇: 黑科技之机器人外骨骼