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. 多条件分页查找(SQL拼接方法)

    def startTime=params.startTime+" 00:00:00"  def endTime=params.endTime + " 23:59:59&q ...

  2. react 表单

    import React ,{PropTypes}from 'react'; import { render } from 'react-dom'; const styles={ mb10:{ mar ...

  3. Python实战项目网络爬虫 之 爬取小说吧小说正文

    本次实战项目适合,有一定Python语法知识的小白学员.本人也是根据一些网上的资料,自己摸索编写的内容.有不明白的童鞋,欢迎提问. 目的:爬取百度小说吧中的原创小说<猎奇师>部分小说内容 ...

  4. begin

    经历了一段时间的使用Github发表个人博客,我的感受就是很装逼,但是很麻烦--,因为都是自己手动弄的,还不如博客园方便,还有自己买了域名,但是SEO却提不上起,或者说压根就没有 --#,所以说,经过 ...

  5. 12,13 Proxy和Reflect

    Proxy和Reflect Proxy(代理) Proxy用于修改某些操作的默认行为,等同于在语言层面做出修改,所以属于一种"元编程"(meta programming),即对编程 ...

  6. iframe自适应高度

    http://wenrunchang123.iteye.com/blog/1684843

  7. 163邮箱问题:554 DT:SPM 163 smtp5,D9GowACHO7RNWNdXmXs1Bw--.9035S2

    最近公司需要开发一个自定义邮箱功能,上网查询一下,利用163邮箱发送邮件. 由于163 的反垃圾机制,(坑爹机制.) 一般出现 554有在1)测试中用了test,测试,关键字在主题或者内容里面. 但是 ...

  8. Table 固定表头的几种方法

    <style type="text/css"> /*所有内容都在这个DIV内*/ div.all { border: 3px solid #FF00FF; width: ...

  9. 三、基于hadoop的nginx访问日志分析--计算时刻pv

    代码: # cat pv_hour.py #!/usr/bin/env python # coding=utf-8 from mrjob.job import MRJob from nginx_acc ...

  10. Digester组件

    刚认识Digester,记录一下: Digester随着Struts的发展以及其的公用性而被提到commons中独自立项,是apache的一个组件 apache commons-digester.ja ...