快速玩转Apple Pay开发

更新时间:2016年02月20日09时25分 来源:传智播客

  Apple Pay

  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开发的更多相关文章

  1. Apple Watch开发快速入门教程

     Apple Watch开发快速入门教程  试读下载地址:http://pan.baidu.com/s/1eQ8JdR0 介绍:苹果为Watch提供全新的开发框架WatchKit.本教程是国内第一本A ...

  2. 程序员带你十天快速入门Python,玩转电脑软件开发(四)

    本系列文章立志于从一个已经习得一门编程语言的基础之上,全面介绍Python的相关开发过程和相关经验总结.本篇文章主要是基于上一篇的程序员带你十天快速入门Python,玩转电脑软件开发(三)的基础之上, ...

  3. 程序员带你十天快速入门Python,玩转电脑软件开发(三)

    声明:本次教程主要适用于已经习得一门编程语言的程序员.想要学习第二门语言.有梦想,立志做全栈攻城狮的你 . 如果是小白,也可以学习本教程.不过可能有些困难.如有问题在文章下方进行讨论.或者添加QQ群5 ...

  4. 程序员带你十天快速入门Python,玩转电脑软件开发(二)

    关注今日头条-做全栈攻城狮,学代码也要读书,爱全栈,更爱生活.提供程序员技术及生活指导干货. 如果你真想学习,请评论学过的每篇文章,记录学习的痕迹. 请把所有教程文章中所提及的代码,最少敲写三遍,达到 ...

  5. 程序员带你十天快速入门Python,玩转电脑软件开发(一)

    关注今日头条-做全栈攻城狮,学代码也要读书,爱全栈,更爱生活.提供程序员技术及生活指导干货. 如果你真想学习,请评论学过的每篇文章,记录学习的痕迹. 请把所有教程文章中所提及的代码,最少敲写三遍,达到 ...

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

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

  7. Apple Pay的快速实现

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

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

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

  9. iOS开发 Apple Pay

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

随机推荐

  1. PostgreSQL 命令

    查看Schema: select * from information_schema.schemata; 查看使用的配置文件: SHOW config_file;

  2. input美化上传按钮美化

    今天工作需求碰到 样式改变上传按钮 效果: <a href="javascript:;" class="a-upload"> <input t ...

  3. Java 反射 分析类和对象

    Java 反射 分析类和对象 @author ixenos 摘要:优化程序启动策略.在运行时使用反射分析类的结构和对象 优化程序启动策略 在启动时,包含main方法的类被加载.它会加载所有它需要的类. ...

  4. Linux的网卡由eth0变成了eth1,如何修复

    Linux的网卡由eth0变成了eth1,如何修复   使用wmware安装了linux,安装成功后,使用的网卡是eth0,没有eth1.但是用过一段时间后,不知道为什么eth0无法使用,系统却自动生 ...

  5. Spring AOP实现声明式事务代码分析

    众所周知,Spring的声明式事务是利用AOP手段实现的,所谓"深入一点,你会更快乐",本文试图给出相关代码分析. AOP联盟为增强定义了org.aopalliance.aop.A ...

  6. webapi中的路由前缀

    Route Prefixes Often, the routes in a controller all start with the same prefix. For example: public ...

  7. poj 3524 Charm Bracelet(01背包)

    Description Bessie has gone to the mall's jewelry store and spies a charm bracelet. Of course, she'd ...

  8. 利用POI获取Excel中图片和图片位置

    利用POI获取Excel中图片和图片位置(支持excel2003or2007多sheet) 转自:http://blog.csdn.net/delongcpp/article/details/8833 ...

  9. js 总结累计大全

    1选择  select  获取val text   更改其他class值 <script type="text/javascript"> $(function(){ $ ...

  10. html各元素中的区别

    HTML中DIV与SPAN的区别 html的div和span, 经常会用到, 尤其是前者. 1. div是块级元素, 实际上就是一个区域, 主要用于容纳其他标签. 默认的display属性是block ...