最近项目中,新增了一种第三方支付方式——云闪付,特总结了一下开发流程。
一.准备工作
1.阅读银联开发文档以及教程: https://open.unionpay.com/ajweb/help/file/toDetailPage?id=632&flag=1,里面包括银联云闪付SDK/开发文档/前后端开发demo。
2.掌握文档中的“支付流程介绍”:
a.客户选择云闪付支付,提交订单给商户后端,后端向银联后端请求tn(流水号);
b.商户后端请求到tn,返回给用户的客户端;
c.客户端将tn,schema,viewController和mode传入到银联SDK中,唤起云闪付app;
d.云闪付返回用户客户端,将支付结果传给客户端,同时商户后端也能收到银联后端的支付结果;
e.云闪付的支付结果最好以商户后端结果为准。
二.客户端开发步骤:
1.导入银联sdk,配置工程,如下图所示:
a.导入银联sdk以及.h文件;
b.在Info.plist中LSApplicationQueriesSchemes添加协议白名单;
c.设置URL Schema,用于app间的跳转。
2.调起云闪付app接口API:
[[UPPaymentControl defaultControl] startPay:tn fromScheme:schemeStr mode:mode viewController:viewController];
3.返回接口API:
- (void)handlePaymentResult:(NSURL*)url
completeBlock:(UPPaymentResultBlock)completionBlock;
4.检查是否安装云闪付app的接口
- (BOOL)isPaymentAppInstalled
5.架构设计:
说明:
a.用户选用云闪付支付方式后,先会从商户后端获取tn,该tn是从银联后端获取的;
b.前端通过API接口,传入正确的参数,调起云闪付app;
c.从云闪付app返回到用户app,有三种方式:点击左上角返回,点击云闪付中支付完成按钮或者取消,home键返回;
d.第二种情况返回,会走系统的application: openURL: options方法,在里面执行sdk中支付结果回调的方法,block中code会返回success,fail和cancel,成功的时候,去商户后端验证支付结果,其他的以sdk返回的为主。
e.点击左上角和home键返回,会调用系统的applicationDidBecomeActive方法,如果0.5s没有收到云闪付支付结果回调的话,会发服务到商户后端,查询支付结果。