iOS信用卡支付接入iPayLinks及开发注意点

这几天在做新版本需求,因为项目是面向国际市场的,隐藏涉及到的支付问题,产品除了国内周知的支付宝、微信、银联、apple pay这几个主要支付手段之后,为了国外用户方便,新需求接入了信用卡支付。关于信用卡支付的方式,我们产品对接iPayLinks,具体你可以去搜索,官网查看。
关于iPayLinks的申请过程,不在技术讨论范围,这让你们公司产品去处理,我们只要知道申请的结果,比如开发文档,实例demo等。

我从产品那里获取到的有下面开发文件:

iOS信用卡支付接入iPayLinks及开发注意点_第1张图片

这里有需要iOS客户端开发用到的就
《iPayLinks商户API收单接口规范v1.1虚拟商品》.pdf
ios app 设备指纹获取示例.zip
iPayLinks联调环境测试卡.txt

iPayLinks信用卡,它没有提供主要的SDK来调用,唯一的一个ios app 设备指纹获取示例.zip是用来生成一个必填的参数,具体可以查看《iPayLinks商户API收单接口规范v1.1虚拟商品》.pdf文档中的API下单接口的提交参数说明。

这里因为涉及到资金方面的安全问题,提交参数里面涉及到API key之列的需要主要参数都放在后端,客户端这里只是生产一些商品订单相关的参数,提交给后端,后端统一去调用支付接口,在返回支付信息回调给客户端。

总的来说真个支付流程没有什么太大的难道,跟着流程来就行。但是我在获取需要提交的参数时候,碰到一个坑,问题就出在设备指纹ID这个参数的获取上,让我坑了一回儿。

iOS信用卡支付接入iPayLinks及开发注意点_第2张图片

这个参数需要把订单号通过它提供的 ios app 设备指纹获取示例.zip的Demo里面的SDK去处理请求生成。
主要的请求生成代码如下:
iOS信用卡支付接入iPayLinks及开发注意点_第3张图片

THMTrustDefender是一个单例,通过configure方法来进行初始化的配置。这里的 NSDictionary内容跟着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的代理回调方法。

/*!
 *    Once profiling is complete, this method is called.
 *
 *    @param profileResults describes the profiling status
 */
-(void) profileComplete: (NSDictionary *) profileResults;

到这里的话,跟着demo来就能生成需要的参数了(补充,这里还有个坑爹的地方,文档没有说清楚,这里需要的设备指纹id其实是要跟订单id一样的,所有这里返回的profileResults里面的那个session_id并不是设备指纹id,而且这个请求生成过程只是一个验证过程,只要能成功就行,回调的信息并不是需要的参数),但是问题就坑在这里的THMDelegate。因为THMTrustDefender是一个单例,然后代理又是当前的页面控制器对象。这就出现一个问题,当我支付结束退出这个界面,然后再继续生成新的一个订单,又会来这个支付选择界面,然后在生成设备指纹id的时候,回调一直没有进入,问题就是因为THMTrustDefender是一个单例,可能之前的第一次持有了这个界面控制器,导致回调不会对新进入的界面控制器有反应。

然后我想了一下,看了下THMTrustDefender,还好它有一个block回调,不用THMDelegate采用block的话,就不受单例问题影响了。
然后还有一个解决办法,只要这指定THMDelegate不是当前的界面控制器就行,你可以生产一个单例类单独处理设备指纹识别,在回调给当前界面就行。

你可能感兴趣的:(iOS信用卡支付接入iPayLinks及开发注意点)