原本想简单总结一下Apple Pay 开发过程当中的几个问题, 结果被下面这篇文章全碰上了, 干脆全文转载, 做者对相关资源整理得比较详细, 比较有参考价值html
总的来讲, 咱们作过 APNs 推送的话, 申请 商户ID 并关联到 apple id, 申请证书, 生成provisioning profile等步骤都差很少ios
而后我真机调试有两个地方没经过, 下文也总结了, 我拎出来单独说一下:git
1, Payment request is invalid: check your entitlements. Connection to remote alert view service failedgithub
缘由: 粗心, 把merchant id写错了.web
之因此要把粗心的事也列出来, 是由于, 我出问题是粗心, 可是由于集成苹果支付的过程当中, 是须要在配置界面的Capabilities里面用下拉列表选择一个merchant id, 以及代码里还要写一次的, 若是你有多个merchant id, 或者开发过程当中切换过, 下拉列表值和代码里手写的值要记得同步, 没有同步, 同样会得上上面的错误编程
2, 进不到didAuthorizePayment方法.bash
缘由, payrequest.merchantCapabilities = PKMerchantCapability3DS|PKMerchantCapabilityEMV. 看到了吧, 后面的 EMV 是必需要加的服务器
大部分碰到一样问题的同窗估计都是看 WWDC 的视频, 里面的小哥说3DS 是必须的, 显然在我们大天朝, EMV 也是必须的, 下文有更详细的说明.app
好吧, 下面是转载的全文ide
来源: http://www.lilongcnc.cc/2016/02/28/9-applepay支付界面调用和获取payment参数银联扣款流程/#comment-4
这两天Apple Pay貌似非常火热,本身下载的app里,’Enjoy’和’美团’也都集成了Apple Pay. 我最近也看了一下Apple Pay的集成,客服端确实很简单,不过须要提示你们几个我本身躺雷和遇到问题的地方. 而后给你们附上一些我一些参考的帖子.
Apple Pay功能支持的是iPhone6以上,iOS9.2以上. 且目前企业级证书是不支持的,只有我的开发者证书才支持
因此咱们下边提到的全部状况都是在知足这个前提下出现的.
文章主要结构以下:
客户端apple pay支付界面代码流程
真实银联扣款流程
另外,我遇到的两个雷是:
注册了merchant ID以后,在XCode配置完成,可是运行时候出现“Payment request is invalid: check your entitlements. Connection to remote alert view service failed”的状况
输入指纹(输入PIN码),支付完成后,没有进入didAuthorizePayment方法
遇到的一个问题:
这里我分为三个部分,以下:
Payment相关加密数据
这一步骤很简单,推荐简书做者Yasin的简书
的文章《Apple Pay准备工做-申请MerchantID及对应证书详细图文教程》,连接地址:http://www.jianshu.com/p/2e5e45afc246
这一步就是具体代码,没有太多的技术含量.相关的文章也都写的很好,直接看这些文章和对应的Demo便可。须要说起的是,Apple Pay中是能够选择收货方式和填写收货地址的,可是这种方式在咱们如今的app上,不是很合适。
推荐demo:
苹果中,用户选择收货地址和收货方式,是经过回调代理方法的方式来获取的
文章地址:https://itechroof.wordpress.com/2016/01/15/apple-pay-part-1/回调不进入**didAuthorizePayment**方法
,就是和该做者讨论的. demo地址:https://github.com/lintide/ApplePayDemoPayment相关加密数据
在咱们录入指纹,而且输入正确PIN码后,会返回下列两个方法中:
- (void)paymentAuthorizationViewController:(PKPaymentAuthorizationViewController *)controller didAuthorizePayment: (PKPayment *)payment completion:(void (^)(PKPaymentAuthorizationStatus))completion { NSLog(@"验证指纹成功,苹果返回银联卡相关加密数据did authorize payment token: %@, %@", payment.token, payment.token.transactionIdentifier); completion(PKPaymentAuthorizationStatusSuccess); } - (void)paymentAuthorizationViewControllerDidFinish:(PKPaymentAuthorizationViewController *)controller { NSLog(@"支付完成或者用户点击取消"); [controller dismissViewControllerAnimated:controller completion:NULL]; }
第一个方法didAuthorizePayment
如log中写的那样,是在成功以后返回的.咱们不论是跟第三方SDK仍是本身公司后台服务器处理加密数据,咱们都要Payment数据. 另外,真实的扣款流程咱们在下面小节中提到.
第二个方法,就是咱们在present弹起Apple Pay相关sheet以后,咱们点击”取消”按钮和验证指纹成功,系统会回调这个方法,咱们主要在这个方法中,把弹起的支付sheet再给diss下去.
至于其余方法,我这里就不作说起(另外上边说的和在支付sheet中用户填入收货地址和选择收货方式),咱们能够点击去看头文件.
咱们在didAuthorizePayment
方法中获取到Payment相关加密数据
后,并非真正的完成了扣款的交易
.这里咱们须要提到Aplle Pay他只是一种代为扣款的方式
,就比如你直接给商家现金,给现金就是一种方式,可是真正的扣钱,仍是要等商家给你找零钱回来才算是真正的完成. 在大陆地区,银联就比如是这个大商家.
在正式接入Apple Pay功能时,还须要注册:https://open.unionpay.com/ajweb/product/detail?id=80
咱们还须要利用Payment相关加密数据
和银联后台作扣款业务的对接. 这里也分为两种形式:
第一种是使用第三方SDK ,这种方式的优势是咱们不用处理加密数据,缺点就是支付的界面咱们不能自定义.具体参考银联相关文档.地址:https://open.unionpay.com/ajweb/help/file/techFile?productId=80
第二种是公司后台对加密数据进行解密处理,而后调用银联接口. 这种方式的优势就是能对支付界面本身掌控,缺点就是解密过程尤其辛苦.
接下来
关于实际的demo例子的话,推荐你们追踪关注下边三个地址,其中两个做者正在申请银联的接入资格,想必以后确定会更新相关文章.还有一个就是接入”Enjoy”的开发者承诺过段时间会把后台解析Payment相关加密数据和银联支付相关
,有须要的同窗能够继续关注.
地址一:https://github.com/lintide/ApplePayDemo
地址二:http://www.cocoachina.com/ios/20160219/15345.html
地址三:http://blog.nswebfrog.com/2016/02/20/apple-pay-analysis/
另外,我遇到的两个雷是:
? 注册了merchant ID以后,在XCode配置完成,可是运行时候出现“Payment request is invalid: check your entitlements. Connection to remote alert view service failed”的状况
这个问题
困扰了我一天,问题出如今本身太过于疏忽了.粗枝大叶害死人啊.咱们要注意在XCode中的Capability选择了merchant ID以后,咱们还须要在代码这一行对应修改merchant ID.
payment.merchantIdentifier = @"merchant.com.lauren.nihao11";
? 输入指纹(输入PIN码),支付完成后,没有进入didAuthorizePayment方法
这个问题
当时也比较郁闷,由于在模拟器上是会进入这个方法的.后来才发现咱们在指定merchantCapabilities的时候,必须有PKMerchantCapability3DS
和PKMerchantCapabilityEMV
. 不然只会进入paymentAuthorizationViewControllerDidFinish
这个回调. 另外其余两个’PKMerchantCapabilityCredit’和’PKMerchantCapabilityDebit’咱们也能够酌情添加.
payment.merchantCapabilities = PKMerchantCapability3DS | PKMerchantCapabilityEMV | PKMerchantCapabilityCredit | PKMerchantCapabilityDebit;
遇到的一个问题:
? 根据开通Apple Pay的App ID建立的描述文件,会在刚刚建立状态直接变成”invalid”,或者过一段时间状态自动从”activity”变成”invalid.”
这个问题
貌似不仅仅只是出如今开通了Apple Pay的App ID建立Profile的时候.解决方法就是点击对应描述文件那行,而后点击’Edit‘,接着从新’Generate‘一下便可.
Apple Pay编程指导:http://www.jianshu.com/p/a5342940afa3
苹果Apple Pay开发文档:https://developer.apple.com/apple-pay/Getting-Started-with-Apple-Pay.pdf
Swift相关:http://nshipster.com/apple-pay/