iOS 银联支付开发流程
来源:互联网 发布:迅雷7优化版 编辑:程序博客网 时间:2024/06/06 03:56
一:介绍
项目中要用到支付功能,需要支付宝支付、支付宝网页支付、微信支付、银联支付、Apple_pay,所以打算总结一下,方便以后的查阅,也方便大家, 用到的地方避免再次被坑。
今天我们就主要介绍一下银联控件支付,其他支付也写了对应教程,并且给出了连接。
集成前首先要看看文档,银联手机控件支付,里面包含需要的库文件和详细的文档。鉴于小伙伴们不容易找到,好事做到底,送上截图方便下载。
二:支付流程介绍
通过支付控件进行交易的流程如下图:
流程图说明:
(1)用户在客户端中点击购买商品,客户端发起订单生成请求到商户后台;
(2)商户后台收到订单生成请求后,按照《手机控件支付产品接口规范》组织并推送订单信息至银联后台;
(3)银联后台接收订单信息并检查通过后,生成对应交易流水号(即TN),并回复至商户后台(应答要素:交易流水号等);
(4)商户后台接收到交易流水号(TN),将交易流水号返回至客户端;
(5)客户端通过交易流水号(TN)调用支付控件;
(6)用户在支付控件中输入相关支付信息后,由支付控件向银联后台发起支付请求;
(7)支付成功后,银联后台将支付结果通知给商户后台;
(8)银联后台同时也将支付结果通知支付控件;
(9)支付控件显示支付结果并将支付结果返回至客户端;
此处备注:我们是通过后台获取订单,我们可以根据商品id等信息通过后台接口获取订单信息,对订单支付流程的签名加密过程后台完成。
三:下载银联SDK
银联手机控件支付SDK
下载之后,找到.h文件和库文件,使用UPPaymentControl需要将paymentcontrol/inc目录下UPPaymentControl.h文件和paymentcontrol/libs目录下的libPaymentControl.a文件添加到商户应用的工程中
四:工程配置
4.1 导入SDK库
导入上面那个iOS头文件和库下载下载出来的SDK包的就行,然后需要链接上依赖库,在Target —> BuildPhases —> Link Binary With Libraries— 点击+号 -> 搜索你需要的系统库。
- CFNetwork.framework
- SystemConfiguration.framework
- libz
- libPaymentControl.a
4.2 设置URL Scheme
在工程info.plist设置中添加一个URL Types回调协议(在UPPayDemo工程中使用“UPPayDemo”作为协议),用于在支付完成后返回商户客户端。
4.3 http请求设置
进行http请求时,需要在工程对应的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:@"URL Scheme" mode:tnModel viewController:self];}
方法需要的几个参数文档上都写的有,tn是交易流水号,服务器端传回来的,客户端只有凭借这个参数才能调用支付控件 进行支付的。只需要调用一个方法就行啦!!!
4.6 支付结果回调
在支付成功之后,支付结果返回,需要获取url,需要在Appdelegate中完成
在Appdelegate里面,首先增加头文件引用。
#import "UPPaymentControl.h"
代码如下:
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation { 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;}// NOTE: 9.0以后使用新API接口- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<NSString*, id> *)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;}
4.7 常见问题解决
1.由于支付控件使用到了C、C++和OC混编的情况,将涉及到引用UPPaymentControl.h的源文件的后缀名都改为.mm;
2.由于在UPPayDemo工程中添加了自定义的库文件libPaymentControl.a,当编译Demo工程时,应该检查工程设置Search Paths里的Framework Search Paths、Header Search Paths、Library Search Paths的路径设置,看设置路径是否正确,另外还要注意里边是否多余一些不确定的路径。
3.控件界面无限加载,请参考控件使用指南iOS “添加SDK包“里“添加-ObjC宏”,特别注意大小写不要弄混。(此步骤操作有问题时也可修改为 -force_load+空格+控件路径,如:
-force_load $(PROJECT_DIR)/ libPaymentControl.a)
4.控件闪退异常’NSInvalidArgumentException’, reason: ‘-[__NSCFConstantString newSizeWithFont:详略]’出现以上问题是由于添加-ObjC宏的地方没有配置正确,如果配-ObjC实在解决不了的话,可尝试去掉-ObjC,改为-force_load+空格+控件路径,如:-force_load $(PROJECT_DIR)/ libPaymentControl.a。
希望可以帮助大家
如果哪里有什么不对或者不足的地方,还望读者多多提意见或建议
iOS技术交流群:668562416
- iOS 银联支付开发流程
- 银联支付开发流程
- iOS 支付宝开发流程
- iOS之“支付宝支付”开发流程
- iOS 支付宝支付开发流程
- IOS银联支付的流程
- IOS银联支付的流程
- IOS银联支付的流程
- iOS银联支付的流程
- IOS开发银联支付
- Android银联控件支付开发流程
- iOS使用支付宝开发的流程
- iOS之“微信支付”开发流程
- iOS 微信支付 开发流程
- iOS开发-支付宝集成流程
- iOS开发之支付宝集成流程
- iOS 微信支付开发流程
- iOS 微信支付 开发流程
- ARM存储系统的学习
- java jvm 内存划分
- 求解答No result defined for action myaction.LoginAction and result success错误
- Oracle undo表空间爆满的解决
- 关于Android项目导入AAR容易出现的坑
- iOS 银联支付开发流程
- Mac下安装的软件打不开
- biji
- jsp页面登录超时页面嵌套解决办法
- RabbitMQ -- 安装及配置
- 动态规划——单调递增最长子序列
- IDEA断点过一次后失效
- 常用IO系统调用函数
- SpringMVC