Apple Pay是什么 ?
Apple Pay目前已正式在国内上线,这意味着我们消费者可通过
苹果手机、苹果手表
等智能设备进行支付等,它的功能类似一个“卡包”,将实体银行卡虚拟到手机里,用户可以绑定储蓄卡或信用卡
实现刷卡支付。
设备支持要求是什么 ?
Apple Pay需要支持
NFC
功能,目前只限于iPhone 6s、iPhone 6s Plus、iPhone 6、iPhone 6 Plus和Apple Watch这几款设备使用,同时,用户需将手机操作系统版本升级到iOS 9.2
以上,Apple Watch则需要Watch OS 2.1
版本以上。
Apple Pay怎么使用 ?
在
iPhone
上,先打开系统自带的Wallet
应用,后点右上角的⊕
符号,这时你有两个选择,一是用摄像头拍卡就能识别,二是可以手动输入,或者通过iTunes绑定,至于Apple Watch
怎么使用,因为自己还没有实战过,具体都怎么添加百度一下吧,在这里我就不浪费时间了。
Apple Pay环境怎么配置 ?
配置Bundle ID
添加商户的ID
点击创建好的商户ID
编辑商户ID
添加CSR文件(类似Mac的身份证)
下载配置好的商户ID
创建对应的App IDs
这时必须选择精确的ID设置,否则下面没法选择Apple Pay服务
选择Apple Pay 类
这时会看到创建好的App IDs
clear项目 如下截图代表上述步骤正确
配置支付环境最后的操作
App项目内怎么集成 ?
Apple Pay使用了PassKit框架,所以你需要导入其头文件
#import <PassKit/PassKit.h>
接收Apple Pay处理信息的回调,需实现其委托代理:
@interface ViewController : UIViewController
<PKPaymentAuthorizationViewControllerDelegate>
为了方便测试,我这里是直接点击控制器的view
来触发支付操作
- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{
// ...
}
具体实现代码如下:
- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{
//首先判断设备是否支持Apple Pay快捷支付功能
/**
* canMakePayments(BOOL) YES 代表设备支持applePay功能 否则不支持
* 若是用户设备不能进行支付,则不要显示支付按钮,相应的应该退回到其它支付方式(支付宝 微信等)
* 我这里是直接让其返回 不做其他操作
*/
if (![PKPaymentAuthorizationViewController canMakePayments]) return;
//其次判断设备是否存在绑定过的并支持的银行卡
/**
* 若是设备没有支持的银行卡,则进入设置银行卡界面
* 我这里判断是不支持Visa、银联、Discover等
*/
if (![PKPaymentAuthorizationViewController canMakePaymentsUsingNetworks:@[PKPaymentNetworkVisa,PKPaymentNetworkChinaUnionPay,PKPaymentNetworkDiscover]]) {
//进入设置银行卡界面
[[PKPassLibrary alloc] openPaymentSetup];
}
NSLog(@"该设备支持ApplePay功能,且wallet存在支持绑定好的银行卡");
//最后,则创建支付请求
PKPaymentRequest *request = [PKPaymentRequest new];
//填写商户ID(merchant IDs)
request.merchantIdentifier = @"merchant.com.chongzone.cn";
//设置国家代码
request.countryCode = @"CN"; //中国大陆
//设置支付货币
request.currencyCode = @"CNY";//人民币
//设置商户的支付标准
request.merchantCapabilities = PKMerchantCapability3DS; //3DS支付方式是必须支持的,其他方式可选
//设置支持卡的类型
/**
* 对支付卡类别的限制
* PKPaymentNetworkChinaUnionPay 银联卡
* PKPaymentNetworkVisa 国际卡
* PKPaymentNetworkMasterCard 万事达卡 国际卡
* PKPaymentNetworkDiscover 美国流行的信用卡
*/
request.supportedNetworks = @[PKPaymentNetworkChinaUnionPay, PKPaymentNetworkVisa, PKPaymentNetworkMasterCard, PKPaymentNetworkDiscover];
//设置商品参数
/**
* summaryItemWithLabel 商品名称(英文字符默认全部显示大写)
* amount 商品的价格 - NSDecimalNumber类型
* PKPaymentSummaryItemTypePending 待付款 PKPaymentSummaryItemTypeFinal
*/
NSDecimalNumber *oneAmout = [NSDecimalNumber decimalNumberWithString:@"1.11"];
NSDecimalNumber *twoAmout = [NSDecimalNumber decimalNumberWithString:@"2.22"];
NSDecimalNumber *threemAmout = [NSDecimalNumber decimalNumberWithString:@"3.33"];
NSDecimalNumber *itemTotal = [NSDecimalNumber zero];
itemTotal = [itemTotal decimalNumberByAdding:oneAmout];
itemTotal = [itemTotal decimalNumberByAdding:twoAmout];
itemTotal = [itemTotal decimalNumberByAdding:threemAmout];
PKPaymentSummaryItem *itemOne = [PKPaymentSummaryItem summaryItemWithLabel:@"itemOne"
amount:oneAmout];
PKPaymentSummaryItem *itemTwo = [PKPaymentSummaryItem summaryItemWithLabel:@"itemTwo"
amount:twoAmout];
PKPaymentSummaryItem *itemThree = [PKPaymentSummaryItem summaryItemWithLabel:@"itemThree"
amount:threemAmout];
PKPaymentSummaryItem *itemSum = [PKPaymentSummaryItem summaryItemWithLabel:@"chongzone" amount:itemTotal];
request.paymentSummaryItems = @[itemOne, itemTwo, itemThree, itemSum];
/**
* 以上参数都是必须的
* 以下参数不是必须的
*/
//设置收据内容
request.requiredBillingAddressFields = PKAddressFieldAll; //则其余四个必须添加
//设置送货内容 all则其余四个内容必填
request.requiredShippingAddressFields = PKAddressFieldAll;
//设置送货方式
PKShippingMethod *method = [PKShippingMethod summaryItemWithLabel:@"菜鸟" amount:[NSDecimalNumber decimalNumberWithString:@"10.00"]];
method.identifier = @"菜鸟物流";
method.detail = @"12小时到达";
request.shippingMethods = @[method];
//显示支付界面
PKPaymentAuthorizationViewController *paymentVC = [[PKPaymentAuthorizationViewController alloc] initWithPaymentRequest:request];
//遵守代理
paymentVC.delegate = self;
if (!paymentVC) return;
[self presentViewController:paymentVC animated:YES completion:nil];
}
委托代理的回调
/**
* 支付的时候回调
*/
#pragma mark - PKPaymentAuthorizationViewControllerDelegate
- (void)paymentAuthorizationViewController:(PKPaymentAuthorizationViewController *)controller
didAuthorizePayment:(PKPayment *)payment
completion:(void (^)(PKPaymentAuthorizationStatus status))completion{
/**
* 在这个代理方法内部,需支付信息应发送给服务器/第三方的SDK(银联SDK/易宝支付SDK/易智付SDK等)
* 再根据服务器返回的支付成功与否进行不同的block显示
* 我这里是直接返回支付成功的结果
*/
completion(PKPaymentAuthorizationStatusSuccess);
NSLog(@"payment --- %@", payment);
}
- (void)paymentAuthorizationViewControllerDidFinish:(PKPaymentAuthorizationViewController *)controller {
//支付页面关闭
//点击支付/取消按钮调用该代理方法
[controller dismissViewControllerAnimated:YES completion:nil];
}
最后附上真机/模拟器支付截图
想要源码的话,下面可以留言…不早了,哎、又晚睡了,晚安咯。。。