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

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

1. 介绍

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

项目中要用到支付功能,需要支付宝支付、微信支付、银联支付、Apple_pay,所以打算总结一下,方便以后的查阅,也方便大家, 用到的地方避免再次被坑。

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

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

银联手机控件 SDK

源码获取方法

关注公众号「网罗开发」回复“银联支付”即可获取

2. 支付流程介绍

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

2.1 新版

新版流程图

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

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

2.2 旧版
业务流程图

流程图说明:
  (1)用户在客户端中点击购买商品,客户端发起订单生成请求到商户后台;
  (2)商户后台收到订单生成请求后,按照《手机控件支付产品接口规范》组织并推送订单信息至银联后台;
  (3)银联后台接收订单信息并检查通过后,生成对应交易流水号(即TN),并回复至商户后台(应答要素:交易流水号等);
  (4)商户后台接收到交易流水号(TN),将交易流水号返回至客户端;
  (5)客户端通过交易流水号(TN)调用支付控件;
  (6)用户在支付控件中输入相关支付信息后,由支付控件向银联后台发起支付请求;
  (7)支付成功后,银联后台将支付结果通知给商户后台;
  (8)银联后台同时也将支付结果通知支付控件;
  (9)支付控件显示支付结果并将支付结果返回至客户端;
  此处备注:我们是通过后台获取订单,我们可以根据商品id等信息通过后台接口获取订单信息,对订单支付流程的签名加密过程后台完成。

3. 下载银联 SDK

银联手机控件支付SDK

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

SDK 路径

4. 导入库集成 SDK

4.1 导入SDK库

导入上面那个 iOS 头文件和库下载下载出来的 SDK 包的就行,然后需要链接上依赖库,在 Target —> BuildPhases —> Link Binary With Libraries — 点击 + 号 -> 搜索你需要的系统库。

  • CFNetwork.framework
  • SystemConfiguration.framework
  • libz
  • libPaymentControl.a

导入 SDK 库

4.2 设置 URL Scheme

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

URL Scheme

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:@"FBYUPPay"
                                           mode:@"01"
                                 viewController:self];
}

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

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

4.6 支付结果回调

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

#import "UPPaymentControl.h"

代码如下:

- (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;
}

返回的代理结果: 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

源码Demo获取方法

获取源码方式:关注「网罗开发」回复 “银联支付” 即可获取

转载

本文已在公众号「网罗开发」发布,如果转载长白请加微信:FBY-fan,备注转载长白

福利

面试.png

扫码加微信:FBY-fan 回复「面试题」,领取 11 类面试题,包含:多线程、内存管理、设计模式、数据安全及加密、数据结果与算法、网络、性能优化、Block、RunLoop、Runtime、UI 相关

目录
相关文章
|
8天前
|
开发框架 前端开发 Android开发
安卓与iOS开发中的跨平台策略
在移动应用开发的战场上,安卓和iOS两大阵营各据一方。随着技术的演进,跨平台开发框架成为开发者的新宠,旨在实现一次编码、多平台部署的梦想。本文将探讨跨平台开发的优势与挑战,并分享实用的开发技巧,帮助开发者在安卓和iOS的世界中游刃有余。
|
2月前
|
Java Android开发 Swift
安卓与iOS开发对比:平台选择对项目成功的影响
【10月更文挑战第4天】在移动应用开发的世界中,选择合适的平台是至关重要的。本文将深入探讨安卓和iOS两大主流平台的开发环境、用户基础、市场份额和开发成本等方面的差异,并分析这些差异如何影响项目的最终成果。通过比较这两个平台的优势与挑战,开发者可以更好地决定哪个平台更适合他们的项目需求。
114 1
|
2月前
|
设计模式 安全 Swift
探索iOS开发:打造你的第一个天气应用
【9月更文挑战第36天】在这篇文章中,我们将一起踏上iOS开发的旅程,从零开始构建一个简单的天气应用。文章将通过通俗易懂的语言,引导你理解iOS开发的基本概念,掌握Swift语言的核心语法,并逐步实现一个具有实际功能的天气应用。我们将遵循“学中做,做中学”的原则,让理论知识和实践操作紧密结合,确保学习过程既高效又有趣。无论你是编程新手还是希望拓展技能的开发者,这篇文章都将为你打开一扇通往iOS开发世界的大门。
|
2月前
|
搜索推荐 IDE API
打造个性化天气应用:iOS开发之旅
【9月更文挑战第35天】在这篇文章中,我们将一起踏上iOS开发的旅程,通过创建一个个性化的天气应用来探索Swift编程语言的魅力和iOS平台的强大功能。无论你是编程新手还是希望扩展你的技能集,这个项目都将为你提供实战经验,帮助你理解从构思到实现一个应用的全过程。让我们开始吧,构建你自己的天气应用,探索更多可能!
66 1
|
1天前
|
存储 前端开发 Swift
探索iOS开发:从新手到专家的旅程
本文将带您领略iOS开发的奇妙之旅,从基础概念的理解到高级技巧的掌握,逐步深入iOS的世界。文章不仅分享技术知识,还鼓励读者在编程之路上保持好奇心和创新精神,实现个人成长与技术突破。
|
16天前
|
安全 数据处理 Swift
深入探索iOS开发中的Swift语言特性
本文旨在为开发者提供对Swift语言在iOS平台开发的深度理解,涵盖从基础语法到高级特性的全面分析。通过具体案例和代码示例,揭示Swift如何简化编程过程、提高代码效率,并促进iOS应用的创新。文章不仅适合初学者作为入门指南,也适合有经验的开发者深化对Swift语言的认识。
36 9
|
12天前
|
设计模式 Swift iOS开发
探索iOS开发:从基础到高级,打造你的第一款App
【10月更文挑战第40天】在这个数字时代,掌握移动应用开发已成为许多技术爱好者的梦想。本文将带你走进iOS开发的世界,从最基础的概念出发,逐步深入到高级功能实现,最终指导你完成自己的第一款App。无论你是编程新手还是有志于扩展技能的开发者,这篇文章都将为你提供一条清晰的学习路径。让我们一起开始这段旅程吧!
|
15天前
|
Android开发 Swift iOS开发
探索安卓与iOS开发的差异和挑战
【10月更文挑战第37天】在移动应用开发的广阔舞台上,安卓和iOS这两大操作系统扮演着主角。它们各自拥有独特的特性、优势以及面临的开发挑战。本文将深入探讨这两个平台在开发过程中的主要差异,从编程语言到用户界面设计,再到市场分布的不同影响,旨在为开发者提供一个全面的视角,帮助他们更好地理解并应对在不同平台上进行应用开发时可能遇到的难题和机遇。
|
14天前
|
iOS开发 开发者
探索iOS开发中的SwiftUI框架
【10月更文挑战第39天】在苹果的生态系统中,SwiftUI框架以其声明式语法和易用性成为开发者的新宠。本文将深入SwiftUI的核心概念,通过实际案例展示如何利用这一框架快速构建用户界面,并探讨其对iOS应用开发流程的影响。
|
17天前
|
JSON 前端开发 API
探索iOS开发之旅:打造你的第一个天气应用
【10月更文挑战第36天】在这篇文章中,我们将踏上一段激动人心的旅程,一起构建属于我们自己的iOS天气应用。通过这个实战项目,你将学习到如何从零开始搭建一个iOS应用,掌握基本的用户界面设计、网络请求处理以及数据解析等核心技能。无论你是编程新手还是希望扩展你的iOS开发技能,这个项目都将为你提供宝贵的实践经验。准备好了吗?让我们开始吧!

相关实验场景

更多