目录

版本信息... 2

目录      3

1       概述... 1

2       支付流程介绍... 1

3       测试帐号... 2

4       iOS客户端... 3

4.1      SDK说明... 3

4.2       接口说明... 4

4.3       添加SDK包... 5

4.4       调用插件... 5

5       常见问题总结... 6

5.1      iOS平台常见问题... 6

1      概述

银联手机支付控件(以下简称支付控件),主要为合作商户的手机客户端或手机Web网站提供安全、便捷的支付服务。目前支付控件支持Android和iOS两个平台,用户通过在支付控件中输入银行卡卡号、手机号、密码(借记卡和预付卡)或者CVN2、有效期(信用卡)、验证码等要素完成支付。

2      支付流程介绍

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

流程图说明:

(1)用户在客户端中点击购买商品,客户端发起订单生成请求到商户后台;

(2)商户后台收到订单生成请求后,按照《手机控件支付产品接口规范》组织并推送订单信息至银联后台;

(3)银联后台接收订单信息并检查通过后,生成对应交易流水号(即TN),并回复交易流水号至商户后台(应答要素:交易流水号等);

(4)商户后台接收到交易流水号,将交易流水号返回给客户端;

(5)客户端通过交易流水号(TN)调用支付控件;

(6)用户在支付控件中输入相关支付信息后,由支付控件向银联后台发起支付请求;

(7)支付成功后,银联后台将支付结果通知给商户后台;

(8)银联将支付结果通知支付控件;

(9)支付控件显示支付结果并将支付结果返回给客户端;

注: 本文档主要关注上述流程中(5)、(9)部分的实现

目前各个平台支持的设备情况如下:

Android平台SDK主要适用于Android 2.1及以上版本的终端设备;

iOS版本支付控件适用iOS 6.0及以上版本终端设备。

3      测试帐号

提供测试使用卡号、手机号信息(此类信息仅供测试,不会发生正式交易)

招商银行借记卡:6226090000000048
    手机号:18100000000
    密码:111101
    短信验证码:123456(先点获取验证码之后再输入)
    证件类型:01身份证
    证件号:510265790128303
    姓名:张三

华夏银行贷记卡:6226388000000095
    手机号:18100000000
    cvn2:248
    有效期:1219
    短信验证码:123456(先点获取验证码之后再输入)
    证件类型:01身份证
    证件号:510265790128303
    姓名:张三

4     
iOS客户端

本小节提供给那些具有一定iOS编程经验和了解面向对象概念的读者使用。

SDK文件所在目录:upmp_iphone/sdk,以下部分所说文件,均在该目录中查找。

4.1  SDK说明

SDK分为以下两个版本:

① 支持纯无卡交易静态库,以下简称UPPayPlugin,包含文件:

UPPayPlugin.h

UPPayPluginDelegate.h

libUPPayPlugin.a

② 支持纯无卡交易和VIPOS音频口支付静态库,以下简称UPPayPluginPro,包含文件:

UPPayPluginPro.h

UPPayPluginDelegate.h

libUPPayPluginPro.a

4.2 
接口说明

+ (BOOL)startPay:(NSString*)tn

mode:(NSString*)mode

viewController:(UIViewController*)viewController

delegate:(id<UPPayPluginDelegate>)delegate;

各个参数的介绍如表3-1:

表3-1 接口参数说明

参数名称

类型

含义

tn

NSString*

必填项;

交易流水号信息,银联后台生成,通过商户后台返回到客户端并传入支付控件;

mode

NSString*

必填项;

接入模式设定,两个值:

@"00":代表接入生产环境(正式版本需要);

@"01":代表接入开发测试环境(测试版本需要);

viewController

UIViewController*

必填项;

商户应用程序调用银联手机支付的当前UIViewController;

delegate

id<UPPayPluginDelegate>

必填项;

实现UPPayPluginDelegate方法的UIViewController;

4.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宏;

4.4 
调用插件

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

b)     通过调用

+ (BOOL)startPay:(NSString*)tn

mode:(NSString*)mode

viewController:(UIViewController*)viewController

delegate:(id<UPPayPluginDelegate>)delegate;

实现控件的调用

c)      处理支付结果

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

5     
常见问题总结

更多请参见https://open.unionpay.com帮助中心-FAQ

5.1  iOS平台常见问题

5.1.1 
怎么加-ObjC宏

