ios webview中设置referer

来源:互联网 发布:wow3.35单机版数据库 编辑:程序博客网 时间:2024/06/03 22:48

在接入微信h5支付时遇到商家参数格式错误,请联系商家解决 的错误提示,查了下官方文档应该是下面两个原因导致的:

1. 当前调起H5支付的referer为空导致,一般是因为直接访问页面调起H5支付,请按正常流程进行页面跳转后发起支付,或自行抓包确认referer值是否为空

2. 如果是APP里调起H5支付,需要在webview中手动设置referer,如(
Map extraHeaders = new HashMap();
extraHeaders.put("Referer", "商户申请H5时提交的授权域名");//例如 http://www.baidu.com ))



解决方案:

- (BOOL) webView:(UIWebView*)webView shouldStartLoadWithRequest:(NSURLRequest*)request navigationType:(UIWebViewNavigationType) navigationType {    NSDictionary *headers = [request allHTTPHeaderFields];    BOOL hasReferer = [headers objectForKey:@"Referer"]!=nil;    if (hasReferer) {        // .. is this my referer?        return YES;    } else {        // relaunch with a modified request        dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{            dispatch_async(dispatch_get_main_queue(), ^{                NSURL *url = [request URL];                NSMutableURLRequest* request = [NSMutableURLRequest requestWithURL:url cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:60.0];                [request setHTTPMethod:@"GET"];                [request setValue:@"https://whatever.com" forHTTPHeaderField: @"Referer"];                [self.webView loadRequest:request];            });        });        return NO;    }}

参考资料:https://stackoverflow.com/questions/7913305/specifying-http-referer-in-embedded-uiwebview?noredirect=1