非内置浏览器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) ...
随机推荐
- 20.混合使用match和近似匹配实现召回率与精准度的平衡
主要知识点: 召回率的慨念 精准度的慨念 match和近似匹配混合使用方法 召回率(recall):比如你搜索一个java spark,总共有100个doc,能返回多少个doc作为结果 ...
- 第三节:初识pandas之DataFrame(上)
DataFrame是Python中Pandas库中的一种数据结构,它类似excel,是一种二维表.
- Keil MDK下如何设置非零初始化变量(复位后变量值不丢失)
一些工控产品,当系统复位后(非上电复位),可能要求保持住复位前RAM中的数据,用来快速恢复现场,或者不至于因瞬间复位而重启现场设备.而keil mdk在默认情况下,任何形式的复位都会将RAM区的非初始 ...
- java常见知识
在JSP页面获取当前项目名称的方法: 方法1: <%= this.getServletContext().getContextPath() %> 方法2: 使用EL表达式 ${pageCo ...
- 【codeforces 767A】Snacktower
[题目链接]:http://codeforces.com/contest/767/problem/A [题意] 每天掉一个盘子下来;盘子有大小从1..n依次增大n个盘子; 然后让你叠盘子; 最底层为n ...
- [bzoj3061][Usaco13Feb]Partitioning the Farm_动态规划_状压dp
Partitioning the Farm bzoj-3061 Usaco13Feb 题目大意:给定一个n*n的方格图,用k条贯穿方格图的直线将整个方格图分割,使得每一块的权值和的最大值最小. 注释: ...
- 查看当前Java进程工具jps(转)
jps是JDK提供的一个查看当前Java进程的小工具, 可以看做是JavaVirtual Machine Process Status Tool的缩写.非常简单实用. 命令格式: jps [optio ...
- 一道Twitter面试题的解答
前言 这道面试题是我在博客园首页的一篇文章中看到的,面试题我简单的提取出来了,文章链接:http://news.cnblogs.com/n/192014/. 在我用JS实现了我自己的想法之后,我再一次 ...
- hibernate之关于一对一单向,双向关联映射
[hibernate]之关于一对一单向,双向关联映射 首先我们来看,Hibernate官方对于一对一单向关联的解释: 基于外键关联的单向一对一关联和单向多对一关联差点儿是一样的. 唯一的不同就是单向一 ...
- android 5.0新特性学习总结之下拉刷新(一)
android 5.0 后google最终在 support v4 包下 添加了下拉刷新的控件 项目地址: https://github.com/stormzhang/SwipeRefreshLayo ...