美文网首页
ios h5微信支付(跳回app)

ios h5微信支付(跳回app)

作者: 肉肉要次肉 | 来源:发表于2020-04-29 16:55 被阅读0次

    先说一下最简单的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:(NSDictionary<UIApplicationOpenURLOptionsKey,id> *)options {

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

            //跳到app指定页面

        }

        return YES;

    }

    相关文章

      网友评论

          本文标题:ios h5微信支付(跳回app)

          本文链接:https://www.haomeiwen.com/subject/bisdwhtx.html