iOS 集成银联支付

转自:http://www.jianshu.com/p/92d615f78509

当初集成支付宝的时候 觉得见了这么丑的代码 加上这么难找的下载地址 在配上几乎为零的文档 寒哥就要吐血了
下午去集成银联 才知道 血吐的早了

  • 下载地址

https://open.unionpay.com/upload/download/Development_kit85427986.rar
其实我找了半个小时 也不知道怎么就下载好了 这个我在Chrome的下载记录里找到的

解压之后会有这样的目录结构


Paste_Image.png

文档在下面 sdk在upmp_iPhone里面


Paste_Image.png

1、 SDK 说明

SDK 分为以下两个版本:1 支持纯无卡交易静态库,以下简称UPPayPlugin,包含文件:
UPPayPlugin.h UPPayPluginDelegate.h libUPPayPlugin.a

2 支持纯无卡交易和 VIPOS 音频口支付静态库,以下简称 UPPayPluginPro,

包含文件:
UPPayPluginPro.h
UPPayPluginDelegate.h libUPPayPluginPro.a

3、 添加 SDK 包

  • a) 根据商户选择的SDK版本,将sdk/inc目录和sdk/libs目录下对应版本的三个文件添加到 UPPayDemo 工程中;

  • b) 如 果 你 选 择 的 是 UPPayPlugin 版 本 , 添 加 QuartzCore.framework 、Security.framework 到工程中;

  • c) 如 果 你 选 择 的 是 UPPayPluginPro 版 本 , 添 加 QuartzCore.framework 、AudioToolbox.framework, CoreAudio.framework 、 MediaPlayer.framework,AVFoundation.framework 和 Security.framework 到工程中;

  • d) 在工程的 Build Settings 中找到 Other Linker Flags 中添加-ObjC 宏;(这个可能是遗留的问题 我就没写 不报错)


Paste_Image.png

4、 调用插件

  1. 在需要调用支付控件的源文件内引用头文件 UPPayPlugin.h 或 UPPayPluginPro.h(注意:如果工程的 compile source as 选项的值不是 Objective–C++,则引用此头文件的文件类型都要改为.mm)

  2. 通过调用

    • (BOOL)startPay:(NSString)tn mode:(NSString)mode
      viewController:(UIViewController*)viewController delegate:(id<UPPayPluginDelegate>)delegate;
      实现控件的调用
  3. 处理支付结果
    银联手机支付控件有三个支付状态返回值:success、fail、cancel,分别代表:支付成功、支付失败、用户取消支付。这三个返回状态值以字符串的形式作为回调函数参数(NSString)result 返回。通过在工程中添加头文件“UPPayPluginDelegate.h”,在处理交易结果的界面,实现 UPPayPluginDelegate接口,根据该头文件中的回调函数:-(void)UPPayPluginResult:(NSString)result来实现回调方法,从而可以根据支付结果的不同进行相关的处理。

1.将 xcode 工程中 Build Setting -> Apple LLVM compiler Language 标签下的 C++ Language Dialect 和 C++ Standard Library 属性值修改为 Compiler Default
2.将涉及到引用 UPPayPlugin.h 的源文件的后缀名都改为.mm;
3.参照demo,检查工程设置 Search Paths 里的 Framework Search Paths、Header Search Paths、Library Search Paths 的路径设置,看设置路径是否正确

  1. 添加 QuartzCore.framework、AudioToolbox.framework, CoreAudio.framework、 MediaPlayer.framework, AVFoundation.framework 和 Security.framework
    5.工程的 Build Settings 中找到 Other Linker Flags 中添加-ObjC 宏;
    上面提到的几点网上都可以找到,如果已经正确设置,还是编译不通过,那么赶紧检查下 项目targets 对应的sdk版本,选择7.0以下的,目前银联的sdk貌似还不支持7.0,

银联支付目测只需要2个参数 1 tn 其实就是订单号 2 mode 是测试环境还是线上环境
和支付宝不同的是 支付宝要求本地把订单的信息书写完毕 调起sdk支付即可 银联是我把一些生成订单的信息 如 付款方 收款方 订单描述 金额等信息传递到服务器 由服务器生成一个订单号 然后客户端调起sdk进入支付
mode 竟然是个死的字符串 真是醉了 "00" 表示线上环境"01"表示测试环境

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

测试环境 账号

提供测试使用卡号、手机号信息(此类信息仅供测试,不会发生正式交易)招商银行预付费卡:卡号:6226 4401 2345 6785密码:111101



文/南栀倾寒(简书作者)
原文链接:http://www.jianshu.com/p/92d615f78509
著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”。

转载于:https://www.cnblogs.com/feiyu-mdm/p/5802301.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/418143.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

pytorch入门使用

