2016年2月18日凌晨5:00,Apple Pay業(yè)務在中國上線。雖然毀譽參半,但是不得不承認國內很多的公司和商家已經開通了Apple Pay的這個事實。
ApplePay開發(fā)流程
配置證書
App ID
1.首先我們需要創(chuàng)建一個App ID蝴韭,登錄蘋果開發(fā)者中心,選擇創(chuàng)建一個App ID熙侍。
2.點擊“+”添加一個App ID榄鉴。填寫App ID Description,和Bundle ID蛉抓。
3.這里我們要實現Apple Pay的相關功能庆尘,所以我們接下來要勾選一下Apple Pay這一選項。
4.點擊Continue繼續(xù)下一步我們會看到Apple Pay的狀態(tài)還是黃色的(Configurable)巷送。
Merchant ID
1.創(chuàng)建Merchant ID驶忌,這里我們需要創(chuàng)建一個商業(yè)ID。
2.同樣的填寫Description笑跛,這里還需要填寫一個identifier付魔,這個ID必須是以merchant開頭。
3.點擊下一步就行了飞蹂。
配置App ID
1.這個時候我們回到App IDs選項卡下找到我們剛剛創(chuàng)建的App ID几苍。點擊選擇編輯選項。
2.這個時候下拉我們就可一看到Apple Pay選項 勾選并點擊Edit按鈕陈哑,進入編輯頁面妻坝。
3.選擇我們剛剛創(chuàng)建的Merchant ID然后Continue妖胀。
創(chuàng)建證書
1.回到Merchant ID 點擊選擇YES選項。
2.下一步惠勒,我們可以看到這時候需要一個證書。
3.那么創(chuàng)建一個證書爬坑。打開鑰匙串纠屋。
4.點擊狀態(tài)欄的鑰匙串,選擇證書助理選項盾计,從證書頒發(fā)機構請求證書售担。
5.創(chuàng)建,選擇存儲到磁盤署辉。保存到一個容易找到的位置族铆。
6.選擇剛剛創(chuàng)建的證書文件上傳,并點擊下一步哭尝。
7.我們就可以看到Your certificate is ready說明我們的證書已經創(chuàng)建好了哥攘。我們點擊download下載就好了。
8.到這里我們的證書部分就已經配置好了材鹦。
代碼
1.創(chuàng)建一個工程設置其Bundle ID 必須和描述文件中的Bundle ID一致逝淹。
2.在Capability標簽中把ApplePay選項打開,并且將Merchant ID選中桶唐,
3.在工程中導入對應的頭文件PassKit/PassKit.h 和AddressBook/AddressBook.h栅葡,并且遵循PKPaymentAuthorizationViewControllerDelegate協議。
#import <PassKit/PassKit.h>
#import <AddressBook/AddressBook.h>
@interface ViewController ()<PKPaymentAuthorizationViewControllerDelegate>
4.支付響應事件
// 點擊支付響應事件
- (IBAction)payAction:(UIButton *)sender {
// 訂單請求對象
PKPaymentRequest *pkPayment = [[PKPaymentRequest alloc]init];
// 商品訂單信息對象
PKPaymentSummaryItem *item1 = [PKPaymentSummaryItem summaryItemWithLabel:@"BMW" amount:[NSDecimalNumber decimalNumberWithString:@"100"]];
PKPaymentSummaryItem *item2 = [PKPaymentSummaryItem summaryItemWithLabel:@"BenZ" amount:[NSDecimalNumber decimalNumberWithString:@"200"]];
PKPaymentSummaryItem *item3 = [PKPaymentSummaryItem summaryItemWithLabel:@"Audi" amount:[NSDecimalNumber decimalNumberWithString:@"300"]];
pkPayment.paymentSummaryItems = @[item1,item2,item3];
// 指定國家和地區(qū)編碼
pkPayment.countryCode = @"CN";
// 指定國家貨幣種類
pkPayment.currencyCode = @"CNY";
// 指定的支持的網上銀行支付方法
pkPayment.supportedNetworks = @[PKPaymentNetworkVisa,PKPaymentNetworkChinaUnionPay,PKPaymentNetworkMasterCard];
// 指定APP需要的商業(yè)ID
pkPayment.merchantIdentifier = @"merchant.com.coderqiao.applepay.pay01";
// 指定支付的權限的范圍限制
pkPayment.merchantCapabilities = PKMerchantCapabilityEMV;
// 指定訂單接受的地址
pkPayment.requiredBillingAddressFields = PKAddressFieldEmail | PKAddressFieldPostalAddress;
// 支付界面顯示對象
PKPaymentAuthorizationViewController *pvc = [[PKPaymentAuthorizationViewController alloc]initWithPaymentRequest:pkPayment];
pvc.delegate = self;
if (!pvc) {
NSLog(@"有問題,請查看");
@throw [NSException exceptionWithName:@"QQ_Error" reason:@"有問題,請查看" userInfo:nil];
}else {
[self presentViewController:pvc animated:YES completion:nil];
}
}
5.支付回調方法
/ 在支付的過程中進行調用,直接影響支付結果在界面上的顯示
// payment代表支付對象,支付相關的信息,存在與這個對象 1.token 2.address
// completion是一個回調block,里面?zhèn)鬟f的參數直接影響界面結果的顯示
- (void)paymentAuthorizationViewController:(PKPaymentAuthorizationViewController *)controller
didAuthorizePayment:(PKPayment *)payment
completion:(void (^)(PKPaymentAuthorizationStatus status))completion{
// 拿到token
PKPaymentToken *token = payment.token;
NSString *city = payment.billingContact.postalAddress.city;
NSLog(@"city:%@",city);
// 將token和city地址發(fā)送到自己的服務器,有自己的服務器與銀行和商家進行接口調用和支付,將結構返回到這里
// 根據結果生成對應的狀態(tài)對象,根據狀態(tài)對象,顯示不同的支付結果
// 狀態(tài)對象
PKPaymentAuthorizationStatus status = PKPaymentAuthorizationStatusSuccess;
completion(status);
}
// 當支付過程完成的時候調用
- (void)paymentAuthorizationViewControllerDidFinish:(PKPaymentAuthorizationViewController *)controller{
[controller dismissViewControllerAnimated:YES completion:nil];
}