选择工程targets——》build settings ->Linking->other linker flags

5.1.2 
编译时提示Undefined for architecture XXX 错误?

如:

1)由于支付控件使用到了C、C++和OC混编的情况,所以商户工程引入UPPayPlugin.h头文件以后可能会出现链接错误。这个时候可以通过两种方式解决:

① 将涉及到引用UPPayPlugin.h的源文件的后缀名都改为.mm;

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

③ 将工程的compile source as 选项的值不是Objective–C++;

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

3)
将xcode工程中Build Setting -> Apple LLVM compiler Language 标签下的C++
Language Dialect 和
C++ Standard Library 属性值修改为 Compiler Default。

如实在无法解决,尝试添加-ObjC宏的地方修改为  -force_load+空格+控件路径,如:-force_load $(PROJECT_DIR)/libUPPayPlugin.a

如果还报错,上下文应该会有libUPPayPlugin.a文件找不到异常,比如

ld: file not found:
/Users/apple/Desktop/Communication 2/libUPPayPlugin.a

clang: error: linker
command failed with exit code 1 (use -v to see invocation)

请确定libUPPayPlugin.a文件确实存在于此路径,可能为上下文路径配错。

5.1.3 
控件闪退异常'NSInvalidArgumentException', reason:
'-[__NSCFConstantString newSizeWithFont:以下略]

'NSInvalidArgumentException', reason: '-[__NSCFConstantString
newSizeWithFont:以下略]:

unrecognized selector sent to instance 0x[随机数]'

如图:

添加-ObjC宏的地方没有配置正确,如果配-ObjC实在解决不了的话,可尝试去掉-ObjC,改为-force_load+空格+控件路径,如:-force_load $(PROJECT_DIR)/libUPPayPlugin.a

5.1.4 
orientation异常

详细现象为控件崩溃,报错信息:Terminating app due to uncaught exception ‘UIApplicationInvalidInterfaceOrientation’, reason: ‘Supported orientations has no
common orientation with the application, and shouldAutorotate is returning YES’ 
请勿修改横竖屏配置,iphone控件只能竖屏,ipad控件才支持横竖屏。
如果app本身为横屏,请代码控制横竖屏,勿修改配置。

5.1.5 
其他第三方静态库(如支付宝、微信等)的文件产生冲突duplicate symbols for
architecture XXX

如:

控件指南中提到的添加-ObjC宏的地方修改为  -force_load+空格+控件路径,如:-force_load $(PROJECT_DIR)/libUPPayPlugin.a。
不会影响支付宝的。

5.1.6 
在刚进控件的界面无限加载

1. 调用控件的逻辑放在主线程中执行。因为在子线程中不允许操作UI,无限菊花实是子线程死锁了。
2. 请看下控件使用指南iOS “添加SDK包“里“添加-ObjC宏”,也注意大小写别写错了。(此步骤操作有问题时也可修改为 
-force_load+空格+控件路径,如:-force_load
$(PROJECT_DIR)/libUPPayPlugin.a)
3. Build
Setting -> Apple LLVM compiler Language-C++:
 

5.1.7    
Attempt
to present XX on XX while a presentation is in progress!

Warning: Attempt to present <UPNavController: 0x8bc24d0> on
<tttViewController: 0x8b9a390> while a presentation is in progress!
animation完成的时候再调用我们的插件,两个present同时起会出警告。

文档下载地址: https://open.unionpay.com/ajweb/help/file

