iOS开发之ApplePay体验
2016年2月18日凌晨5:00,Apple Pay业务在中国上线。虽然毁誉参半,但是不得不承认国内很多的公司和商家已经开通了Apple Pay的这个事实。
ApplePay开发流程
配置证书
App ID
1.首先我们需要创建一个App ID,登录苹果开发者中心,选择创建一个App ID。
![](https://img.haomeiwen.com/i1230517/a42b9b64b9d7e190.png)
2.点击“+”添加一个App ID。填写App ID Description,和Bundle ID。
![](https://img.haomeiwen.com/i1230517/bd124547e8c067a2.png)
3.这里我们要实现Apple Pay的相关功能,所以我们接下来要勾选一下Apple Pay这一选项。
![](https://img.haomeiwen.com/i1230517/f229d9913dd26dfc.png)
4.点击Continue继续下一步我们会看到Apple Pay的状态还是黄色的(Configurable)。
![](https://img.haomeiwen.com/i1230517/b272422328da2d40.png)
Merchant ID
1.创建Merchant ID,这里我们需要创建一个商业ID。
![](https://img.haomeiwen.com/i1230517/e3c891551c5d7fc9.png)
2.同样的填写Description,这里还需要填写一个identifier,这个ID必须是以merchant开头。
![](https://img.haomeiwen.com/i1230517/b06fb960351a76cf.png)
3.点击下一步就行了。
配置App ID
1.这个时候我们回到App IDs选项卡下找到我们刚刚创建的App ID。点击选择编辑选项。
![](https://img.haomeiwen.com/i1230517/e5507e7f573c1f9a.png)
2.这个时候下拉我们就可一看到Apple Pay选项 勾选并点击Edit按钮,进入编辑页面。
![](https://img.haomeiwen.com/i1230517/bf40a51e596b0324.png)
3.选择我们刚刚创建的Merchant ID然后Continue。
![](https://img.haomeiwen.com/i1230517/56ec19a547efb592.png)
创建证书
1.回到Merchant ID 点击选择YES选项。
![](https://img.haomeiwen.com/i1230517/6e8418d8dfaad1f8.png)
2.下一步,我们可以看到这时候需要一个证书。
![](https://img.haomeiwen.com/i1230517/b1413e4dc6814d66.png)
![](https://img.haomeiwen.com/i1230517/f60e1b12df3864b8.png)
3.那么创建一个证书。打开钥匙串。
![](https://img.haomeiwen.com/i1230517/82addd54b976c7b6.png)
4.点击状态栏的钥匙串,选择证书助理选项,从证书颁发机构请求证书。
![](https://img.haomeiwen.com/i1230517/ebd9e6ae941afbe9.png)
5.创建,选择存储到磁盘。保存到一个容易找到的位置。
![](https://img.haomeiwen.com/i1230517/fc498320c2e9465b.png)
6.选择刚刚创建的证书文件上传,并点击下一步。
![](https://img.haomeiwen.com/i1230517/2f30188983581376.png)
7.我们就可以看到Your certificate is ready说明我们的证书已经创建好了。我们点击download下载就好了。
![](https://img.haomeiwen.com/i1230517/4cee0a4c114384a0.png)
8.到这里我们的证书部分就已经配置好了。
![](https://img.haomeiwen.com/i1230517/dd980bf735bc454c.png)
代码
1.创建一个工程设置其Bundle ID 必须和描述文件中的Bundle ID一致。
![](https://img.haomeiwen.com/i1230517/26a059983b3062ba.png)
2.在Capability标签中把ApplePay选项打开,并且将Merchant ID选中,
![](https://img.haomeiwen.com/i1230517/3412eda71b42468f.jpg)
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];
// 指定国家和地区编码
pkPayment.countryCode = @"CN";
// 指定国家货币种类
pkPayment.currencyCode = @"CNY";
// 指定的支持的网上银行支付方法
pkPayment.supportedNetworks = @[PKPaymentNetworkVisa,PKPaymentNetworkChinaUnionPay,PKPaymentNetworkMasterCard];
// 指定APP需要的商业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,里面传递的参数直接影响界面结果的显示
- (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地址发送到自己的服务器,有自己的服务器与银行和商家进行接口调用和支付,将结构返回到这里
// 根据结果生成对应的状态对象,根据状态对象,显示不同的支付结果
// 状态对象
PKPaymentAuthorizationStatus status = PKPaymentAuthorizationStatusSuccess;
completion(status);
}
// 当支付过程完成的时候调用
- (void)paymentAuthorizationViewControllerDidFinish:(PKPaymentAuthorizationViewController *)controller{
[controller dismissViewControllerAnimated:YES completion:nil];
}