非内置浏览器WebView 调起H5支付,提示商家参数格式有误
微信H5 支付开发官方文档参考资料: https://pay.weixin.qq.com/wiki/doc/api/H5.php?chapter=15_4
0. 场景描述:在APP 中使用webView 显示第三方H5, H5中涉及到微信支付流程,无法正常支付,提示 “商家参数格式有误,请联系商家解决”。
1. 线索分析:参照微信H5 支付开发官方文档,提及 “如果是APP里调起H5支付,需要在webview中手动设置referer”,具体内容如下,或者参考官方文档:PS@官方文档 -- 致谢

1. 1 解决策略:按照官方文档描述,添加referer 之后,发现仍然提示此错误:
Map<String,String> extraHeaders = new HashMap<String, String>();
extraHeaders.put("Referer", "");
mWebView.loadUrl(mUrl, extraHeaders);
1.1 尝试代码
2. 线索分析:经过询问H5 前端技术人员,反馈referer 需要实时设置更新, 每个页面都要获取上一个界面的referer,然后传递给下一个页面,而不是一层不变。PS@H5前端技术 -- 致谢
2.1 解决策略:通过线索分析,得知两个重要线索 ->
Num 1:referer 需要实时设置更新 -> 需要在WebViewClient -> shouldOverrideUrlLoading() 中实时设置referer, 而不是只在最外层设置referer;
Num 2:每个页面都要获取上一个界面的referer,然后传递给下一个页面 -> 获取上一个界面referer并传递给下一个页面;
2.2 碰到的小问题*#110*# :WebView 中并没有获取referer 的相关方法,referer 是个什么鬼东东,一脸茫然??????????
猜测:根据单词意思,是否是指上一个界面的网址,即页面来源?
尝试:将授权域名作为初始referer ,然后每次保存上一个页面的url 作为下一个页面的referer