银联手机支付控件官方使用指南(ios版)的更多相关文章

  1. 手机APP支付--整合银联支付控件

    长话短说,本文根据银联官方说明文档,简单总结下,并且说明下中途碰到问题该如何解决. 一.开发前的准备工作1. 打开https://open.unionpay.com/,后续说的文档下载.FAQ查询等都 ...

  2. Phonegap 之 iOS银联在线支付(js调用ios端银联支付控件)

    Phonegap项目,做支付的时候,当把网站打包到ios或android端成app后,在app上通过wap调用银联在线存在一个问题: 就是当从银联支付成功后,再从服务器返回到app客户端就很难实现. ...

  3. ActiveReports 报表控件官方中文入门教程 (3)-如何选择页面报表和区域报表

    本篇文章将介绍区域报表和页面报表的常见使用场景.区别和选择报表类型的一些建议,两种报表的模板设计.数据源(设计时和运行时)设置.和浏览报表的区别. ActiveReports 报表控件官方中文入门教程 ...

  4. ActiveReports 报表控件官方中文入门教程 (1)-安装、激活以及产品资源

    本系列文章主要是面向初次接触 ActiveReports 产品的用户,可以帮助您在三天之内轻松的掌握ActiveReports控件的基本使用方法,包括安装.激活.创建报表.绑定数据源以及发布等内容.本 ...

  5. ActiveReports 报表控件官方中文入门教程 (2)-创建、数据源、浏览以及发布

    本篇文章将阐述首次使用 ActiveReports 报表控件 的方法,包括添加报表文件.绑定数据源以及如何发布报表等内容. ActiveReports 报表控件官方中文入门教程 (1)-安装.激活以及 ...

  6. Wdatepicker日期控件的使用指南 (转)

    Wdatepicker日期控件的使用指南 标签: inputclass语言functionstring正则表达式 2012-02-10 15:48 40826人阅读 评论(5) 收藏 举报 .embo ...

  7. WP8.1学习系列(第十章)——中心控件Hub设计指南

    Windows Phone 应用商店应用中的中心控件指南   在本文中 说明 示例 用法指南 设计指南 相关主题 重要的 API Hub (XAML) HubSection (XAML) 说明 中心控 ...

  8. ActiveReports 报表控件官方中文新手教程 (1)-安装、激活以及产品资源

     本系列文章主要是面向初次接触 ActiveReports 产品的用户,能够帮助您在三天之内轻松的掌握ActiveReports控件的基本用法,包含安装.激活.创建报表.绑定数据源以及公布等内容. ...

  9. Delphi第三方控件安装卸载指南

    基本安装1.对于单个控件,Componet-->install component..-->PAS或DCU文件-->install; 2.对于带*.dpk文件的控件包,File--& ...

随机推荐

  1. [React] PureComponent in React

    In this lesson, you will learn how to use PureComponent in React to reduce the number of times your ...

  2. 同一个页面多个html、body标签

    同一个页面多个html.body标签 html页面的一些标签,默认只有一个.比如html,head,body..... 如果写多个是什么情况呢.本着好奇的想法,试验了一下. <html> ...

  3. C++对象模型——解构语意学(第五章)

    5.4    对象的效率 (Object Efficiency) 在下面的效率測试中,对象构造和拷贝所须要的成本是以Point3d class声明为基准,从简单形式逐渐到复杂形式,包含Plain Ol ...

  4. 访问某类型的元数据的方式-TypeDescriptor 类

    .NET Framework 提供了两种访问某类型的元数据的方式:通过 System.Reflection 命名空间中提供的反射 API,以及通过 TypeDescriptor 类.反射是可用于所有类 ...

  5. flex集成IFrame,IFrame集成UnityWebPlayer直接通讯调用解决方式

    做Web开发一般是flex与JS交互,UnityWebPlayer与JS交互. 它们之间相互调用比較常见. /** * Flex调用Javascript函数 * @params functionNam ...

  6. CodeSmith连Oracle

    据说CodeSmith连Oracle特别麻烦,什么WIN7下不行,64位下不行.之前有个同事为了用上CodeSmith,还特地装了个XP虚拟机. 其实,还是那个连接串的问题. 操作系统64位,就要用6 ...

  7. SpringMVC_基本配置 --跟海涛学SpringMVC(和自己在项目中的实际使用的对比)

    ☆依赖jar包: 1.Spring框架jar 包: 为了简单,将spring-framework-3.1.1.RELEASE-with-docs.zip/dist/下的所有jar包拷贝到项目的WEB- ...

  8. apache httpd 2.4 httpd

    This is a wiki containing user-contributed recipes, tips, and tricks for the Apache HTTP Server (aka ...

  9. Android图片载入缓存框架Glide

    Glide开源框架是Google推荐的图片载入和缓框架,其在Github上的开源地址是:https://github.com/bumptech/glide 当然一个Google推荐的框架肯定就是Vol ...

  10. YTU 2845: 编程题AB-卡片游戏

    2845: 编程题AB-卡片游戏 时间限制: 1 Sec  内存限制: 128 MB 提交: 30  解决: 13 题目描述 小明对数字的序列产生了兴趣: 现有许多张不同的数字卡片,用这若干张卡片能排 ...