ios h5微信支付(跳回app)

先说一下最简单的h5微信支付的方法,就是直接甩给浏览器处理

 [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"http://xxxxxx.com/pay/ChildAdd.aspx?memberid=会员号"]];

但是这样做,就是不够理想化,项目的需求是跳回app,于是我调整了作战计划,哈哈哈,通过UIWebView 展示上面的h5支付页面

1、添加白名单

选中‘TARGETS’一栏,在‘info’中的‘LSApplicationQueriesSchemes’添加‘weixin’

2、URL Schemes 设置要跟你h5支付申请的域名一致,前面的http,改成www

3、webview

self.webView = [[UIWebView alloc]initWithFrame:CGRectMake(0, 0, WIDTH, HEIGHT)];

    [self.view addSubview:self.webView];

    self.webView.opaque=NO;

    self.webView.delegate=self;

    self.webView.backgroundColor = [UIColor whiteColor];

    NSDictionary *dic = [NSKeyedUnarchiver unarchiveObjectWithData:[aUseDefaults objectForKey:@"KBTOOL_login_Info"]];

 NSString *urlStr = [NSString stringWithFormat:@"http://xxxxxx.com/pay/ChildAdd.aspx?memberid=%@&class=ios",dic[@"MemberId"]];

这里的class=ios,是为了方便后台判断,打开的该h5页面,是ios端还是安卓端。

那么判断的目的是为了从浏览器跳回app时的url标识,因为ios端的浏览器识别跳回自己app,需要www.xxxxx.com://,多冒号双斜杠这样的格式,而安卓那边带冒号斜杠反而调不回自己的app了,这里做一个判断设备

    self.url= [NSURLURLWithString:urlStr];

    NSURLRequest *request = [NSURLRequest requestWithURL:self.url];

    [self.webViewloadRequest:request];

webview 协议方法

-(BOOL)webView:(UIWebView*)webViewshouldStartLoadWithRequest:(NSURLRequest*)requestnavigationType:(UIWebViewNavigationType)navigationType{

NSDictionary*headers = [requestallHTTPHeaderFields];

    BOOLhasReferer = [headersobjectForKey:@"Referer"] !=nil;

    if(hasReferer) {

        NSURL*url = [requestURL];

        NSString*newUrl = url.absoluteString;

        NSLog(@"截取到的url---%@",newUrl);

        if([newUrlcontainsString:@"weixin://"]) {//支付宝是alipays://

            NSRangerange = [newUrlrangeOfString:@"weixin://"];//截取的字符串起始位置

            NSString* resultStr = [newUrlsubstringFromIndex:range.location];//截取字符串

            NSURL*weixinURL = [NSURLURLWithString:resultStr];

            [[UIApplication sharedApplication] openURL:weixinURL options:@{UIApplicationOpenURLOptionUniversalLinksOnly: @NO} completionHandler:^(BOOL success) {}];

            returnNO;

        }

        returnYES;

    }

跳回app的关键代码如下

    else{

        dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{

            dispatch_async(dispatch_get_main_queue(), ^{

                NSURL*url = [requestURL];

                NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:60.0];

                [requestsetHTTPMethod:@"GET"];

这里是跳回app的关键               

浏览器有个特性就是当你的URL是****://的时候,会查找你的schemes,(iOS系统应该在跳转浏览器之前自己有了判断是网址才进浏览器,****://直接会调用APP),从而可以跳转到APP,SO,只要更改这个redirect_url的值等于你的schemes的值加上://,就可以实现跳转回APP

[requestsetValue:@"www.kbzhushou.com://" forHTTPHeaderField:@"Referer"];

                [self.webViewloadRequest:request];

            });

        });

        returnNO;

    }

}

以上就实现了h5支付完成,从浏览器跳回自己app的过程。

以上回到app的页面是,你从哪个页面跳转的,跳回app的时候就会回到哪个页面,如果需要回到其他指定页面,

在appdelegate中,

- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionaryid> *)options {

    if ([url.absoluteString containsString:@"www.kbzhushou.com://"]) {

        //跳到app指定页面

    }

    return YES;

}

你可能感兴趣的:(ios h5微信支付(跳回app))