iOS实现微信H5支付完成后返回原APP而不打开Safari或没反应...
由于公司多个APP都要用微信支付, 需要申请好多APPID, 所以避免这些申请的过程和时间的浪费, 把微信H5支付集成到多款APP上.
下面说一下开发过成:
首先去微信商户后台去申请开通H5支付, 假设支付域名填写的 www.maimaicn.com,注意是顶级域名,不是二级或三级的子域名
可能会出现以下问题:
"出现商家参数格式有误,请联系商家解决"
会出现 "商家存在未配置的参数,请联系商家解决"
那就把aaa.com注册到商户后台就可以解决了。
- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType {
/// 配置微信H5支付 WEB的Referer
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:@"mai.maimaicn.com://” forHTTPHeaderField: @"Referer"];
[_webView loadRequest:request];
});
});
return NO;
}
}
解决办法:
把referer与scheme设置成注册的顶级域名的多级子域名
A: referer: mai.maimaicn.com:// scheme: mai.maimaicn.com
B: referer: tian.maimaicn.com:// scheme: tian.maimaicn.com
C: referer: jin.maimaicn.com:// scheme: jin.maimaicn.com
通过测试,完美运行。理论上这个解决方案可以支持无数个APP,也同时解决了微信开放平台APP支付的限制个数