2016年2月18日凌晨5:00,Apple Pay业务在中国上线。虽然毁誉参半,但是不得不承认国内很多的公司和商家已经开通了Apple Pay的这个事实。
ApplePay开发流程
配置证书
App ID
1.首先我们需要创建一个App ID,登录苹果开发者中心,选择创建一个App ID。
2.点击“+”添加一个App ID。填写App ID Description,和Bundle ID。
3.这里我们要实现Apple Pay的相关功能,所以我们接下来要勾选一下Apple Pay这一选项。
4.点击Continue继续下一步我们会看到Apple Pay的状态还是黄色的(Configurable)。
Merchant ID
1.创建Merchant ID,这里我们需要创建一个商业ID。
2.同样的填写Description,这里还需要填写一个identifier,这个ID必须是以merchant开头。
3.点击下一步就行了。
配置App ID
1.这个时候我们回到App IDs选项卡下找到我们刚刚创建的App ID。点击选择编辑选项。
2.这个时候下拉我们就可一看到Apple Pay选项 勾选并点击Edit按钮,进入编辑页面。
3.选择我们刚刚创建的Merchant ID然后Continue。
创建证书
1.回到Merchant ID 点击选择YES选项。
2.下一步,我们可以看到这时候需要一个证书。
3.那么创建一个证书。打开钥匙串。
4.点击状态栏的钥匙串,选择证书助理选项,从证书颁发机构请求证书。
5.创建,选择存储到磁盘。保存到一个容易找到的位置。
6.选择刚刚创建的证书文件上传,并点击下一步。
7.我们就可以看到Your certificate is ready说明我们的证书已经创建好了。我们点击download下载就好了。
8.到这里我们的证书部分就已经配置好了。
代码
1.创建一个工程设置其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];
// 指定国家和地区编码
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];
}
复制代码