1、创建张量&#xff1a; 2、张量的方法和属性&#xff1a; (1) t1.item()只能用于张量中只有一个数据的情况下获取张量内的值 &#xff08;2&#xff09;numpy() 将tensor转换为numpy数组 t2 torch.tensor([[[1, 2]]]) print(t2) print(t2.numpy()) 输出结果&#xff1a;…

Python rang()函数

返回类型为迭代器 r range(11) print(r) 若输出r中的值&#xff0c;需要调用list(r) print(list(r)) 输出&#xff1a; 方法二: #二&#xff1a; r1 range(1,10) print(list(r1)) 方法三&#xff1a; #三&#xff1a; r2 range(1,10,2) print(list(r2)) 判断某一个数是…

Python 中的 while循环 和 for... in ...循环

for item in Python:print(item, end) print()for item in range(10):print(item, end)# 当不需要自定义变量时候&#xff0c;可以用”_“代替 for _ in range(5) :print(hello world)# 计算累加和 sum 0 for i in range(1,101) :if i%20 :sum i print(sum) While: a 0 while…

css笔记——css 实现自定义按钮

css实现自定义按钮的样式实际上很早就有了&#xff0c;只是会用的人不是很多&#xff0c;里面涉及到了最基础的css写法&#xff0c;在火狐中按钮还是会显示出来&#xff0c;这时需要将i标签的背景设置为白色&#xff0c;同时z-index设置比input高一些&#xff0c;这样才可以把按…

Hibernate中主键生成策略

主键生成策略 increment identity sequence native uuid assigned 1) increment 由hibernate完成 主键递增&#xff0c; 原理&#xff1a;select max(id) , insert时max(id)1 &#xff0c;完成主键递增 优点&#xff1a;跨数据库 缺点&#xff1a;多线程并发访问问题&#xff0…

Python四大金刚之一:列表

前言 列表中可以存储多个数据类型不同的对象 一个对象的内存空间&#xff1a; 因此一个列表的内存空间为: a 10 lst [hello , a , a ,world] print(lst) print(type(lst)) print(id(lst))print(lst[0] type: , type(lst[0])) 一、列表的创建&#xff1a; 内存示意图: #创建…

Python四大金刚之二:字典

引言 列表、字典&#xff1a;可变序列&#xff0c;可以执行增删改排序等 字典&#xff1a;无序的 一、字典的创建 #使用{}创建 scores {张三:100 ,李四:98 ,王麻子:72} print(scores) print(type(scores))#使用内置函数dict() student dict(name jack , age 16) print(st…

Java 加密 base64 encode

版权声明&#xff1a;本文为博主原创文章&#xff0c;未经博主允许不得转载。 【前言】 计算机中的数据都是二进制的&#xff0c;不管是字符串还是文件&#xff0c;而加密后的也是二进制的&#xff0c; 而我们要看到的往往是字符串&#xff0c;本文就介绍了将byte[]转为各种进制…

Python四大金刚之三:元组

引言 一、元组的创建方式 #第一种: t (python,No.1) print(t) print(type(t)) #第二种: 内置函数tuple() t1 tuple((python,No.2)) print(t1) print(type(t1))注&#xff1a;当元组中只有一个元素时候&#xff0c;需要加 逗号&#xff01;&#xff01;&#xff01;&#xff…

Python四大金刚之四:集合

引言 一、集合的创建方式 #使用{} s {1,2,3,4,3,2} #不允许重复元素 print(s)#使用内置函数set() s set(range(6)) print(s) print(set(range(9))) print(set([10,12,13,4])) print(set(Python)) 二、集合的相关操作 set {10,20,30,40,50} print(10 in set) #新增操作 #add…

Python-学习-import语句导入模块

简单的学习一下调用外部的模块文件。 在Python中&#xff0c;模块是一种组织形式&#xff0c;它将彼此有关系的Pyrhon 代码组织到一个个独立的文件当中&#xff0c;模块可以包含可执行代码&#xff0c;函数&#xff0c;和类或者是这些东西的组合。 当我们创建一个Python 源文件…

深度学习中用到的一些函数

1.np.poly1d() 通过np.ploy1d(p[1,1]) 会返回一个 f(x) 1x1 2.np.random.normal() 3.np.random.rand() 4.np.linspace() 得到等差数列 numpy.linspace(start, stop, num50, endpointTrue, retstepFalse, dtypeNone, axis0) Return evenly spaced numbers over a specified i…

sklearn中的make_blobs的用法

sklearn中的make_blobs函数主要是为了生成数据集的&#xff0c;具体如下 data_set, label make_blobs(n_features3,n_samples50, centers3, random_state0, cluster_std0.1)

List与Set接口的方法

List接口&#xff1a; Set接口&#xff1a;

TreeSet类

package ListInterface;import List.Person; import org.junit.Test;import java.util.Comparator; import java.util.Iterator; import java.util.TreeSet;public class TreeSetTest {/* // TreeSet中的数据要求同一个类的对现象:输出的时候会排序之后输出有两种排序&#…