昨天,苹果向用户发送了关于《了解如何开始使用 Apple Pay》的邮件,指明目前中国大陆地区已经有数百万个地方可以使用这个基于 Touch ID 和 NFC 技术的支付功能。
What is ApplePay?
简单来说,Apple Pay 类似一个虚拟卡包,它可以将所有银行卡(包括借记卡和信用卡)的信息都存在在苹果设备自带的 Wallet 功能中,之后可以在支持银联云闪付功能的 POS 上使用。Apple Pay 在 2014 年发布,美国地区率先使用,使用时只要在终端读取器上轻轻一靠,一秒钟就能付费,使用的是近场通信技术。
Who is Supporting ApplePay?
目前支持的设备型号是:iPhone 6,iPhone 6 Plus,iPhone 6s, iPhone 6s Plus;iPad Air 2,iPad mini 3,iPad mini 4,iPad Pro,还有 AppleWatch。但是,iPad 只支持在 App 内进行支付,也就是说,用户是无法在麦当劳或者 7-11 掏出一个硕大的 iPad 来买单的。
对设备系统的要求是 iOS 9.2 及以上,Apple Watch 则需要至少是 OS 2.1 ,一台设备最多可以添加 8 张卡片,Apple Pay 会默认使用最后一张卡
How to use ApplePay?
密码输入: Apple Pay 是不需要额外输入任何密码的,主需要用户在 Touch ID 上输入指纹,但是一些银行在支付之后还需要在 POS 机上输入密码(和一般借记卡刷卡的流程相同),另外借记卡在超过 300 元人民币以后需要刷完手机后在输入密码,如果是加密的信用卡也需要手动输入密码.
安全问题: 用户在 Wallet 里的信息并不存储在 iPhone 中,而是一个 token code(标记代码),每次买东西发给银行的动态安全码也不一样,而这一切的钥匙则是手机上的 Touch ID 指纹装置。
昨天的苹果煽动了一下小翅膀,今天万千程序猿心潮滂湃,特此,闲暇之际,也尝试了下applePay的开发:
第一步:在Xcode里设置界面里打开applePay相关功能锁。
点开会发现这个位置需要证书。
第二步:去苹果iOS 开发者中心的位于Identifiers > Merchant ID配置证书。配置证书链接
如上生成Merchant ID配置证书,然后去以下位置生成配置证书
这期间需要一个CRS电脑的钥匙串证书(此过程类似于推送证书配置). 最后下载apple_pay.cer证书,安装。
去app ID部分关联程序:
现在你可以回到Xcode并刷新Merchant ID区块,如果一切正常,你应当看到刚创建的ID出现在列表上。将它选中,然后可以进入下一部分即可在第一步中看到证书信息.
第三步:直接上代码
ViewController.h
#import <UIKit/UIKit.h>
#import <PassKit/PassKit.h>
//Apple Pay使用了PassKit框架,并遵守了一个协议
@interface ViewController : UIViewController<PKPaymentAuthorizationViewControllerDelegate>
- (IBAction)payClick:(id)sender;//SB拖拽的按钮事件
@end
ViewController.m
@implementation ViewController
#pragma mark - PKPaymentAuthorizationViewControllerDelegate
//Required 支付前,判断支付状态
- (void)paymentAuthorizationViewController:(PKPaymentAuthorizationViewController *)controller
didAuthorizePayment:(PKPayment *)payment
completion:(void (^)(PKPaymentAuthorizationStatus status))completion{
NSLog(@"Payment was authorized:%@",payment);
BOOL asyncSuccessful = FALSE;
if (asyncSuccessful) {
completion(PKPaymentAuthorizationStatusSuccess);
NSLog(@"payment was successful");
}else{
completion(PKPaymentAuthorizationStatusFailure);
NSLog(@"payment was failure");
}
}
//Required 支付页面完成,收起当前controller
- (void)paymentAuthorizationViewControllerDidFinish:(PKPaymentAuthorizationViewController *)controller{
[controller dismissViewControllerAnimated:YES completion:nil];
}
-(void)payClick:(id)sender{
if ([PKPaymentAuthorizationViewController canMakePayments]) {
NSLog(@"you can make payment");
//添加商品信息
PKPaymentRequest * request = [[PKPaymentRequest alloc]init];
PKPaymentSummaryItem *item1 = [PKPaymentSummaryItem summaryItemWithLabel:@"item1" amount:[NSDecimalNumber decimalNumberWithString:@"0.99"]];
PKPaymentSummaryItem *item2 = [PKPaymentSummaryItem summaryItemWithLabel:@"item2" amount:[NSDecimalNumber decimalNumberWithString:@"0.88"]];
PKPaymentSummaryItem *total = [PKPaymentSummaryItem summaryItemWithLabel:@"total" amount:[NSDecimalNumber decimalNumberWithString:@"0.77"]];
request.paymentSummaryItems = @[item1,item2,total];
request.countryCode = @"US";
request.currencyCode = @"USD";
request.supportedNetworks = @[PKPaymentNetworkAmex,PKPaymentNetworkVisa,PKPaymentNetworkChinaUnionPay];
request.merchantIdentifier=@"merchant.com.certificate.demo";
request.merchantCapabilities = PKMerchantCapabilityEMV;
PKPaymentAuthorizationViewController * paymentPane = [[PKPaymentAuthorizationViewController alloc]initWithPaymentRequest:request];
paymentPane.delegate = self;
[self presentViewController:paymentPane animated:YES completion:nil];
}else{
NSLog(@"This device cannot make payments");
}
}
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
@end