mWebView.setWebViewClient(new WebViewClient() {
String referer = "商户申请H5时提交的授权域名";
//覆盖shouldOverrideUrlLoading 方法
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
Map<String,String> extraHeaders = new HashMap<String, String>();
extraHeaders.put("Referer", referer);
view.loadUrl(url, extraHeaders);
referer = url;
return true;//不调用系统的浏览器打开网页
}
});
最终代码
3. 运行代码-》调试-》问题解决。
我们不生产代码, 我们只做大自然的搬运工,转载请说明源地址:http://www.cnblogs.com/lizhilin2016/p/9001452.html
附录:
mWebView.setWebViewClient(new WebViewClient() {
String referer = "商户申请H5时提交的授权域名";
//覆盖shouldOverrideUrlLoading 方法
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
LogUtils.e(TAG, "url = " + url);
if (!url.startsWith("http")) {
if (url.startsWith("协议") && !hasInstalledApp) { // 特殊app,根据协议判断客户端是否存在
return true;
}
try {
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
if (url.startsWith("协议")){ // 根据实际逻辑,外呼app成功之后,看是否需要关闭界面
finish();
}
return true;
} catch (Exception e) { //防止crash (如果手机上没有安装处理某个scheme开头的url的APP, 会导致crash)
return false;
}
}
Map<String,String> extraHeaders = new HashMap<String, String>();
extraHeaders.put("Referer", referer);
view.loadUrl(url, extraHeaders);
referer = url;
return true;//不调用系统的浏览器打开网页
}
});
mWebView.setWebChromeClient(new WebChromeClient());
mWebView.loadUrl(mUrl);
}
扩展版代码
扩展版代码
扩展版代码
非内置浏览器WebView 调起H5支付,提示商家参数格式有误的更多相关文章
- 微信h5支付出现“商家参数格式有误,请联系商家解决”
在浏览器进行微信h5支付时出现:
- “商家参数格式有误”应用切微信H5支付完美解决方案
一.业务场景发生 最近在跟一些合作公司作业务对接,在对方的APP中接入我们的H5支付,包括微信和支付宝. 那就开搞,进展顺利,貌似一切都在掌握之中,给到对方一个链接即可调起支付.形如: https:/ ...
- 安卓系统源码编译系列(六)——单独编译内置浏览器WebView教程
原文 http://blog.csdn.net/zhaoxy_thu/article/details/18883015 本文主要对从 ...
- andriod之应用内置浏览器 webview
参考:http://my.eoe.cn/694183/archive/10476.html http://blog.csdn.net/it_ladeng/article/details/8136534 ...
- appium常见问题04_查看andriod内置浏览器webview版本
方法一:手机上设置中查看 设置-->应用程序管理-->全部-->Android System WebView 方法二:adb指令查看(前提,已安装android sdk环境) 1,w ...
- 安卓微信对接H5微信支付出现“商家参数有误,请联系商家解决”的问题处理
最近遇到客户在对接我们微信支付的时候,一些商家反馈在用户支付的过程中会出现报错,出错的截图如下: 查看微信官方文档如下:https://pay.weixin.qq.com/wiki/doc/api/H ...
- 微信内置浏览器浏览H5页面弹出的键盘遮盖文本框的解决办法(转)
最近在做微信公众号的内嵌页面,发现点击输入框时键盘盖住文本框,找到一段代码解决了这个问题. iOS和android手机都已亲测,需要的可以直接拷贝到代码中使用. js代码如下: $(function ...
- 微信内置浏览器的JsAPI(WeixinJSBridge续)[转载]
原文地址: http://www.baidufe.com/item/f07a3be0b23b4c9606bb.html 之前有写过几篇关于微信内置浏览器(WebView)中特有的Javascript ...
- 微信内置浏览器的JsAPI(WeixinJSBridge续)_Alien的笔记
微信内置浏览器的JsAPI(WeixinJSBridge续)_Alien的笔记 微信内置浏览器的JsAPI(WeixinJSBridge续)进入全屏 之前有写过几篇关于微信内置浏览器(WebView) ...
随机推荐
- The Forth Week
1.复制/etc/skel目录为/home/tuser1,要求/home/tuser1及其内部文件的属组和其它用户均没有任何访问权限. cp -r /etc/skell /home/tuser1 ; ...
- 小白神器 - Django - 起步
小白神器 - Django - 起步 一. Django下载 1. 命令行 pip install django==1.11.16 pip install django==1.11.16 -i ht ...
- PAT 1102 Invert a Binary Tree
The following is from Max Howell @twitter: Google: 90% of our engineers use the software you wrote ( ...
- 《hello-world》第八次团队作业:Alpha冲刺-Scrum Meeting 4
项目 内容 这个作业属于哪个课程 2016级计算机科学与工程学院软件工程(西北师范大学) 这个作业的要求在哪里 实验十二 团队作业8:软件测试与Alpha冲刺 团队名称 <hello--worl ...
- Ac自动机基础题集合
Ac_automaton的板子打熟以后发现碰到题不会做,而且还是比较纯的板子,只要改几处地方就可以,Ac_automation有许多优秀而fantasy的性质,下面粘几个题,来记录一下做题的心得. 1 ...
- noip模拟赛 黑骑士
题目描述江爷爷给你出了一道题:给你一个图,保证每个点最多属于一个简单环,每个点度数最多为3,求这个图有多少“眼镜图形个数”保证图联通哦~其中“眼镜图形个数”,定义为三元组(x,y,S),其中x和y表示 ...
- [cf 599D] Spongebob and Squares
据题意: $K=\sum\limits_{i=0}^{n-1}(n-i)*(m-i)$ $K=n^2m-(n+m)\sum{i}+\sum{i^2}$ 展开化简 $m=(6k-n+n^3)/(3n^2 ...
- MyEclipse10及插件安装教程(附安装包和破解文件)
MyEclipse10安装包+破解文件:MyEclipse10安装包.MyEclipse10破解文件MyEclipse10安装包地址:http://pan.baidu.com/s/1pJrCLB1My ...
- Android:创建ZeroMQ的客户端
这里我们将给出一个subscribe模式的客户端示例程序,如下: private class ZeroMQMessageTask extends AsyncTask<String, Void, ...
- 查看Linux的CPU信息,核数等
# 总核数 = 物理CPU个数 X 每颗物理CPU的核数 # 总逻辑CPU数 = 物理CPU个数 X 每颗物理CPU的核数 X 超线程数 # 查看物理CPU个数 cat /proc/cpuinfo| ...