Apple Pay 初探
Apple Pay
一、概述
1.支付方式:Touch ID/ Passcode
2.设备要求:iPhone6以上(iphone:线上/线下 ipad:线上 watch:线下)
3.系统要求:iOS8.0以上,银联(中国):9.2
4.基于NFC
5.2014年10月20日在美国正式上线,2016年2月18日凌晨5:00, Apple Pay 业务在中国上线。
6.与微信支付以及支付宝等第三方支付平台的区别:
(1). 硬件方面
Apple Pay:必须是iOS设备, 而且是按照线上支付和线下支付区分不同的真机设备(具体参考表1)
微信、支付宝: 基本跟硬件设备无关, 支持大多数的只能手机
(2). 网络环境要求
Apple Pay:线上支付需要联网, 线下支付无需联网就可以支付
微信、支付宝: 无论是线上还是线下支付, 都需要联网使用
(3). 使用技术
Apple Pay:线下支付使用的是 基于NFC的近场通讯技术
微信、支付宝: 线下支付使用的是 扫码支付(条形码、二维码)
(4). 主要功能
Apple Pay:线上支付、线下支付、部分升级后的ATM机可以取款
微信、支付宝: 线上支付、线下支付、转账、理财等
(5)5. 安全性能
Apple Pay:不保留银行卡信息,并且不会暴漏给外界、不分流银行存款(不需要从银行卡转钱到另外一个平台)、不能充值 安全性较高
微信、支付宝: 密码保护,身份验证等手段保护账户 安全性相对稍差
(6). 支付时长
Apple Pay:无论是线上支付,还是线下支付, 只需要验证指纹即可支付。非常迅速
微信、支付宝: 需要扫码支付, 流程相对繁琐,所以时长较长
(7). 各自弊端
Apple Pay:只适用于苹果设备, 支付场景单一,无转账理财等业务
微信、支付宝: 安全性较差, 必须联网操作,需要充值到对应平台
二、注册并配置一个商业标示符
1.添加一个App ID
2.配置Merchant ID
3.为Merchant ID 配置证书, 并下载证书安装到钥匙串
4.检查安装到钥匙串中的证书是否有效
5.绑定Merchant ID 到 APP ID
证书失效,请到以下地址下载重新安装:https://www.apple.com/certificateauthority/

