iOS微信系列,WKWebview加载H5进行微信支付返回浏览器解决方案!

问题描述:项目内接入了第三方的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

你可能感兴趣的:(iOS微信系列,WKWebview加载H5进行微信支付返回浏览器解决方案!)