開發apple pay碰到的問題總結


本來想簡單總結一下Apple Pay 開發過程中的幾個問題, 結果被下面這篇文章全碰上了, 干脆全文轉載, 作者對相關資源整理得比較詳細, 比較有參考價值

總的來說, 我們做過 APNs 推送的話, 申請 商戶ID 並關聯到 apple id, 申請證書, 生成provisioning profile等步驟都差不多

然后我真機調試有兩個地方沒通過, 下文也總結了, 我拎出來單獨說一下:

1, Payment request is invalid: check your entitlements. Connection to remote alert view service failed

原因: 粗心, 把merchant id寫錯了.

之所以要把粗心的事也列出來, 是因為, 我出問題是粗心, 但是因為集成蘋果支付的過程中, 是需要在配置界面的Capabilities里面用下拉列表選擇一個merchant id, 以及代碼里還要寫一次的, 如果你有多個merchant id, 或者開發過程中切換過, 下拉列表值和代碼里手寫的值要記得同步, 沒有同步, 一樣會得上上面的錯誤

2, 進不到didAuthorizePayment方法.

原因, payrequest.merchantCapabilities = PKMerchantCapability3DS|PKMerchantCapabilityEMV. 看到了吧, 后面的 EMV 是必須要加的

大部分碰到同樣問題的同學估計都是看 WWDC 的視頻, 里面的小哥說3DS 是必須的, 顯然在咱們大天朝, EMV 也是必須的, 下文有更詳細的說明.

好吧, 下面是轉載的全文

來源: 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方法

遇到的一個問題:

  • 根據開通Apple Pay的App ID創建的描述文件,會在剛剛創建狀態直接變成”invalid”,或者過一段時間狀態自動從”activity”變成”invalid.”

客戶端apple pay支付界面代碼流程

這里我分為三個部分,如下:

  1. 注冊merchant ID,配置支付證書,創建支付App ID,創建Profile.
  2. 本地判斷是被是否支持Apple Pay,然后創建顯示支付的sheet
  3. 支付完成后,回調方法中獲取Payment相關加密數據

注冊merchant ID,配置支付證書,創建支付App ID,創建Profile.

這一步驟很簡單,推薦簡書作者Yasin的簡書的文章《Apple Pay准備工作-申請MerchantID及對應證書詳細圖文教程》,鏈接地址:http://www.jianshu.com/p/2e5e45afc246

本地判斷是被是否支持Apple Pay,然后創建顯示支付的sheet

這一步就是具體代碼,沒有太多的技術含量.相關的文章也都寫的很好,直接看這些文章和對應的Demo即可。需要提及的是,Apple Pay中是可以選擇收貨方式和填寫收貨地址的,但是這種方式在我們現在的app上,不是很合適。

推薦demo:

  1. 這個demo比較全面,包括機型判斷,首推. 地址:https://github.com/SummertimSadness/ApplePayDemo
  2. 這個文章好像是印度妹子寫的,分為part1和part2兩部分,並且附有Demo地址。這兩個Demo中就有對選擇收貨方式和填寫收貨地址的代碼。 蘋果中,用戶選擇收貨地址和收貨方式,是通過回調代理方法的方式來獲取的 文章地址:https://itechroof.wordpress.com/2016/01/15/apple-pay-part-1/
  3. 這個demo地址很簡單,但是沒有對於設備是否支持Apple Pay做判斷,但是在最開始躺雷的時候,我和作者溝通了好多次,回調不進入**didAuthorizePayment**方法,就是和該作者討論的. demo地址:https://github.com/lintide/ApplePayDemo

支付完成后,回調方法中獲取Payment相關加密數據

在我們錄入指紋,並且輸入正確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的時候,必須有PKMerchantCapability3DSPKMerchantCapabilityEMV. 否則只會進入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/

其它:http://www.cocoachina.com/ios/20140910/9573.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM