今天遇到一个恼火的问题,我们对接微信的H5支付,采用了前后端分离,后端接口返回了支付的url,ios正常唤起微信支付,android却始终提示商家参数格式有误请联系商家解决,如图
按照微信提供的文档,我们先加了header,并确保了加的Referer就是微信商户配置的域名
发现并没有什么卵用,作为一个被微信文档坑过无数次的有为青年来说,早就习以为常了
private void loadUrl(String loadUrl) { Map<String, String> headers = new HashMap<>(); headers.put("Referer", "huaaiangel.com"); Log.i("Ok", "Url :" + loadUrl); if (null != mContentWv && !TextUtils.isEmpty(loadUrl)) { mContentWv.loadUrl(loadUrl, headers); } }
public boolean shouldOverrideUrlLoading(WebView view, String url) { //微信H5支付核心代码 if (url.startsWith("weixin://wap/pay?")) { Intent intent = new Intent(); intent.setAction(Intent.ACTION_VIEW); intent.setData(Uri.parse(url)); startActivity(intent); return true; } else { Map<String, String> extraHeaders = new HashMap<>(); extraHeaders.put("Referer", realm); view.loadUrl(url, extraHeaders); } return true; } //处理https请求 @Override public void onReceivedSslError(WebView view, SslErrorHandler handler, android.net.http.SslError error) { handler.proceed(); }
其实到这一步,大多数人的问题都可以解决,但是我的还没有解决
但是我发现,可以只重写onReceivedSslError,拦截url那里不写else就可以,然后返回false,真的是莫名其妙
这就可以了,真的是莫名其妙啊
后端偶然去做做客户端的东西,你就会发现当初的决定多么重要,心里有又默念一遍:幸亏当初没做android