原本想簡單總結一下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/