美文网首页iOS接下来要研究的知识点
解决H5微信支付返回跳转问题

解决H5微信支付返回跳转问题

作者: 程序员不务正业 | 来源:发表于2018-04-10 13:18 被阅读1961次

使用iOS打开微信支付页面需要设置webview的Referer

Referer一般为http://www.xxx.com或者直接www.xxx.com

在Info中URL Type添加该Referer为打开自己app的scheme

嗯,就这样结束!!!

打开微信可能遇到的坑,需添加这个代理,实现部分内容

- (void)webView:(WKWebView *)webView decidePolicyForNavigationAction:(WKNavigationAction *)navigationAction decisionHandler:(void (^)(WKNavigationActionPolicy))decisionHandler {
    
    NSDictionary *referDict = [[NSUserDefaults standardUserDefaults] objectForKey:@"loadUrlWithRefer"];
    
    if (![ICTools isObjEmpty:referDict]) {
        NSString *url = referDict[@"url"];
        NSString *refer = referDict[@"refer"];
        NSDictionary *headers = [navigationAction.request allHTTPHeaderFields];
        NSString * referer = [headers objectForKey:@"Referer"];
        BOOL isRightReferer = [referer isEqualToString:refer];
        if (isRightReferer) {
            decisionHandler(WKNavigationActionPolicyAllow);
        } else {
            decisionHandler(WKNavigationActionPolicyCancel);

            if ([url isEqualToString:[navigationAction.request.URL absoluteString]]) {
                NSMutableDictionary * muDict = [[NSMutableDictionary alloc] initWithDictionary:headers];
                [muDict setObject:refer forKey:@"Referer"];
                dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
                    dispatch_async(dispatch_get_main_queue(), ^{
                        NSURL *url = [navigationAction.request URL];
                        NSMutableURLRequest* request = [NSMutableURLRequest requestWithURL:url cachePolicy:NSURLRequestReloadIgnoringCacheData timeoutInterval:60.0];
                        request.allHTTPHeaderFields = muDict;
                        [webView loadRequest:request];
                    });
                });
            }
            [[NSUserDefaults standardUserDefaults] removeObjectForKey:@"loadUrlWithRefer"];// 使用完成后移除
        }
    } else {
        NSURL *url = navigationAction.request.URL;
        ICLog(@"decidePolicyForNavigationAction :%@", [url scheme]);
        NSString *scheme = [url scheme];
        if ([scheme isEqualToString:kTGJSBridgeProtocolScheme]) {// 自定义scheme用于js于native交互使用,正常h5支付可忽略
            [self dispatchNotification:[url absoluteString] fromWebView:webView];
        }  else {
            //forward
            if (![scheme isEqualToString:@"https"] && ![scheme isEqualToString:@"http"]) {
                [[UIApplication sharedApplication] openURL:url];
            }
        }
        decisionHandler(WKNavigationActionPolicyAllow);
    }
}

相关文章

网友评论

  • 红鲤鱼蓝鲤鱼与驴:兄弟,你这referDict存的都是什么啊。 能不能交流一下,这两天正在做这个,遇到了困难
    程序员不务正业:@红鲤鱼蓝鲤鱼与驴 就一个判空的。3153256054需要的话加一下
    红鲤鱼蓝鲤鱼与驴:@程序员不务正业 ICTools isObjEmpty:referDict]这个呢, 介意用qq交流么,我被这个问题困扰好几天了。。
    程序员不务正业:@红鲤鱼蓝鲤鱼与驴 开发人员在微信开发者官网注册时提交的地址

本文标题:解决H5微信支付返回跳转问题

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