APP支付之使用ApplePay支付开发步骤
最近蘋果推出了一種新的支付方式–ApplePay支付,雖然毀譽參半,但是不得不承認國內很多的公司還有商家已經開通了ApplePay,可能最先鋒的莫過于肯德基和招商銀行了。拋開優劣與否不說,作為一個開發者自然要第一時間把ApplePay搞懂搞通,用不用再另說。
ApplePay的支付流程
在具體去進行每一步操作的時候一定要先了解一下ApplePay的具體的操作流程。
這里是官方給出的開發者文檔。所有的流程步驟還有邏輯流程都可以在這里找到答案。
開發者傳送門
使用ApplePay開發同樣的需要一個商戶ID,開通權限,然后根據需求拼接支付請求。Apple Pay會對支付信息進行加密處理,以防止未獲授權的第三方獲取用戶的支付信息。剩下的就是在自己的服務器上進行支付流程和處理了。
ApplePay的開發流程
1 獲取證書
詳細的官方指導可以參考這里
蘋果證書幫助
習慣了蘋果開發的人一定會料到,新的蘋果支付一定是需要一個新的證書的,沒錯,需要創建一個新的商業證書。
選擇右側的[Merchant IDs],點擊右上角的添加。
點擊continue
點擊register
現在新添加的Merchant ID已經顯示出來了,可以添加到列表里了。
將剛剛添加的MerchantID選中,選擇編輯。
將選項改為Yes,點Continue。再繼續Continue。然后會需要上傳一個證書。這個時候來到本地打開鑰匙串,生成本地證書,我這里直接貼每一步的截圖了。
將生成的證書放到桌面上。
選擇剛才創建的證書進行上傳,并且點擊生成。
選擇描述文件選項,創建一個描述文件,然后點開他的詳細信息,點擊編輯。
確認ApplePay的兩個選項都是enable。如果不是,點擊edit將其勾選上。
生成對應的描述文件,在本地運行添加到鑰匙串中。
2 工程配置
創建一個新工程,需要注意兩點:
1 在BuildIdentifier中設置的必須和描述文件一樣。
2 在Capability標簽中把ApplePay選項打開,并且將MerchantIDs選中,如下圖
3 代碼編寫
1 導入頭文件
導入需要的框架對應的頭文件PassKit/PassKit.h 和AddressBook/AddressBook.h,并且遵循PKPaymentAuthorizationViewControllerDelegate
| 1 2 3 | #import <PassKit/PassKit.h> #import <AddressBook/AddressBook.h> @interface ViewController ()<PKPaymentAuthorizationViewControllerDelegate> |
2 處理支付頁面
支付界面都是采用的PKPaymentAuthorizationViewController,每一條支付信息可以采用PKPaymentSummaryItem來進行編輯,最后調用蘋果支付的時候就是調用的這個頁面。
| 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(@"支持支付"); // 我們后面創建出來的支付頁面就是根據這個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]; // 這里填的是就是我們創建的merchat IDs request.merchantIdentifier = @"merchant.com.coderqi.applepay.pay"; request.merchantCapabilities = PKMerchantCapabilityEMV; //增加郵箱及地址信息 request.requiredBillingAddressFields = PKAddressFieldEmail | PKAddressFieldPostalAddress; // 根據request去創建支付頁面 PKPaymentAuthorizationViewController *paymentPane = [[PKPaymentAuthorizationViewController alloc] initWithPaymentRequest:request]; // 設置代理 paymentPane.delegate = self; if (!paymentPane) { NSLog(@"出問題了"); } else { // 模態推出頁面 [self presentViewController:paymentPane animated:YES completion:nil]; } } else { NSLog(@"該設備不支持支付"); } } |
3 編寫代理回調
接下來就是代理回調的處理,服務器接收到了我們的請求之后收到返回信息會調用對應的方法。
| 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 ----支付狀態 - (void)paymentAuthorizationViewController:(PKPaymentAuthorizationViewController *)controller didAuthorizePayment:(PKPayment *)payment completion:(void (^)(PKPaymentAuthorizationStatus status))completion{ /* //這是老版,已過時 NSError *error; ABMultiValueRef addressMultiValue = ABRecordCopyValue(payment.billingAddress ,kABPersonAddressProperty); NSDictionary?*addressDictionary?=?(__bridge_transfer?NSDictionary?*) ABMultiValueCopyValueAtIndex(addressMultiValue,?0); //這里模擬取出地址里的每一個信息。 NSLog(@"%@",addressDictionary[@"State"]); NSData *json = [NSJSONSerialization dataWithJSONObject:addressDictionary options:NSJSONWritingPrettyPrinted error: &error]; //?這里需要將Token和地址信息發送到自己的服務器上,進行訂單處理,處理之后,根據自己的服務器返回的結果調用completion()代碼塊,根據傳進去的參數界面的顯示結果會不同 PKPaymentAuthorizationStatus status; //?From?your?server completion(status); */ //這是新版 //拿到token, PKPaymentToken *token = payment.token; //拿到訂單地址 NSString *city = payment.billingContact.postalAddress.city; NSLog(@"city:%@",city); ///在這里將token和地址發送到自己的服務器,有自己的服務器與銀行和商家進行接口調用和支付將結果返回到這里 //我們根據結果生成對應的狀態對象,根據狀態對象顯示不同的支付結構 //狀態對象 PKPaymentAuthorizationStatus status = PKPaymentAuthorizationStatusFailure; completion(status); } #pragma mark ----支付完成 - (void)paymentAuthorizationViewControllerDidFinish:(PKPaymentAuthorizationViewController *)controller { // 支付完成后讓支付頁面消失 [controller dismissViewControllerAnimated:YES completion:nil]; } |
好了,到這里就完事兒了。
最后,將工程的代碼貼在后邊,各位看官可以隨意下載。
代碼Demo。
附贈鄙人錄得視頻地址:
優酷:http://v.youku.com/v_show/id_XMTQ4Njk0NTE2MA==.html
總結
以上是生活随笔為你收集整理的APP支付之使用ApplePay支付开发步骤的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Java人力资源管理系统源码 HR源码
- 下一篇: 黑科技之机器人外骨骼