三、代码实现
//一.判断当前设备是否支持支付
if (![PKPaymentAuthorizationViewController canMakePayments]) {
NSLog(@"该设备不支持ApplePay");
return;
//二.判断Wallet有没有添加该支付网络的储蓄卡/信用卡
}else if ([PKPaymentAuthorizationViewController canMakePaymentsUsingNetworks:@[PKPaymentNetworkChinaUnionPay,PKPaymentNetworkVisa]]){
NSLog(@"Wallet没有添加该支付网络的储蓄卡/信用卡");
//创建一个添加卡的按钮
PKPaymentButton *btn = [PKPaymentButton buttonWithType:PKPaymentButtonTypeSetUp style:PKPaymentButtonStyleBlack];
[btn addTarget:self action:@selector(jumpToSetup) forControlEvents:UIControlEventTouchUpInside];
[self.payView addSubview:btn];
}else{
//创建一个支付按钮
PKPaymentButton *btn = [PKPaymentButton buttonWithType:PKPaymentButtonTypeBuy style:PKPaymentButtonStyleWhiteOutline];
[btn addTarget:self action:@selector(jumpToPay) forControlEvents:UIControlEventTouchUpInside];
[self.payView addSubview:btn];
}
- (void)jumpToSetup{
NSLog(@"跳转到添加银行卡页面");
PKPassLibrary * pk = [[PKPassLibrary alloc]init];
[pk openPaymentSetup];
}
- (void)jumpToPay{
//三.创建支付请求并配置各项信息
//1.创建支付请求
PKPaymentRequest *request = [[PKPaymentRequest alloc]init];
//2.配置参数
//2.1 商店标识
request.merchantIdentifier = @"";
//2.2 国家代码
request.countryCode = @"CN";
//2.3 货币代码
request.currencyCode = @"CNY";
//2.4 支持的支付网络
request.supportedNetworks = @[PKPaymentNetworkChinaUnionPay,PKPaymentNetworkVisa];
//2.5 支付请求包含一个支付摘要项目的列表
NSDecimalNumber *price1 = [NSDecimalNumber decimalNumberWithString:@"10.0"];
PKPaymentSummaryItem *item1 = [PKPaymentSummaryItem summaryItemWithLabel:@"iPhone" amount:price1];
NSDecimalNumber *price2 = [NSDecimalNumber decimalNumberWithString:@"20.0"];
PKPaymentSummaryItem *item2 = [PKPaymentSummaryItem summaryItemWithLabel:@"iPad" amount:price2 type:PKPaymentSummaryItemTypePending];
NSDecimalNumber *totalPrice = [NSDecimalNumber zero];
totalPrice = [totalPrice decimalNumberByAdding:price1];
totalPrice = [totalPrice decimalNumberByAdding:price2];
PKPaymentSummaryItem *total = [PKPaymentSummaryItem summaryItemWithLabel:@"财务中心" amount:totalPrice type:PKPaymentSummaryItemTypePending];
//注意:数组最后一个是总价格
request.paymentSummaryItems = @[item1,item2,total];
//2.6运输方式
NSDecimalNumber *shippingPrice = [NSDecimalNumber decimalNumberWithString:@"18.0"];
PKShippingMethod *method = [PKShippingMethod summaryItemWithLabel:@"顺风快递" amount:shippingPrice];
method.identifier = @"shunfeng";
method.detail = @"24小时内送到";
request.shippingMethods = @[method];
request.shippingType = PKShippingTypeServicePickup;
//2.7通过指定merchantCapabilities属性来指定你支持的支付处理标准,3DS支付方式是必须支持的,EMV方式是可选的
request.merchantCapabilities = PKMerchantCapability3DS | PKMerchantCapabilityEMV | PKMerchantCapabilityCredit | PKMerchantCapabilityDebit;
//2.8需要的配送信息和账单信息
request.requiredBillingAddressFields = PKAddressFieldAll;
request.requiredShippingAddressFields = PKAddressFieldAll;
//2.9 存储额外信息
request.applicationData = [@"购物车ID:123456" dataUsingEncoding:NSUTF8StringEncoding];
//四.弹出授权控制器,让用户给支付授权
//开始支付
PKPaymentAuthorizationViewController *pkCtrl = [[PKPaymentAuthorizationViewController alloc]initWithPaymentRequest:request];
if (pkCtrl == nil) {
NSLog(@"授权控制器创建失败");
return;
}
pkCtrl.delegate = self;
[self presentViewController:pkCtrl animated:YES completion:nil];
}
#pragma mark - PKPaymentAuthorizationViewControllerDelegate
//五.处理支付凭证
//授权成功
- (void)paymentAuthorizationViewController:(PKPaymentAuthorizationViewController *)controller
didAuthorizePayment:(PKPayment *)payment
completion:(void (^)(PKPaymentAuthorizationStatus status))completion{
/*
服务器接收到token后的一般处理流程:
1.验证支付数据的哈希表和签名
2.为加密过的支付数据解码
3.向支付处理系统提交支付数据
4.向订单追踪系统提交订单
*/
NSLog(@"验证授权---%@",payment.token);
/*
处理支付请求时,你有两个选择:
1.你既可以利用支付平台处理支付请求,
2.也可以自己实现支付请求处理流程。
一个常用的支付平台可以完成上述大部分操作。
*/
NSLog(@"验证通过后,需要开发中继续完成交易");
BOOL isSuccess = YES;
if (isSuccess) {
completion(PKPaymentAuthorizationStatusSuccess);
}else{
completion(PKPaymentAuthorizationStatusFailure);
}
}
//六.关闭授权控制器
//授权成功或者取消授权之后会调用此方法
- (void)paymentAuthorizationViewControllerDidFinish:(PKPaymentAuthorizationViewController *)controller{
NSLog(@"取消或者交易完成");
[self dismissViewControllerAnimated:YES completion:nil];
}
参考自大顺子写的博客,详细请看原文,写的非常好,非常详细。
原文地址:http://www.cnblogs.com/dashunzi/archive/2016/02/23/ApplePay.html#undefined
Apple Pay 初探的更多相关文章
- 【转】iOS开发 -- Apple Pay
技术博客原地址:http://www.cnblogs.com/dashunzi/p/ApplePay.html#top 原技术博客中有源码和视频,有感兴趣的朋友可以研究一下! 一.什么是Apple P ...
- Apple Pay的快速实现
一.在Apple开发者中心配置 AppleID 和 Merchant IDs 二.配置好证书后在Xcode中开启Apple Pay 三.代码实现 3.1 判断是否支持Apple Pay,如果支持又将支 ...
- 开发apple pay碰到的问题总结
本来想简单总结一下Apple Pay 开发过程中的几个问题, 结果被下面这篇文章全碰上了, 干脆全文转载, 作者对相关资源整理得比较详细, 比较有参考价值 总的来说, 我们做过 APNs 推送的话, ...
- iOS Apple Pay
iOS 苹果支付 需要证书支持支付功能 targets 打开支付功能按钮 //ApplePay#import <PassKit/PassKit.h> ...
- Apple Pay
Apple Pay运行环境:iPhone6以上设备,操作系统最低iOS9.0以上,部分信息设置需要iOS9.2以上.目前还不支持企业证书添加. 环境搭建好后可以在模拟器上面运行,xcode7.2.1+ ...
- iOS开发 Apple Pay
一.什么是Apple Pay? 1. 概念 Apple Pay,简单来说, 就是一种移动支付方式.通过Touch ID/ Passcode,用户可使用存储在iPhone 6, 6p等设备上的信用卡和借 ...
- Apple Pay(转)
Apple Pay 是在 iOS 8 中第一次被介绍,它可以为你的应用中的实体商品和服务,提供简单.安全.私密的支付方式.它使得用户支付起来非常简便,只需按一下指纹就可以授权进行交易. Apple P ...
- 集成 Apple Pay
作者感言 在中秋过后终于把国内的三大支付平台SDK集成都搞定了, 现在我们终于可以来研究Apple自家的支付Apple Pay最后:如果你有更好的建议或者对这篇文章有不满的地方, 请联系我, 我会参考 ...
- Apple Pay强势来袭,开发者应做的事情
"iOS8.1就已经有这个功能了,只是木有现在这么的火,现在的趋势是要火的节奏,因此很多电商平台B2B,P2P,C2C,X2X都有可能需要这个屌丝的付款功能了,在此简单的研究一下." ...
随机推荐
- 版本管理工具svn简介
svn简介 SVN是一种C/S架构的版本管理软件 , 能够帮助我们保存开发过程中各个文件的所有历史版本, 你因此可以方便的找回软件的任何一个历史状态., 日常开发中经常用到. 安装使用 1. 在 u ...
- NSRunLoop
1.什么是RunLoop 运行循环 一个线程对应一个RunLoop,主线程的RunLoop默认已经启动,子线程的RunLoop得手动启动(调用run方法) RunLoop只能选择一个Mode启动,如果 ...
- 编译OpenCV文档
概述 使用OpenCV的过程中经常查看文档,每次都去官网查看,不过国内访问速度很慢,有一份本地的文档就好了.本文列出了在Linux(Fedora)系统上从OpenCV源码编译出documentatio ...
- TYVJ1035 棋盘覆盖
时间: 1000ms / 空间: 131072KiB / Java类名: Main 描述 给出一张n*n(n<=100)的国际象棋棋盘,其中被删除了一些点,问可以使用多少1*2的多米诺骨牌进行掩 ...
- Zabbix客户端安装
CentOS 7 [root@localhost /]# rpm -ivh http://repo.zabbix.com/zabbix/3.0/rhel/7/x86_64/zabbix-agent-3 ...
- Material Design
4.适应性设计 底层设计系统包括了交互和空间两部分.每一个设备都能反映出同一底层系统的不同侧面.每一设备的界面都会按照大小和交互进行调整.只有颜色,图标,层次结构和空间关系保持不变. 它不仅仅为了好看 ...
- 使用django开发博客过程记录5——日期归档和视图重写
针对每条博客的观看次数我么是使用django的Mixin实现的: def get(self, request, *args, **kwargs): last_visit = request.sessi ...
- 机器学习——Logistic回归
1.基于Logistic回归和Sigmoid函数的分类 2.基于最优化方法的最佳回归系数确定 2.1 梯度上升法 参考:机器学习--梯度下降算法 2.2 训练算法:使用梯度上升找到最佳参数 Logis ...
- redis技巧--IP地址查询对应城市
场景: 根据IP地址判断用户所在地,虽然网上有好多篇了,但我记录一个一看就懂的,不用看超长文字再自己理解了. 我们有城市和IP地址段的对应关系,如: 上海: 202.127.0.0 ~ 202.127 ...
- TCPIP、Http、Socket的协议~ 写得挺形象,赞
这篇文章写得挺形象,对TCPIP.HTTP.Socket的作用有一个整体层次的理解. 转载文章内容如下: 网络由下往上分为物理层.数据链路层.网络层.传输层.会话层.表示层和应用层. 通过初步的了 ...