iOS开发-Apple Pay-苹果支付
转自:http://www.open-open.com/lib/view/open1471952847228.html
Apple Pay,是苹果公司在2014年苹果秋季新品发布会上发布的一种基于NFC(近场通讯)的手机支付功能,2016年2月18日凌晨5点,Apple Pay业务在中国上线。
它的支付方式是通过 Touch ID/Passcode 验证方式,用户可使用事先已经储存在IPhone 6 ,6p或者更新设备上的银行卡支付证书来授权支付,当然最新的5e,同样支持Apple Pay支付。
也就是说你的苹果设备要在IOS8.0及以上版本,并在wallet应用中,添加银行卡信息,从而使用Apple Pay。
它所支持的银行可以到官方查看,这里给出 官方链接
手机怎么添加银行卡,这里不过多介绍,只需要按照手机提示即可。
和支付宝和微信等第三方支付的区别?
首先Apple Pay支付必须要Iphone手机,并且不低于iphone6。
但是Apple Pay对于支付无需联网也可以使用,使用的是 NFC 近场通讯。
对于支付宝和微信,他们的功能可以说更多,不光支付,还可以进行理财、转账等一系列的玩法,这是因为我们已经将钱转给第三方,而Apple Pay的钱从始至终都在你自己的银行卡里,它所储蓄的只是你银行卡的电子信息,当你进行支付的时候,相当于你与银行直接对接,不会讲钱在经过别的第三方,从而安全性,是支付宝,微信等第三方不可比的。
它的付款流程如下图:

集成
Apple Pay的集成可以说是相当的简单的,只不过在这里需要我们用到证书,苹果也给出了Apple Pay的集成教程, 地址在这里 .
这里怎么添加证书我只简单的说一下,大家应该都很熟了
1.登录开发者账号,添加 App ID (记得勾选下面的Apple Pay)
2.添加 Merchant IDs
3.将创建的App ID里面的Apple Pay设置自己的Merchant IDs
4.检查App ID里面的Apple Pay的两个选项是否都为绿色
5.创建 Merchant 证书,绑定App ID并安装
Apple Pay原理图:

设置Xcode
在Xcode中,将 Capabilities 中的Apple Pay开启

中间会生成你设置的App ID,将其勾选。
判断当前设备是否可以支付?
首先我们要导入头文件 import PassKit .
添加判断代码
//判断设备是否支持Apple Pay
if !PKPaymentAuthorizationViewController.canMakePayments()
{
print("不支持Apple Pay")
// 判断是否添加了银行卡
}else if !PKPaymentAuthorizationViewController.canMakePaymentsUsingNetworks([PKPaymentNetworkVisa, PKPaymentNetworkChinaUnionPay])
{
}else
{
}
创建支付按钮
但我们判断了设备时候支持支付和是否添加银行卡后,我们需要再次创建按钮,这里用到的不是 UIButton 而是 PKPaymentButton 代码如下
//判断设备是否支持Apple Pay
if !PKPaymentAuthorizationViewController.canMakePayments()
{
print("不支持Apple Pay")
// 判断是否添加了银行卡
}else if !PKPaymentAuthorizationViewController.canMakePaymentsUsingNetworks([PKPaymentNetworkVisa, PKPaymentNetworkChinaUnionPay])
{
//创建跳转按钮
let btn = PKPaymentButton.init(type: PKPaymentButtonType.SetUp, style: PKPaymentButtonStyle.WhiteOutline)
btn.addTarget(self, action: #selector(ViewController.jumpBankCard), forControlEvents: UIControlEvents.TouchUpInside)
btn.frame = CGRect(x: 100, y: 100, width: 100, height: 20)
view.addSubview(btn)
}else
{
//创建支付按钮
let btn = PKPaymentButton.init(type: PKPaymentButtonType.Buy, style: PKPaymentButtonStyle.Black)
btn.addTarget(self, action: #selector(ViewController.buyShop), forControlEvents: UIControlEvents.TouchUpInside)
btn.frame = CGRect(x: 100, y: 100, width: 100, height: 20)
view.addSubview(btn)
}
分别创建了两个按钮, 一个在没用添加银行卡的情况下, 另一个是全部通过, 支付按钮
这里我们在 跳转银行卡方法 代码如下
//跳转添加银行卡页面
func jumpBankCard(){
PKPassLibrary().openPaymentSetup()
print("跳转设置界面")
}
开始支付请求
支付请求按钮 ,里面要特别说明一下,在方法里面,虽然我们可以直接创建支付请求 let request = PKPaymentRequest() ,并用 PKPaymentAuthorizationViewController 跳转,但是这样会直接崩溃,因为你的支付请求里面没有添加信息
直接看代码:
//购买
func buyShop(){
print("开始购买")
//1.创建支付请求
let request = PKPaymentRequest()
//2.配置商家ID
request.merchantIdentifier = "yimouelng.com";
//3.配置货币代码和国家代码
request.countryCode = "CN";
request.currencyCode = "CNY";
//4.配置请求支持的支付网络
request.supportedNetworks = [PKPaymentNetworkVisa,PKPaymentNetworkChinaUnionPay];
//5.配置处理方式
request.merchantCapabilities = PKMerchantCapability.Capability3DS
//6.配置购买的商品列表 注意支付列表最后一个代表总和 注意名称和价钱
let num = NSDecimalNumber.init(string:"988")
let item = PKPaymentSummaryItem.init(label: "商品", amount: num)
request.paymentSummaryItems = [item]
//附加选项(选填) --------
request.requiredBillingAddressFields = PKAddressField.All//添加收货地址
request.requiredShippingAddressFields = PKAddressField.All//运输地址
//添加快递
let price = NSDecimalNumber.init(string:"988")
let method = PKShippingMethod.init(label: "顺丰", amount: price)
method.identifier = "sf"
method.detail = "货到付款"//备注
request.shippingMethods = [method]
request.applicationData = "id = 1" .dataUsingEncoding(NSUTF8StringEncoding)//添加附加数据
//7.验证用户的支付请求并跳转支付页面
let auth = PKPaymentAuthorizationViewController.init(paymentRequest: request)
self.presentViewController(auth, animated: true, completion: nil)
}
这里附加选项里面的可填可不填,但是上面的内容必填
这里需要注意的是 第6步是配置购买的商品列表 注意支付列表最后一个代表总和 注意名称和价钱
比如你添加了三个商品,前两个每个都是10元, 而最后一个名字最好使用商家名字,加个则是前两个的总和
代码到这里就结束了,没有什么难度,只有几个小点需要注意一下,也都以注明。

总结
代码看一遍就能记住,不需要硬背,如果有错误请及时指出。
Demo用swift写的,后又写了一个OC版的,都会在这里放出,点击下载。
来自:http://yimouleng.com/2016/05/27/ios-ApplePay/
iOS开发-Apple Pay-苹果支付的更多相关文章
- 【转】iOS开发 -- Apple Pay
技术博客原地址:http://www.cnblogs.com/dashunzi/p/ApplePay.html#top 原技术博客中有源码和视频,有感兴趣的朋友可以研究一下! 一.什么是Apple P ...
- iOS开发 Apple Pay
一.什么是Apple Pay? 1. 概念 Apple Pay,简单来说, 就是一种移动支付方式.通过Touch ID/ Passcode,用户可使用存储在iPhone 6, 6p等设备上的信用卡和借 ...
- 开发apple pay碰到的问题总结
本来想简单总结一下Apple Pay 开发过程中的几个问题, 结果被下面这篇文章全碰上了, 干脆全文转载, 作者对相关资源整理得比较详细, 比较有参考价值 总的来说, 我们做过 APNs 推送的话, ...
- iOS开发人员:事实上你还有非常多东西须要学
iOS 新特性总结(since iOS6) iOS 6 1.废除viewDidUnLoad 收到内存警告须要到didReceiveMemoryWarning中处理 [小技巧] -(void)didRe ...
- iOS - 苹果官方Apple Pay开发文档(中文版)- Apple Pay(1)
翻译自苹果官方Apple Pay开发文档.目前版本为1.0 概览: Apple Pay为用户从你的App里购买实际的物品和服务提供简单而安全的方法.通过Touch ID,用户可使用储存在iPhone ...
- iOS App集成Apple Pay教程(附示例代码)
苹果在本周一发布了iOS 8.1版本,并正式开放了Apple Pay支付系统.Apple Pay是一个基于NFC的支付系统,不久将被数以万计的线下零售商店予以支持.即便这项科技并不是彻底的突破性进展, ...
- Apple Pay(转)
Apple Pay 是在 iOS 8 中第一次被介绍,它可以为你的应用中的实体商品和服务,提供简单.安全.私密的支付方式.它使得用户支付起来非常简便,只需按一下指纹就可以授权进行交易. Apple P ...
- Swift # Apple Pay集成
苹果正式开放了Apple Pay支付系统.Apple Pay是一个基于NFC的支付系统,不久将被数以万计的线下零售商店予以支持.即便这项科技并不是彻底的突破性进展,但它足以推动许多公司和零售商来支持这 ...
- 关于Apple Pay,一篇让你不看就会后悔的文章
编者按:本文作者康上明学为“小米生活”产品经理,在苹果Apple Pay发布后,他对该产品做了深入研究,带来这篇文章. 对于 Apple Pay ,我有几个疑问: 线下支付是一个庞大复杂的流程,当中涉 ...
随机推荐
- Golang 基础学习笔记(2)| 如何安装Go工具
可参考官网:http://docscn.studygolang.com/doc/install#安装 1.OS要求 gc 编译器支持以下操作系统及架构.在开始前,请确保你的系统满足这些需求. 若你的O ...
- beacon帧字段结构最全总结(二)——HT字段总结
一.HT Capabilities HT Capabilities:802.11n的mac层给802.11的mac层加入了高吞吐量单元.所有新加的802.11n功能都是通过管理帧中的HT单元才得以实现 ...
- 使用requests实现人人网登录,并做cookie维持
import requests import re,time s = requests.Session() def doLogin(): login_url = 'http://www.renren. ...
- Windows下编译最新版ChezScheme
据说ChezScheme是最快的神级编译器,一秒钟几百万行,王垠说的2秒内编译自身绝不是夸张(看这里<揭秘Chez Scheme>,Scheme中文社区).ChezScheme由美国印第安 ...
- hdu 3342 Legal or Not (topsort)
Legal or NotTime Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total ...
- 力扣(LeetCode)长按键入 个人题解
你的朋友正在使用键盘输入他的名字 name.偶尔,在键入字符 c 时,按键可能会被长按,而字符可能被输入 1 次或多次. 你将会检查键盘输入的字符 typed.如果它对应的可能是你的朋友的名字(其中一 ...
- ZeroC ICE的远程调用框架 AMD
继上一篇<ZeroC ICE的远程调用框架>,本篇再来说其中的AMD.(本篇需要重写) 当在ice文件中声明某个接口方法Method为["amd"]后,接口方法在stu ...
- opencv 2 Opencv数据结构与基本绘图
基础图像容器Mat Mat 是一个类,又两个数据部分组成:矩阵头(包含矩阵尺寸,存储方法,存储地址等信息)和一个指向存储所有像素值的矩阵(根据所选存储方法不同,矩阵可以是不同的维数)的指针.矩阵头的尺 ...
- 菜鸟手把手学Shiro之shiro授权流程
一.首先我们从整体去看一下授权流程,然后再根据源码去分析授权流程.如下图: 流程如下: 1.首先调用 Subject.isPermitted*/hasRole*接口,其会委托给 SecurityMan ...
- 从零开始入门 | Kubernetes 中的服务发现与负载均衡
作者 | 阿里巴巴技术专家 溪恒 一.需求来源 为什么需要服务发现 在 K8s 集群里面会通过 pod 去部署应用,与传统的应用部署不同,传统应用部署在给定的机器上面去部署,我们知道怎么去调用别的机 ...