這幾天在做新版本需求,因為項目是面向國際市場的,隱藏涉及到的支付問題,產(chǎn)品除了國內(nèi)周知的支付寶、微信、銀聯(lián)、apple pay這幾個主要支付手段之后,為了國外用戶方便,新需求接入了信用卡支付。關于信用卡支付的方式,我們產(chǎn)品對接iPayLinks,具體你可以去搜索,官網(wǎng)查看。
關于iPayLinks的申請過程,不在技術討論范圍,這讓你們公司產(chǎn)品去處理,我們只要知道申請的結(jié)果,比如開發(fā)文檔,實例demo等。
我從產(chǎn)品那里獲取到的有下面開發(fā)文件:
這里有需要iOS客戶端開發(fā)用到的就
《iPayLinks商戶API收單接口規(guī)范v1.1虛擬商品》.pdf
ios app設備指紋獲取示例.zip
iPayLinks聯(lián)調(diào)環(huán)境測試卡.txt
iPayLinks信用卡,它沒有提供主要的SDK來調(diào)用,唯一的一個ios app設備指紋獲取示例.zip是用來生成一個必填的參數(shù),具體可以查看《iPayLinks商戶API收單接口規(guī)范v1.1虛擬商品》.pdf文檔中的API下單接口的提交參數(shù)說明。
這里因為涉及到資金方面的安全問題,提交參數(shù)里面涉及到API key之列的需要主要參數(shù)都放在后端,客戶端這里只是生產(chǎn)一些商品訂單相關的參數(shù),提交給后端,后端統(tǒng)一去調(diào)用支付接口,在返回支付信息回調(diào)給客戶端。
總的來說真?zhèn)€支付流程沒有什么太大的難道,跟著流程來就行。但是我在獲取需要提交的參數(shù)時候,碰到一個坑,問題就出在設備指紋ID這個參數(shù)的獲取上,讓我坑了一回兒。
這個參數(shù)需要把訂單號通過它提供的ios app設備指紋獲取示例.zip的Demo里面的SDK去處理請求生成。
主要的請求生成代碼如下:
THMTrustDefender是一個單例,通過configure方法來進行初始化的配置。這里的NSDictionary內(nèi)容跟著demo來就行。
/*!
* Configure the shared instance of TrustDefenderMobile object with the supplied configuration dictionary.
* @code
* [THM configure:@{ THMOrgID: @"my orgid" }];
* @endcode
*
* @return The result of the configuration call.
*
* @remark This method only run once and any following calls to it has no effect.
*/-(BOOL) configure:(NSDictionary *)config;
這里的profileComplete是它的生成指紋識別id的代理回調(diào)方法。
/*!
* Once profiling is complete, this method is called.
*
* @param profileResults describes the profiling status
*/-(void) profileComplete: (NSDictionary *) profileResults;
到這里的話,跟著demo來就能生成需要的參數(shù)了(補充,這里還有個坑爹的地方,文檔沒有說清楚,這里需要的設備指紋id其實是要跟訂單id一樣的,所有這里返回的profileResults里面的那個session_id并不是設備指紋id,而且這個請求生成過程只是一個驗證過程,只要能成功就行,回調(diào)的信息并不是需要的參數(shù)),但是問題就坑在這里的THMDelegate。因為THMTrustDefender是一個單例,然后代理又是當前的頁面控制器對象。這就出現(xiàn)一個問題,當我支付結(jié)束退出這個界面,然后再繼續(xù)生成新的一個訂單,又會來這個支付選擇界面,然后在生成設備指紋id的時候,回調(diào)一直沒有進入,問題就是因為THMTrustDefender是一個單例,可能之前的第一次持有了這個界面控制器,導致回調(diào)不會對新進入的界面控制器有反應。
然后我想了一下,看了下THMTrustDefender,還好它有一個block回調(diào),不用THMDelegate采用block的話,就不受單例問題影響了。
然后還有一個解決辦法,只要這指定THMDelegate不是當前的界面控制器就行,你可以生產(chǎn)一個單例類單獨處理設備指紋識別,在回調(diào)給當前界面就行。