您的位置:首页 > 移动开发 > IOS开发

【iOS】银联支付

2016-03-25 19:25 405 查看
这几天在工作之余看了下银联支付。基本按照官方的文档做就可以。

《【iOS】集成支付宝支付/银联支付/微信支付》

支付流程

银联的文档截图。



官方流程说明:

流程图说明:

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

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

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

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

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

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

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

(8)银联后台同时也将支付结果通知支付控件;

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

需要前端和后台的配合。
前端要做的:

1.提交订单信息给后台;

2.后台返回交易流水号(TN)

3.调支付控件;

4.处理回调。

运行官方Demo

运行前需要先往工程里面增加两个文件:



绿色的两个,不然或报错。

至于其他配置参看文档就可以了。

调起支付控件:

[[UPPaymentControl defaultControl] startPay:tn fromScheme:@"UPPayDemo" mode:self.tnMode viewController:self];


处理回调

- (BOOL) application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation {

[[UPPaymentControl defaultControl] handlePaymentResult:url completeBlock:^(NSString *code, NSDictionary *data) {
//结果code为成功时,先校验签名,校验成功后做后续处理
if([code isEqualToString:@"success"]) {

//判断签名数据是否存在
if(data == nil){
//如果没有签名数据,建议商户app后台查询交易结果
return;
}

//数据从NSDictionary转换为NSString
NSData *signData = [NSJSONSerialization dataWithJSONObject:data
options:0
error:nil];
NSString *sign = [[NSString alloc] initWithData:signData encoding:NSUTF8StringEncoding];
NSLog(@"sign = %@",sign);

//验签证书同后台验签证书
//此处的verify,商户需送去商户后台做验签
if([self verify:sign]) {
//支付成功且验签成功,展示支付成功提示
}
else {
//验签失败,交易结果数据被篡改,商户app后台查询交易结果
}
}
else if([code isEqualToString:@"fail"]) {
//交易失败
}
else if([code isEqualToString:@"cancel"]) {
//交易取消
}
}];

return YES;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: