今天开始做银联支付啦,从头开始记录一下。
1、下载sdk
下载地址:https://open.unionpay.com/ajweb/help/file(不好找啊)
下载后是.rar的压缩文件,自己找个工具解压就行了,将paymentcontrol/inc目录下UPPaymentControl.h文件和paymentcontrol/libs目录下的libPaymentControl.a文件添加到商户应用的工程中
2、工程配置
1)添加依赖库CFNetwork.framework、SystemConfiguration.framework 、libz、libPaymentControl.a到工程中.
2)在工程info.plist设置中添加一个URL Types回调协议(在UPPayDemo工程中使用“UPPayDemo”作为协议),用于在支付完成后返回商户客户端。
3)http请求设置,在Xcode7.0之后的版本中进行http请求时,需要在工程对应的plist文件中添加NSAppTransportSecurity Dictionary 并同时设置里面NSAllowsArbitraryLoads 属性值为 YES
4、添加协议白名单
5)加-ObjC宏,选择工程targets——》build settings ->Linking->other linker flags
6)调用插件:
在需要调用支付控件接口的代码文件内引用头文件UPPaymentControl.h。
(注意:如果工程的compile source as 选项的值不是Objective–C++,则引用此头文件的文件类型都要改为.mm)
商户App从商户服务器获取tn(注:先通过调用后台接口获取订单信息)
* @param tn 订单信息
* @param schemeStr 调用支付的app注册在info.plist中的scheme
* @param mode 支付环境"00"代表接入生产环境(正式版本需要);"01"代表接入开发测试环境
* @param viewController 启动支付控件的viewController
* @return 返回成功失败
7)返回结果接口调用
支付控件结果处理函数handlePaymentResult: completeBlock:需要在工程AppDelegate文件的application: openURL: sourceApplication: annotation: 方法中进行调用。
支付控件结果处理函数handlePaymentResult: completeBlock:包含两个参数,参数1url为支付结果串,由handlePaymentResult: completeBlock:方法解析url内容;参数2completionBlock为商户APP定义的结果处理方法,包含两个传入参数code和data,其中code表示支付结果,取值为suceess,fail,cancel分别表示支付成功、支付失败和支付取消,data表示结果签名数据,商户使用银联公钥验证结果真实性。
completeBlock中的NSDictionary *data结构如下:
sign —— 签名后做Base64的数据
data —— 用于签名的原始数据,结构如下:
pay_result —— 支付结果success,fail,cancel
tn —— 订单号
3、常见问题可以参考这篇文章blog.csdn.net/lxlzy/article/details/53338278,我是根据这篇文章的步骤来的,后续还会根据我的情况补进去一些内容
我的支付做好啦,转载清注明出处