集成 Union Pay - 银联支付

时间:2022-09-05 16:46:37

作者感言

前面已经把WeChat SDK的支付, AliPay SDK搞得七七八八了, 接下来就是银联支付的Union Pay SDK.

最后:
如果你有更好的建议或者对这篇文章有不满的地方, 请联系我, 我会参考你们的意见再进行修改, 联系我时, 请备注Union Pay SDK如果觉得好的话, 希望大家也可以打赏一下~嘻嘻~祝大家学习愉快~谢谢~


简介

银联嘛, 用过银行卡的人都懂的, 我们大天朝的产物, 主要是用来联合大天朝各个银行, 实现各个银行互通, 可跨行, 跨区, 跨境使用等等....其实换了一句话来说, 就是中国版的VISAMasterCard, 虽然银联起步的比较晚, 但发展的脚步不比VISAMasterCard要差.


准备工作

在这里, 我不得不吐槽一下, 如果是第一次集成银联的童鞋, 估计一开始还真是够呛的, 或许你连SDK都找不到在哪里下载, 这网站还真的很难找, 所以我在这里贴出来给你们了, 方便各位童鞋们自行去查找下载商家技术服务

这里还有怎么去查找SDK的示例, 大家也看看呗

集成 Union Pay - 银联支付

集成 Union Pay - 银联支付

集成 Union Pay - 银联支付

集成 Union Pay - 银联支付

集成 Union Pay - 银联支付

这里我下载下来的是3.3.3版本, 54.8MB大小, 或许之后银联会继续更新SDK包, 这个的话, 大家看着办吧~~


废话来一段

惯例, 继续来一段废话, 打开我们之前的集成WeChat SDKAliPay SDk的工程, 新建一个工程叫做UnionPay-Objective-C的新工程

集成 Union Pay - 银联支付


配置工程

配置工程的话, 首先我们要引入Union Pay SDK的依赖包, 一共五个, 这或许是第三方支付品台里需要导入最少依赖的.

  • LocalAuthentication.framework
  • SystemConfiguration.framework
  • CoreGraphics.framework
  • CFNetwork.framework
  • libz.tbd

集成 Union Pay - 银联支付

然后呢, 我们需要去到Info.plist里, 添加三个属性

  • App Transport Security Settings
    • Allow Arbitrary Loads
  • Application requires iPhone environment
  • LSApplicationQueriesSchemes
    • uppaysdk
    • uppaywallet
    • uppayx1
    • uppayx2
    • uppayx3

集成 Union Pay - 银联支付

接下来, 我们要去添加URL Schemes了, 

集成 Union Pay - 银联支付

最后, 就是我们要把Union Pay SDK导进来了, 这样子就配置好整个工程了, 顺带说一声, 这个SDKpaymentcontrol这个目录下~

集成 Union Pay - 银联支付

差点别忘了把-ObjC这个宏加上, 不然没法跑

集成 Union Pay - 银联支付


布局UI界面

惯例, 这里我们也是只给一个UIButton以及一个Action事件.

集成 Union Pay - 银联支付


补充多一个点

这里还需要补充一个点, 由于银联是采用CC++以及Objective-C混编的, 所以这个有些蛋疼, 官方提供三种方式去适配, 我这里采用了最简单的一种, 直接把.m改成.mm.

第一种

  • 由于支付控件使用到了CC++Objective-C混编的情况,所以商户工程引入UPPaymentControl.h头文件以后可能会出现链接错误,这个时候可以通过以下三种方式解决:

    • 将涉及到引用UPPaymentControl.h的源文件的后缀名都改为.mm

    • 如果商户不想修改源文件的后缀名,可以在工程中添加一个空的继承自NSObject的类,并将文件.m后缀名该改为.mm即可方法为New File -> Objective-C class -> 类名自取 -> 保存 -> 修改后缀名为.mm

    • 将工程的compile source as选项的值设置为Objective–C++

第二种

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

第三种

  • Xcode工程中Build Setting -> Apple LLVM compiler Language标签下的C++ Language DialectC++ Standard Library属性值修改为Compiler Default如实在无法解决,尝试添加-ObjC宏的地方修改为-force_load + 空格 + 控件路径,如:-force_load $(PROJECT_DIR)/ libPaymentControl.a,如果还报错,上下文应该会有libPaymentControl.a文件找不到异常,比如ld: file not found: /Users/apple/Desktop/Communication 2/ libPaymentControl.a clang: error: linker command failed with exit code 1 (use -v to see invocation) 请确定libPaymentControl.a文件确实存在于此路径,可能为上下文路径配错。

实现银联支付

集成的时候, 这里我们需要分为两个步骤, 一个是网络, 一个是本地操作.

本地部分

所谓的本地部分, 指的就是弹框, 灭框的一些操作, 还有发起网络一些点击事件等等.

集成 Union Pay - 银联支付

网络部分

银联支付需要用到一个网络交互的流程, 这里的话, 我们直接引用Demo里的代码, 然后再加以修改一丢丢, 就可以了~

集成 Union Pay - 银联支付


测试支付

在测试支付这点上, 微信和银联都做的挺不错的, 唯独支付宝这个连个测试账号都不提供, 真的是蛋疼...疼...疼, 打开银联接入指南, 里面就会有两个测试卡号.

测试账号 测试信息
姓名 张三
手机号码 18100000000
证件类型 01身份证
证件号 510265790128303
招商银行卡 6226090000000048
密码 111101
验证码 123456(先点获取验证码之后再输入
测试账号 测试信息
姓名 张三
手机号码 18100000000
证件类型 01身份证
CVN2 248
有效期 1219
证件号 510265790128303
华夏银行贷记卡 6226388000000095
密码 111101
验证码 123456(先点获取验证码之后再输入

最终效果

集成 Union Pay - 银联支付


工程地址

项目地址: https://github.com/CainRun/PayProject