zoukankan      html  css  js  c++  java
  • 快速玩转Apple Pay开发

    快速玩转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 的标记即可。如果服务器处理不成功,那么传一个其他的标记就可以了。

      

  • 相关阅读:
    C++ Primer 学习笔记_104_特殊工具与技术 --嵌套类
    [AngularJS + Webpack] Requiring CSS & Preprocessors
    [AngularJS + Webpack] Requiring Templates
    [AngularJS + Webpack] ES6 with BabelJS
    [Flux] 3. Actions
    [RxJS] Aggregating Streams With Reduce And Scan using RxJS
    [RxJS] map vs flatMap
    [RxJS] Stream Processing With RxJS vs Array Higher-Order Functions
    [MODx] Solve cannot upload large file
    [React + webpack] hjs-webpack
  • 原文地址:https://www.cnblogs.com/r360/p/5546627.html
Copyright © 2011-2022 走看看