iOS 银联支付开发(最新版)

网友投稿 372 2022-09-20

iOS 银联支付开发(最新版)

1. 介绍

本文为以前做的项目总结,由于相关支付 SDK 迭代,原文已经不满足需求,故作如下更新,供大家参考,另外增加常见问题总结。

今天我们就主要介绍一下银联控件支付,其他支付介绍后面会尽快更新出来。

集成前首先要看看文档,​​银联手机控件支付​​,里面包含需要的库文件和详细的文档。老版本 SDK 藏在了很深的地方,导致很多小伙伴们不容易找到,新版本相对比较明了,送上截图方便下载。

源码获取方法

2. 支付流程介绍

通过支付控件进行交易的流程如下图:

2.1 新版

在新版的流程图中细化了支付中的流程,并且增加了未收到交易结果的处理流程。

新老版本的支付顺序都是一样的,老版本看起来更简洁,有兴趣的可以参考

2.2 旧版

3. 下载银联 SDK

​​银联手机控件支付SDK​​

下载 SDK 之后,找到 .h 文件和库文件,使用 UPPaymentControl 需要将 paymentcontrol/inc 目录下 UPPaymentControl.h 文件和 paymentcontrol/libs 目录下的 libPaymentControl.a 文件添加到商户应用的工程中

4. 导入库集成 SDK

4.1 导入SDK库

CFNetwork.frameworkSystemConfiguration.frameworklibzlibPaymentControl.a

4.2 设置 URL Scheme

在工程 info.plist 设置中添加一个 URL Types 回调协议(在 FBYUPPay 工程中使用“ FBYUPPay ”作为协议),用于在支付完成后返回商户客户端。

4.3 请求时,需要在工程对应的 plist 文件中添加NSAppTransportSecurity Dictionary 并同时设置里面NSAllowsArbitraryLoads 属性值为 YES

4.4 添加协议白名单

需要在工程对应的 plist 文件中,添加LSApplicationQueriesSchemes Array 并加入 uppaysdk、uppaywallet、uppayx1、uppayx2、uppayx3 五个 item,如下图:

4.5 调用支付接口

在调用银联支付类里面,首先增加头文件引用。

#import "UPPaymentControl.h"

在调起支付的方法中代码如下:

//当获得的tn不为空时,调用支付接口if (tn != nil && tn.length > 0) { [[UPPaymentControl defaultControl] startPay:tn fromScheme:@"FBYUPPay" mode:@"01" viewController:self];}

只需要调用一个方法就行啦!!! 方法中几个参数分别代表的意思如下:

tn: 是交易流水号,服务器端传回来的,客户端只有凭借这个参数才能调用支付控件 进行支付的;fromScheme: 是支付唯一标识mode: 是测试环境,“00” 表示线上环境,“01” 表示测试环境viewController:启动支付控件的viewController

4.6 支付结果回调

在支付成功之后,支付结果返回,需要获取 url,需要在Appdelegate 中完成在 Appdelegate 里面,首先增加头文件引用。

#import "UPPaymentControl.h"

代码如下:

- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary *)options{ if ([url.host isEqualToString:@"uppayresult"]){ //银联支付结果 [[UPPaymentControl defaultControl] handlePaymentResult:url completeBlock:^(NSString *code, NSDictionary *data) { //结果code为成功时,先校验签名,校验成功后做后续处理 if([code isEqualToString:@"success"]) { //交易成功 }else if([code isEqualToString:@"fail"]) { //交易失败 }else if([code isEqualToString:@"cancel"]) { //交易取消 } }]; } return YES;}

返回的代理结果: success、fail、cancel,分别代表:支付成功、支付失败、用户取消支付

5. 常见问题汇总

5.1 支付控件混编问题

由于支付控件使用到了 C、C++ 和 OC 混编的情况,将涉及到引用 UPPaymentControl.h 的源文件的后缀名都改为 .mm

5.2 配置 SDK 库文件路径

由于在 FBYUPPay 工程中添加了自定义的库文件libPaymentControl.a,当编译 Demo工程时,应该检查工程设置 Search Paths 里的 Framework Search Paths、Header Search Paths、Library Search Paths 的路径设置,看设置路径是否正确,另外还要注意里边是否多余一些不确定的路径。

5.3 控件界面无限加载

控件界面无限加载,请参考控件使用指南 iOS 添加 SDK包里添加 -ObjC 宏,特别注意大小写不要弄混。(此步骤操作有问题时也可修改为 -force_load + 空格 + 控件路径,如:-force_load $(PROJECT_DIR)/ libPaymentControl.a)。

5.4 支付后无法返回 App

一般是由于白名单没有设置正确

[[UPPaymentControl defaultControl] startPay:tn fromScheme:@"FBYUPPay" mode:@"01" viewController:self];

上方代码中 fromScheme 参数需要和文章 4.2 设置 URL Scheme中设置的 URL Schemes 相同,这样才能对应返回 App。

5.5 控件闪退异常

控件闪退异常'NSInvalidArgumentException', reason: '-[__NSCFConstantString newSizeWithFont:详略]',如下图:

出现以上问题是由于添加-ObjC宏的地方没有配置正确,如果配-ObjC实在解决不了的话,可尝试去掉-ObjC,改为-force_load+空格+控件路径,如:-force_load $(PROJECT_DIR)/ libPaymentControl.a。

希望可以帮助大家 如果哪里有什么不对或者不足的地方,还望读者多多提意见或建议 iOS技术交流群:668562416

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:iOS 微信支付开发(最新版)
下一篇:如何建立私域流量,怎么去运营好私域流量?
相关文章

 发表评论

暂时没有评论,来抢沙发吧~