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 初探的更多相关文章

  1. 【转】iOS开发 -- Apple Pay

    技术博客原地址:http://www.cnblogs.com/dashunzi/p/ApplePay.html#top 原技术博客中有源码和视频,有感兴趣的朋友可以研究一下! 一.什么是Apple P ...

  2. Apple Pay的快速实现

    一.在Apple开发者中心配置 AppleID 和 Merchant IDs 二.配置好证书后在Xcode中开启Apple Pay 三.代码实现 3.1 判断是否支持Apple Pay,如果支持又将支 ...

  3. 开发apple pay碰到的问题总结

    本来想简单总结一下Apple Pay 开发过程中的几个问题, 结果被下面这篇文章全碰上了, 干脆全文转载, 作者对相关资源整理得比较详细, 比较有参考价值 总的来说, 我们做过 APNs 推送的话, ...

  4. iOS Apple Pay

    iOS 苹果支付 需要证书支持支付功能 targets 打开支付功能按钮 //ApplePay#import <PassKit/PassKit.h>                     ...

  5. Apple Pay

    Apple Pay运行环境:iPhone6以上设备,操作系统最低iOS9.0以上,部分信息设置需要iOS9.2以上.目前还不支持企业证书添加. 环境搭建好后可以在模拟器上面运行,xcode7.2.1+ ...

  6. iOS开发 Apple Pay

    一.什么是Apple Pay? 1. 概念 Apple Pay,简单来说, 就是一种移动支付方式.通过Touch ID/ Passcode,用户可使用存储在iPhone 6, 6p等设备上的信用卡和借 ...

  7. Apple Pay(转)

    Apple Pay 是在 iOS 8 中第一次被介绍,它可以为你的应用中的实体商品和服务,提供简单.安全.私密的支付方式.它使得用户支付起来非常简便,只需按一下指纹就可以授权进行交易. Apple P ...

  8. 集成 Apple Pay

    作者感言 在中秋过后终于把国内的三大支付平台SDK集成都搞定了, 现在我们终于可以来研究Apple自家的支付Apple Pay最后:如果你有更好的建议或者对这篇文章有不满的地方, 请联系我, 我会参考 ...

  9. Apple Pay强势来袭,开发者应做的事情

    "iOS8.1就已经有这个功能了,只是木有现在这么的火,现在的趋势是要火的节奏,因此很多电商平台B2B,P2P,C2C,X2X都有可能需要这个屌丝的付款功能了,在此简单的研究一下." ...

随机推荐

  1. ajax的简单介绍

    响应主体,就是服务器给我们返回的结果内容(浏览器里的responsive) 请求主体,是我们给服务器的数据 输入域名发起一次请求,得到的可能是标签,标签可能还要在发一次请求 post怎么发请求:for ...

  2. asp.net配置web.config支持jQuery.Uploadify插件上传大文件

    配置web.config有两处地方需要配置,分别是集成模式和经典模式. 集成模式: <!--文件上传大小设置--> <httpRuntime requestValidationMod ...

  3. JS点击子元素不触发父元素点击事件(js阻止冒泡)

    js阻止冒泡 <html> <title></title> <head> <meta charset="utf-8"> ...

  4. LogStash filter介绍(九)

    LogStash plugins-filters-grok介绍 官方文档:https://www.elastic.co/guide/en/logstash/current/plugins-filter ...

  5. Python_猜大小

    # 需要在python3上执行 import random def game (capital = 1000): point1 = random.randrange(1,7) point2 = ran ...

  6. 几种常见的Shell

    Unix/Linux上常见的Shell脚本解释器有bash.sh.csh.ksh等,习惯上把它们称作一种Shell.我们常说有多少种Shell,其实说的是Shell脚本解释器. bash bash是L ...

  7. C语言结构体里的成员数组和指针

    struct test{ int i; char *p; }; struct test *str; ; char *b = "ioiodddddddddddd"; str = (s ...

  8. 阿里笔试题:在n个人中找明星

    题目描述:有N个人,其中一个明星和n-1个群众,群众都认识明星,明星不认识任何群众,群众和群众之间的认识关系不知道,现在如果你是机器人R2T2,你每次问一个人是否认识另外一个人的代价为O(1),试设计 ...

  9. 关于编写性能高效的javascript事件的技术

    如何能做出高效的web前端程序是我每次做前端开发都会不自觉去考虑的问题.几年前雅虎里牛逼的前端工程师们出了一本关于提升web前端性能的书籍,轰动了整个web开发技术界,让神秘的web前端优化问题成为了 ...

  10. Eclipse 导入外部项目无法识别为web项目并且无法在部署到tomcat下

    uss_web如果没有左上角那个球,tomcat就识别不出来的. 1.进入项目目录,找到.project文件,打开. 2.找到...代码段,加入如下标签内容并保存: <nature>org ...