2023年8月1日发(作者:)
ios浏览器微信⽀付回调页⾯_iOSH5微信⽀付和微信⽀付完成之后跳转回APP最近碰到⼀个需要⽤H5⽀付的商城,痛苦了⼀整天,查找了N多的资料,终于还是苦尽⽢来了。话不多说,⼲货来了。我⽤的是WKWebView,套路是⼀样的。1.⾸先,设置⽩名单,确保你能顺利跳转微信。设置⽩名单2.在webView的代理中,截获跳转微信的HTTP(下⾯的所有代码都是在这个⽅法中实现)- (void)webView:(WKWebView*)webView decidePolicyForNavigationAction:(WKNavigationAction*)navigationActiondecisionHandler:(void(^)(WKNavigationActionPolicy))decisionHandler;代码如下:NSURL*url = ;NSString*urlString = teString;//调⽤微信if([urlStringrangeOfString:@"weixin://wap/pay"].location!=NSNotFound) {//阻⽌跳转decisionHandler(WKNavigationActionPolicyCancel);BOOLcanOpen = [[UIApplicationsharedApplication]canOpenURL:url];if(canOpen) {[[UIApplication sharedApplication] openURL:url];}return;}OK这两步是让跳转到微信的,但是⽀付完成或者取消⽀付之后会跳到浏览器很⽆语。SO,请接着看。3.设置schemes,让程序外能回到APP设置schemes4.更改参数redirect_url,实现回到APPstatic const NSString*schemeString =@"";static const NSString*redirectString =@"redirect_url";NSString *jumpString = @"/cgi-bin/mmpayweb-bin/checkmweb";NSString*changeredirectString =[NSStringstringWithFormat:@"%@=%@://",redirectString,schemeString];//更改微信参数redirect_url 只要把redirect_url改成scheme的地址加上://就能跳转回APPif([urlString hasPrefix:jumpString] && ![urlString containsString:changeredirectString]) {decisionHandler(WKNavigationActionPolicyCancel);dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{dispatch_async(dispatch_get_main_queue(), ^{NSRange redirectRange = [urlString rangeOfString:@"redirect_url"];//更改redirect_url 为scheme的地址NSString*redirectUrl = [[urlString substringToIndex:on]stringByAppendingString:changeredirectString];//记录本来跳转的地址,⽤于APP回来之后的刷新NSArray*reloadArray = [urlString componentsSeparatedByString:@"redirect_url="];if(>1) {URL= [[reloadArray lastObject]stringByRemovingPercentEncoding];}else{URL=[NSString stringWithFormat:@"https:%@",schemeString] ;}//发送请求NSMutableURLRequest* request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:redirectUrl]cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:10.0];[request setHTTPMethod:@"GET"];//referer为空会提⽰"出现商家参数格式有误,请联系商家解决"//设置Referer 此地址必须注册到商户后台[requestsetValue:@"://"forHTTPHeaderField:@"Referer"];[wloadRequest:request];});});return;}然⽽,这样⼦仍然不够好,回来的时候,是个⽩屏,因为你的URL是错误的,H5也不能识别,SO,最后⼀步。5.重新加载正确的URLif([urlString isEqualToString:[NSStringstringWithFormat:@"%@://",schemeString]]) {decisionHandler(WKNavigationActionPolicyCancel);dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{dispatch_async(dispatch_get_main_queue(), ^{NSMutableURLRequest* request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:URL]cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:10.0];[w loadRequest:request];});});return;}这个有两个⽅法,直接写在webView的代理中,或者监听APP的⽣命周期都可以。综上所诉,可以完美的在⽀付完成跳回APP.最后 加上decisionHandler(WKNavigationActionPolicyAllow);作为正确的H5跳转。有什么问题请直接提问,看到的话会⽴刻回复的,有更好的⽅式⽅法⿇烦⼤佬们不吝赐教,谢谢。
2023年8月1日发(作者:)
ios浏览器微信⽀付回调页⾯_iOSH5微信⽀付和微信⽀付完成之后跳转回APP最近碰到⼀个需要⽤H5⽀付的商城,痛苦了⼀整天,查找了N多的资料,终于还是苦尽⽢来了。话不多说,⼲货来了。我⽤的是WKWebView,套路是⼀样的。1.⾸先,设置⽩名单,确保你能顺利跳转微信。设置⽩名单2.在webView的代理中,截获跳转微信的HTTP(下⾯的所有代码都是在这个⽅法中实现)- (void)webView:(WKWebView*)webView decidePolicyForNavigationAction:(WKNavigationAction*)navigationActiondecisionHandler:(void(^)(WKNavigationActionPolicy))decisionHandler;代码如下:NSURL*url = ;NSString*urlString = teString;//调⽤微信if([urlStringrangeOfString:@"weixin://wap/pay"].location!=NSNotFound) {//阻⽌跳转decisionHandler(WKNavigationActionPolicyCancel);BOOLcanOpen = [[UIApplicationsharedApplication]canOpenURL:url];if(canOpen) {[[UIApplication sharedApplication] openURL:url];}return;}OK这两步是让跳转到微信的,但是⽀付完成或者取消⽀付之后会跳到浏览器很⽆语。SO,请接着看。3.设置schemes,让程序外能回到APP设置schemes4.更改参数redirect_url,实现回到APPstatic const NSString*schemeString =@"";static const NSString*redirectString =@"redirect_url";NSString *jumpString = @"/cgi-bin/mmpayweb-bin/checkmweb";NSString*changeredirectString =[NSStringstringWithFormat:@"%@=%@://",redirectString,schemeString];//更改微信参数redirect_url 只要把redirect_url改成scheme的地址加上://就能跳转回APPif([urlString hasPrefix:jumpString] && ![urlString containsString:changeredirectString]) {decisionHandler(WKNavigationActionPolicyCancel);dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{dispatch_async(dispatch_get_main_queue(), ^{NSRange redirectRange = [urlString rangeOfString:@"redirect_url"];//更改redirect_url 为scheme的地址NSString*redirectUrl = [[urlString substringToIndex:on]stringByAppendingString:changeredirectString];//记录本来跳转的地址,⽤于APP回来之后的刷新NSArray*reloadArray = [urlString componentsSeparatedByString:@"redirect_url="];if(>1) {URL= [[reloadArray lastObject]stringByRemovingPercentEncoding];}else{URL=[NSString stringWithFormat:@"https:%@",schemeString] ;}//发送请求NSMutableURLRequest* request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:redirectUrl]cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:10.0];[request setHTTPMethod:@"GET"];//referer为空会提⽰"出现商家参数格式有误,请联系商家解决"//设置Referer 此地址必须注册到商户后台[requestsetValue:@"://"forHTTPHeaderField:@"Referer"];[wloadRequest:request];});});return;}然⽽,这样⼦仍然不够好,回来的时候,是个⽩屏,因为你的URL是错误的,H5也不能识别,SO,最后⼀步。5.重新加载正确的URLif([urlString isEqualToString:[NSStringstringWithFormat:@"%@://",schemeString]]) {decisionHandler(WKNavigationActionPolicyCancel);dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{dispatch_async(dispatch_get_main_queue(), ^{NSMutableURLRequest* request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:URL]cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:10.0];[w loadRequest:request];});});return;}这个有两个⽅法,直接写在webView的代理中,或者监听APP的⽣命周期都可以。综上所诉,可以完美的在⽀付完成跳回APP.最后 加上decisionHandler(WKNavigationActionPolicyAllow);作为正确的H5跳转。有什么问题请直接提问,看到的话会⽴刻回复的,有更好的⽅式⽅法⿇烦⼤佬们不吝赐教,谢谢。
发布评论