最近一个特别火的词组出现在我们的生活中
Apple Pay,尤其是在四大行的柜台机,或者一些商店,都可以见到他们的身影
其实在 iOS8.1 之后Apple Pay功能已经开放了,只不过在大陆在今年 2 月才可以使用,
Apple Pay是一个基于 NFC 的支付系统,类似于你的银行卡,走到哪刷到哪,那么作为开发人员的我们该如何去开发和使用呢?
其实,Apple Pay也并非想象中的那么难~
前期准备
1、打开Apple开发者中心
点击进入 Apple开发者中心,然后点击
账户

如果你的电脑没有保存密码,则会提示你输入开发者帐号和密码,因为我的电脑已经保存了,所以直接进入。
2.点击:Certificates, Identifiers & Profiles

3.点击Devices

4、点击Merchart IDs
这里我们是来申请Apple 的 支付证书

5、我们要去设置Merchant IDs

点击continue

在设置
Identifier的时候注意ID的格式
Description为描述名,可以随便写,注意不要使用特殊字符即可
ID为你工程中的Bundle Identifier,要一致,建议直接从工程中复制
Register

Done

注册成功以后的样子

6、编辑Merchant IDs

7、确认使用地区是在China

8、申请证书
到这一步的时候,先不要选择Choose file,也不要关闭浏览器,切换到桌面

打开钥匙串访问,点击电脑左上角的钥匙串访问–证书助理–从证书颁发机构请求证书

会出现如下界面,选择存储到磁盘,点击继续

选择存储到桌面,存储

点击完成

你会在桌面上看到下面的文件

然后回到浏览器,点击
choose File..选择创建好的:CertificateSigningRequest.certSigningRequest文件,点击Generate

点击Download下载创建好的发布证书(cer后缀的文件),然后点击Done,你创建的发布证书就会存储在帐号中。

注:一般一个开发者帐号创建一个发布证书就够了,如果以后需要在其他电脑上上架App,只需要在钥匙串访问中创建p12文件,把p12文件安装到其他电脑上。这相当于给予了其他电脑发布App的权限。
Xcode等信息配置
添加描述文件
到目前为止我们的基本设置已经设置好了,现在我们要去Xcode里面去配置相关信息
由于我们要在真机上测试,所以我们要选择描述文件(模拟器上也可以进行测试)
target——>Build Settings——>Code Sign,在Provisoning选择刚才申请证书的账户即可

打开Apple Pay功能
我们在Xcode里面把Apple pay打开 (必须是开发者账号,否则你的里面是没有Apple Pay的)

当我们打钩了以后有可能会报两个错

这时候,我们修复一下即可

代码示例
1、在相应的viewController里面添加框架
首先我们在对应的Controller里面导入头文件,使用Apple Pay ,是导入的
#import框架
2、遵守协议PKPaymentAuthorizationViewControllerDelegate
@ interface ViewController () < PKPaymentAuthorizationViewControllerDelegate>
3、实现协议里面的方法
#pragma mark -----点击支付
-(void)doit:(id)sender{
//判断设备是否支持支付
if([PKPaymentAuthorizationViewController canMakePayments]) {
NSLog(@"支持支付");
// 我们后面创建出来的支付页面就是根据这个request
PKPaymentRequest *request = [[PKPaymentRequest alloc] init];
// 商品目录
PKPaymentSummaryItem *widget1 = [PKPaymentSummaryItem
summaryItemWithLabel:@"商品名字"
amount:[NSDecimalNumber decimalNumberWithString:@"888"]];
PKPaymentSummaryItem *widget2 = [PKPaymentSummaryItem
summaryItemWithLabel:@"商品名字"
amount:[NSDecimalNumber decimalNumberWithString:@"888"]];
PKPaymentSummaryItem *widget3 = [PKPaymentSummaryItem
summaryItemWithLabel:@"2个treney"
amount:[NSDecimalNumber decimalNumberWithString:@"8888"]];
PKPaymentSummaryItem *widget4 = [PKPaymentSummaryItem
summaryItemWithLabel:@"总金额"
amount:[NSDecimalNumber decimalNumberWithString:@"8888"]
type:PKPaymentSummaryItemTypeFinal];
request.paymentSummaryItems = @[widget1, widget2, widget3, widget4];
request.countryCode = @"CN";
request.currencyCode = @"CNY";//人民币
request.supportedNetworks =
@[
PKPaymentNetworkChinaUnionPay,
PKPaymentNetworkMasterCard,
PKPaymentNetworkVisa
];
// 这里填的是就是我们创建的merchat IDs
request.merchantIdentifier = @"treney.com.Apple-Pay";
request.merchantCapabilities = PKMerchantCapabilityCredit;
//增加邮箱及地址信息
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(@"该设备不支持支付");
}
}
#pragma mark ----支付状态
- (void)paymentAuthorizationViewController:(PKPaymentAuthorizationViewController *)
controller didAuthorizePayment:(PKPayment *)payment
completion:(void (^)(PKPaymentAuthorizationStatus status))completion
{
NSLog(@"花费: %@", payment);
BOOL asyncSuccessful = FALSE;
if(asyncSuccessful) {
completion(PKPaymentAuthorizationStatusSuccess);
NSLog(@"支付成功");
} else {
completion(PKPaymentAuthorizationStatusFailure);
NSLog(@"支付失败");
}
}
#pragma mark ----支付完成
- (void)paymentAuthorizationViewControllerDidFinish:
(PKPaymentAuthorizationViewController *)controller {
// 支付完成后让支付页面消失
[controller dismissViewControllerAnimated:YES completion:nil];
}