问题描述:项目内接入了第三方的web页面,此页面带有微信支付功能,跳转到微信后返回的是浏览器并非App。
ps:博主解决过程坎坷的不行,遇到这个问题首先去微信的开发论坛看了下,结果看到微信开发人员说不支持,扎心惹。
微信但是理论上应该是可以的,网上查阅了一下也有人说可以。
思路:h5唤起微信支付应该也是通过一条链接传值给微信进行支付的,这条链接是否带有支付完返回的地址呢,答案是肯定的,记录一下。
解决方案:
1、在wkwebview的代理: - (void)webView:(WKWebView*)webViewdecidePolicyForNavigationAction:(WKNavigationAction*)navigationActiondecisionHandler:(void(^)(WKNavigationActionPolicy))decisionHandler;
中拦截到唤起微信的链接,示例链接:
https://wx.tenpay.com/cgi-bin/mmpayweb-bin/checkmweb?prepay_id=wx27154434905468de41757e925ea0f40000&package=1303961194&redirect_url=https%3A%2F%2Fms.czb365.com%2Fpay
redirect_url 就是微信支付完成后/支付失败/取消支付 后返回的地址,我们新建一个URL Schemes,格式为:aaa.bbb.com (aaa我们自定义,bbb.com为该网页在微信平台所填写的域名,如果是第三方的web页面,可以通过唤起微信支付时,打印链接出来尝试使用),示例中的bbb.com是 ms.czb365.com.
2、将示例链接转字典,再判断是否带有redirect_url ,(2.1)在redirect_url中拼接上我们的URL Schemes。得到 新链接https://wx.tenpay.com/cgi-bin/mmpayweb-bin/checkmweb?prepay_id=wx27154434905468de41757e925ea0f40000&package=1303961194&redirect_url=aaa.bbb.com://https%3A%2F%2Fms.czb365.com%2Fpay
3、设置Referer。直接贴代码
NSString*urlStr;
if ([[dic allKeys] containsObject:@"redirect_url"]) {
urlStr = // 进行(2.1)
NSMutableURLRequest *requestTest = [[NSMutableURLRequest alloc]initWithURL:[NSURL URLWithString:@"2中得到的新链接"]];
[request3setValue:@"aaa.bbb.com://" forHTTPHeaderField:@"Referer"];
[self.webViewloadRequest:requestTest];
decisionHandler(WKNavigationActionPolicyCancel);
}
else
{
urlStr = navigationAction.request.URL.absoluteString;
decisionHandler(WKNavigationActionPolicyAllow);
}
4、 唤起微信:
if ([webView.URL.absoluteString containsString:@"https://wx.tenpay.com/cgi-bin/mmpayweb-bin/checkmweb"])
{
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:absoluteString]];
}
基本步骤就是这样。如果出现参数错误联系商家,请仔细阅读。
很少写文章,希望能帮助到你。
也可以参考:https://www.cnblogs.com/Life-Record/p/8472319.html
网友评论