前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >解决H5微信支付返回跳转问题

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

作者头像
程序员不务正业
发布2018-06-14 15:21:34
6.2K0
发布2018-06-14 15:21:34
举报

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

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

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

嗯,就这样结束!!!

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

代码语言:javascript
复制
- (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);
    }
}
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018.04.10 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 打开微信可能遇到的坑,需添加这个代理,实现部分内容
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档