由于公司的业务需要,为了节省申请开通微信支付的时间和人力,公司决定使用微信h5支付。这样即节省了时间,同时以后所有的APP都能使用h5支付,既方便又快捷。
但是真正做的时候问题来了,当你支付成功之后或者是取消支付的时候会跳转到Safari浏览器,这就很尴尬了,完全无用户体验啊。当时看着Android可以直接返回到APP,心里瞬间不爽了。开始埋怨苹果公司了,但是由于公司的业务必须要做h5,没办法开始找办法解决。
首先你在Xcode中,选择你的工程设置项,选中“TARGETS”一栏,在“info”标签栏的“LSApplicationQueriesSchemes“添加weixin
进入微信查了一下,发现需要设置Referer这个请求头的参数,当然微信也给出了例子微信h5支付其他常见错误。针对于这个问题在网上搜索了一下发现有专门针对于微信h5支付设置Referer的文章iOSwebView设置Referer,在这里我给大家贴一下代码吧!
#pragma mark - MajordomoWKWebViewDelegate
-(void)webView:(WKWebView*)webView decidePolicyForNavigationAction:(WKNavigationAction*)navigationAction decisionHandler:(void(^)(WKNavigationActionPolicy))decisionHandler
{
NSString *url = navigationAction.request.URL.absoluteString;
if ([url containsString:@"https://wx.tenpay.com/cgi-bin/mmpayweb-bin/checkmweb?"] || [url rangeOfString:@"https://wx.tenpay.com"].location != NSNotFound) {
#warning 链接不要拼接redirect_url,如果拼接了还是会返回到浏览器的
//这里把webView设置成一个像素点,主要是不影响操作和界面,主要的作用是设置referer和调起微信
WebChatPayH5VIew*h5View = [[WebChatPayH5VIewalloc]initWithFrame:CGRectMake(0,0,1,1)];
//url是没有拼接redirect_url微信h5支付链接
[h5ViewloadingURL:url withIsWebChatURL:NO];
[self.viewaddSubview:h5View];
decisionHandler(WKNavigationActionPolicyCancel);
return;
}
#warning todo -处理支付宝h5支付返回问题
NSString *urlStr = [navigationAction.request.URL.absoluteString stringByRemovingPercentEncoding];
DLOG(@"urlStr == %@",urlStr);
NSLog(@"当前加载的webView decidePolicyForNavigationAction:\n%@",webView.URL.absoluteString);
if([urlStrhasPrefix:@"alipayqr://"] || [urlStrisStartWithString:@"alipay"] || [urlStrhasPrefix:@"alipay://"]) {
NSMutableString* tmpUrlStr = urlStr.mutableCopy;
if([urlStrcontainsString:@"fromAppUrlScheme"]) {
NSDictionary* tmpDic = [selfdictionaryWithUrlString:tmpUrlStr];
DLOG(@"tmpDic == %@",tmpDic);
NSString* tmpValue = [tmpDicvalueForKey:@"fromAppUrlScheme"];
tmpUrlStr = [[tmpUrlStrstringByReplacingOccurrencesOfString:tmpValue withString:@"panda"] mutableCopy];
DLOG(@"tmpUrlStr == %@",tmpUrlStr);
tmpUrlStr = [[tmpUrlStrstringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding] mutableCopy];
}
NSURL * newURl = [NSURL URLWithString:tmpUrlStr];//navigationAction.request.URL;//[NSURL URLWithString:urlStr];//
[[UIApplication sharedApplication]openURL:newURl];
}
//如果是跳转一个新页面
if(navigationAction.targetFrame==nil) {
[webViewloadRequest:navigationAction.request];
}
decisionHandler(WKNavigationActionPolicyAllow);
self.loadUrl= webView.URL.absoluteString;
}
-(NSDictionary*)dictionaryWithUrlString:(NSString*)urlStr
{
if(urlStr && urlStr.length&& [urlStrrangeOfString:@"?"].length==1) {
NSArray *array = [urlStr componentsSeparatedByString:@"?"];
if(array && array.count==2) {