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. Mysql两个引擎对比

    Mysql两个引擎对比 MyIsam      优点:      1.支持B-Tree检索和文本全文检索      2.性能消耗方面相对较低      3.支持全表(table)锁      缺点: ...

  2. a new Poster

  3. python应用案例

    安装库 : PIL(Image.ImageDraw.ImageFont.zlib).jpeg 常见问题 (1) Could not find a version that satisfies the ...

  4. tensorflow学习

    tensorflow安装时遇到gcc: error trying to exec 'as': execvp: No such file or directory. 截止到2016年11月13号,源码编 ...

  5. ubuntu16.04文件形式安装mongodb

    下载文件:mongodb-linux-x86_64-ubuntu1604-3.4.1.tgz,解压到home目录. 在mongodb目录下新建data/db目录. 在桌面新建一个shell文件run- ...

  6. UP Board 妄图启动ubilinux失败

    前言 原创文章,转载引用务必注明链接. 经历了上次的上电开机失败,我们终于发现需要手动为UP板安装系统,因为没有显示器的Headless模式时,使用Linux比较方便,另外熟悉Debian系的,所以选 ...

  7. ThinkphpCMF笔记

    1.模板js,css文件__PUBLIC__ <link href="__TMPL__Public/style.css" rel="stylesheet" ...

  8. PHP中instanceof关键字

    instanceof关键字是PHP5新增的新成员.在一些情况下,我们希望确定某个类属于哪种特定的类型.或者是否实现了特定的接口,这时我们就可以使用这个关键字确定一个对象是否是某个特定的类型,是否是从某 ...

  9. jQuery的选择器中的通配符[id^='code'] 等示例及说明

    1.选择器 (1)通配符: $("input[id^='code']");//id属性以code开始的所有input标签 $("input[id$='code']&quo ...

  10. temp

    netstat -tlnap lsof -i :40735 ps -ef|grep 10259 iftop iptraf nethogs gidxylxhqp http://blog.csdn.net ...