iOS如何快速实现招行一网通

前言

由于之前公司的项目需求要实现招行一网通,相信目前大部分app要求实现这一功能的并不多,导致网上的资料参差不齐,所以在实现过程中还是遇到一些小问题,因此这里对此功能做一个小总结!!

具体步骤

1.UIWebView加载招行一网通提供的主动支付URL,这个URL还需要配置相关的参数,跟后台协商返回需要的参数即可(后面会附上后台的参数返回),然后使用POST请求加载这个URL即可。
2.支付结果处理,支付成功后可以截取到return_url,根据这个url对支付结果进行处理,跳转到支付成功界面或给予相应提示。

具体实现

后台接口


1.png

后台接口返回数据

{
  "code": 1,
  "data": {
    "cmbpay": {
      "version": "1.0",
      "charset": "utf-8",
      "sign": "647bcab3c3205a4de9c1d600241a29ffbf322d8ee30c0498f1e81e27c0baf9e9",
      "signType": "SHA-256",
      "reqData": {
        "date": "20170807",
        "dateTime": "20170807114653",
        "extendInfoEncrypType": "",
        "amount": "0.10",
        "orderNo": "201708071144480294",
        "payNoticePara": "cn.com.ctree.service.impl.OrderNoticeServiceImpl",
        "riskLevel": "",
        "cardType": "",
        "mobile": "",
        "merchantSerialNo": "15005540484760807114653",
        "agrNo": "85fb8ba400223194ed6f85960317bbd7",
        "lon": "",
        "extendInfo": "",
        "userID": "1500554048476",
        "signNoticePara": "cn.com.ctree.service.impl.OrderNoticeServiceImpl",
        "signNoticeUrl": "http://112.74.162.130/client-api/bank/signnotify",
        "clientIP": "218.19.136.243",
        "expireTimeSpan": "1440",
        "payNoticeUrl": "http://112.74.162.130/client-api/bank/paynotify",
        "returnUrl": "http://lock.ctree.com.cn:8090/cmbpay_success",
        "lat": "",
        "branchNo": "0010",
        "merchantNo": "000089"
      }
    }
  },
  "detail": "success",
  "message": "success"
}

解释:
1.return_url是用来当支付完成后用户点击返回商户按钮后判断支付成功跳转界面或者提示的条件
2.招行提供的支付URL:http://121.15.180.66:801/NetPayment/BaseHttp.dll?MB_EUserPay
3.将后台提供cmbpay实体类转成json字符串,再转NSData,使用post请求加载。

代码:

//我用的是YTKRequest网络框架,此处获取调取一网通需要的实体类(后台返回)
NSString *return_url = @"http://lock.ctree.com.cn:8090/cmbpay_success";
    PayOrderRequest *req = [[PayOrderRequest alloc] initWithorder_no:self.order_no pay_type:_pay_type return_url:return_url];
    [self showWaitingDialog:@"正在调起一网通..."];
    [req startWithCompletionBlockWithSuccess:^(__kindof YTKBaseRequest * _Nonnull request) {
        PayOrderRequest *req = (PayOrderRequest *)request;
        PayOrderResult *result = [req result];
        if ([result isSuccess]) {
            [self hideWaitingDialog];
            NSString *pay_url = @"http://121.15.180.66:801/NetPayment/BaseHttp.dll?MB_EUserPay";
            NSString *pay_data = [NSString stringWithFormat:@"jsonRequestData=%@",[result.data.cmbpay toJSONString]];
            //使用scheme跳转界面,可用系统pushViewController跳转
            [MGJRouter openURL:@"mollyfantasy://cmb_pay" withUserInfo:@{@"pay_url":pay_url,@"pay_data":pay_data,@"return_url":return_url} completion:nil];
        }else{
            [self hideWaitingDialog:result.message];
        }
    } failure:^(__kindof YTKBaseRequest * _Nonnull request) {
        [self hideWaitingDialog:NETERROR];
    }];

2.加载webView界面
EUserPayViewController.h

#import "BaseViewController.h"
#import "PayCmbpayEntity.h"

@interface EUserPayViewController : BaseViewController

@property(nonatomic,strong) NSString *pay_url;  //招行提供的url

@property(nonatomic,strong) NSString *pay_data; //后台返回的实体类json字符串

@property(nonatomic,strong) NSString *return_url; //判断是否等于webView截取到的url,用于点击返回按钮调回商户

@end

EUserPayViewController.m

- (void)loadWeb{
    
    NSLog(@"==%@",_pay_data);
    NSData *data = [_pay_data dataUsingEncoding:NSUTF8StringEncoding];
    NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL:[NSURL URLWithString:_pay_url]];
    [request setHTTPMethod:@"POST"];
    [request setHTTPBody:data];
    _webView = [[UIWebView alloc] initWithFrame:CGRectMake(0, 0, KMainScreenWidth, KMainScreenHeigth - 64)];
    _webView.delegate = self;
    [self.view addSubview:_webView];
    [_webView loadRequest:request];
}
- (BOOL)webView:(UIWebView *)_webView
shouldStartLoadWithRequest:(NSURLRequest *)request
 navigationType:(UIWebViewNavigationType)navigationType
{
    
    NSURL *url = request.URL;
    _catch_url = [url absoluteString];
    if ([_catch_url isEqualToString:_return_url] ) {//截取url,判断是否与传到此界面的url是否一致,一致做支付成功处理返回商户
        [self.navigationController popViewControllerAnimated:YES];
        //使用scheme跳转界面,可用系统pushViewController跳转
        [MGJRouter openURL:@"mollyfantasy://payment_success"];
    }
    
    return YES;
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,456评论 5 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,370评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,337评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,583评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,596评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,572评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,936评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,595评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,850评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,601评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,685评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,371评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,951评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,934评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,167评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,636评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,411评论 2 342

推荐阅读更多精彩内容