快速玩转Apple Pay开发
快速玩转Apple Pay开发
更新时间:2016年02月20日09时25分 来源:传智播客
2016年2月18日上午,苹果公司宣布,与中国银联达成合作,正式在中国大陆上线Apple Pay服务。
Apple Pay是一个基于NFC的支付系统,几乎所有的银行都支持。不知道大家还有没有印象,当初支付宝和位置的支付刚出来的时候,银行都恨不得想把他俩弄死。为啥Apple Pay一出来各大银行都支持。因为它和支付宝支付、微信支付是完全不同的概念。Apple Pay根本不是一个第三方支付工具。它仅仅是一种支付的表现形式。说白了Apple Pay就是帮银行刷卡而已。而支付宝和微信都是有自己的账户体系,甚至替代一部分银联功能。所以,各大银行当然会支持啦!
重点,我们还是来说说开发。
一 创建项目
这一步其实没什么好说的。我们主要是为了要程序的bundle id。
二 配置环境
首先需要大家了解一个叫做merchant ID的东西,这是一个id,需要在官网上进行配置。就和真机调试的时候配置证书一样。注册过后,就相当于有了一个商人的身份。这样你就可以使用这个商人的身份来接受付款。
1)注册一个merchant ID
1.在Member Center,选择Certificates, Identifiers & Profiles。
2.在Identifiers下面,选择“Merchant IDs”。
3.单击右上角的“添加”按钮(+)。
4.输入描述和标识符,然后单击“继续”。
5.完成
2)为你的merchant ID配置一个证书
1.在Member Center,选择Certificates, Identifiers & Profiles。
2.在Identifiers下面,选择“Merchant IDs”。
3.单击“编辑”。
4.上传CSR文件。(和真机调试一样,通过钥匙串生成)
5.下载证书通过点击下载,并点击完成。
三 添加项目对Apple Pay的支持
1.打开项目。
2.选择项目
3.点击Capabilities
4.打开Apple Pay的开关
5.并且勾选当初注册的merchant ID
这个时候你应该三个灰色的小对勾,如果你按照上面的步骤是没问题的。如果碰到输入“diffrent strings”的字样,就是你的某个ID被占用了。换个名字就行。
四 代码
1)导入PassKit框架
#import
2)创建付款请求
付款请求是 PKPaymentRequest 类的实例。付款请求包括所购买的商品,用户信息等等。
在创建付款请求之前,确定用户是否可以使用网络,通过调用 PKPaymentAuthorizationViewController 类中的 canMakePaymentsUsingNetworks: 的方法。确定用户设备是否允许使用Apple Pay,通过调用 PKPaymentAuthorizationViewController 类中的 canMakePayments 方法
如果 canMakePayments 返回 NO,那么说明该设备不支持Apple Pay。
如果 canMakePayments 返回 YES,但 canMakePaymentsUsingNetworks:返回 NO,设备支持苹果支付,但用户未添加任何所要求的银行卡。
PKPaymentRequest *request = [[PKPaymentRequest alloc] init];
2.1)创建相关商品信息
商品信息的关键类是 PKPaymentSummaryItem,每一个item对象都是一个商品信息,描述了一个商品和它的价格。通过 PKPaymentSummaryItem 的类方法 summaryItemWithLabel:(NSString )label amount:(NSDecimalNumber )amount,可以创建出一个商品信息的实例。
然后放入 request.paymentSummaryItems 数组当中。数组中,最后的对象是总价。
PKPaymentSummaryItem *good1 = [PKPaymentSummaryItem summaryItemWithLabel:@"HHKB professional 2" amount:[NSDecimalNumber decimalNumberWithString:@"1388"]]; PKPaymentSummaryItem *good2 = [PKPaymentSummaryItem summaryItemWithLabel:@"营养快线" amount:[NSDecimalNumber decimalNumberWithString:@"4"]]; PKPaymentSummaryItem *total = [PKPaymentSummaryItem summaryItemWithLabel:@"德玛西亚" amount:[NSDecimalNumber decimalNumberWithString:@"1392"]]; request.paymentSummaryItems = @[ good1, good2, total ];
2.2)货币单位
货币单位需要使用
request.currencyCode = @"CNY”;(人民币)
2.3)Wallet所绑定的卡的类型
request.supportedNetworks = @[ PKPaymentNetworkMasterCard, PKPaymentNetworkVisa, PKPaymentNetworkChinaUnionPay ];
2.4)merchant ID
request.merchantIdentifier = @"merchant.cn.itcast.ITCASTPayDemo";
2.5)支付处理标准
通过指定merchantCapabilities属性来指定你支持的支付处理标准,3DS支付方式是必须支持的,EMV方式是可选的。
request.merchantCapabilities = PKMerchantCapabilityEMV;
2.6)配送信息
设置后,如果用户之前没有填写过,那么会要求用户必须填写才能够使用Apple Pay。
request.requiredShippingAddressFields = PKAddressFieldPostalAddress | PKAddressFieldPhone | PKAddressFieldEmail | PKAddressFieldName;
3)创建用来显示支付信息的控制器
这个专门用来显示支付’息的控制器是 PKPaymentAuthorizationViewController 类的实例。可以在初始化方法中传入一个付款请求。然后使用modal的方式显示出来即可。
PKPaymentAuthorizationViewController *paymentPane = [[PKPaymentAuthorizationViewController alloc] initWithPaymentRequest:request]; [self presentViewController:paymentPane animated:YES completion:nil];
3.1)为显示支付信息的控制器设置代理
遵守 PKPaymentAuthorizationViewControllerDelegate 协议,然后设置代理。
paymentPane.delegate = self;
这个协议中与两个required的方法。
- (void)paymentAuthorizationViewControllerDidFinish:(PKPaymentAuthorizationViewController *)controller { [self dismissViewControllerAnimated:YES completion:nil]; }
这个方法在支付结束和点击取消的时候调用,所有直接写上dismiss就可以了。
- (void) paymentAuthorizationViewController:(PKPaymentAuthorizationViewController *)controller didAuthorizePayment:(PKPayment *)payment completion:(void (^)(PKPaymentAuthorizationStatus))completion { completion(PKPaymentAuthorizationStatusSuccess); }
用户发送付款请求后会调用该方法。在这个方法中发送相关的支付信息到你的服务器,最后通过服务器来处理。如果服务期处理成功,那么需要调用 completion 的block 并且传入 PKPaymentAuthorizationStatusSuccess 的标记即可。如果服务器处理不成功,那么传一个其他的标记就可以了。
快速玩转Apple Pay开发的更多相关文章
- Apple Watch开发快速入门教程
Apple Watch开发快速入门教程 试读下载地址:http://pan.baidu.com/s/1eQ8JdR0 介绍:苹果为Watch提供全新的开发框架WatchKit.本教程是国内第一本A ...
- 程序员带你十天快速入门Python,玩转电脑软件开发(四)
本系列文章立志于从一个已经习得一门编程语言的基础之上,全面介绍Python的相关开发过程和相关经验总结.本篇文章主要是基于上一篇的程序员带你十天快速入门Python,玩转电脑软件开发(三)的基础之上, ...
- 程序员带你十天快速入门Python,玩转电脑软件开发(三)
声明:本次教程主要适用于已经习得一门编程语言的程序员.想要学习第二门语言.有梦想,立志做全栈攻城狮的你 . 如果是小白,也可以学习本教程.不过可能有些困难.如有问题在文章下方进行讨论.或者添加QQ群5 ...
- 程序员带你十天快速入门Python,玩转电脑软件开发(二)
关注今日头条-做全栈攻城狮,学代码也要读书,爱全栈,更爱生活.提供程序员技术及生活指导干货. 如果你真想学习,请评论学过的每篇文章,记录学习的痕迹. 请把所有教程文章中所提及的代码,最少敲写三遍,达到 ...
- 程序员带你十天快速入门Python,玩转电脑软件开发(一)
关注今日头条-做全栈攻城狮,学代码也要读书,爱全栈,更爱生活.提供程序员技术及生活指导干货. 如果你真想学习,请评论学过的每篇文章,记录学习的痕迹. 请把所有教程文章中所提及的代码,最少敲写三遍,达到 ...
- 【转】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
一.什么是Apple Pay? 1. 概念 Apple Pay,简单来说, 就是一种移动支付方式.通过Touch ID/ Passcode,用户可使用存储在iPhone 6, 6p等设备上的信用卡和借 ...
随机推荐
- Android应用程序组件介绍
应用程序组件是Android应用程序的基本构建单元.每个组件是系统进入你的应用程序的不同入口点.不是所有的组件对于用户都是实际上的入口点,有些是互相依赖的,但是每个组件都有特定的作用——每个都是唯一的 ...
- POJ 2325 Persistent Numbers#贪心+高精度除法
(- ̄▽ ̄)-* 这道题涉及高精度除法,模板如下: ]; ];//存储进行高精度除法的数据 bool bignum_div(int x) { ,num=; ;s[i];i++) { num=num*+ ...
- MongoDB聚合管道(Aggregation Pipeline)
参考聚合管道简介 聚合管道 聚合管道是基于数据处理管道模型的数据聚合框架.文档进入一个拥有多阶段(multi-stage)的管道,并被管道转换成一个聚合结果.最基本的管道阶段提供了跟查询操作类似的过滤 ...
- 浙大pat 1011题解
With the 2010 FIFA World Cup running, football fans the world over were becoming increasingly excite ...
- 2、使用Struts2实现登录功能(没有连接数据)
1.创建如下的目录结构 2.在com.entity包下创建 package com.entity; /** * 用户类 * @author Holly老师 * */ public class User ...
- Struts入门学习(一)
刚开始学习框架的时候感觉很简单,都是用到javaEE的相关框架,自己就想研究源码,但是学了很久之后毫无头绪,所以还是扎扎实实学好Struts毕竟框架做起来要比自己写javaEE要简单,下面我们就来一步 ...
- Caffe+Ubuntu14.04+CUDA7.5 环境搭建(新人向)指南
序 本文针对想学习使用caffe框架的纯新手,如果文中有错误欢迎大家指出. 由于我在搭建这个环境的时候参考了许多网上的教程,但是没有截图,所以文中图片大多来源于网络. 本文没有安装matlab的步骤, ...
- [ An Ac a Day ^_^ ] HDU 1257 基础dp 最长上升子序列
最近两天在迎新 看来只能接着水题了…… 新生培训的任务分配 作为一个有担当的学长 自觉去选了动态规划…… 然后我觉得我可以开始水动态规划了…… 今天水一发最长上升子序列…… kuangbin有nlog ...
- MT4 图表上设置字符
; int start() { //---- ObjectCreate(, , ); string str = "<"; string show ; ;i<x;i++) ...
- Openjudge-计算概论(A)-晶晶赴约会
描述 晶晶的朋友贝贝约晶晶下周一起去看展览,但晶晶每周的1.3.5有课必须上课,请帮晶晶判断她能否接受贝贝的邀请,如果能输出YES:如果不能则输出NO. 输入输入有一行,贝贝邀请晶晶去看展览的日期,用 ...