微信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支付,提示商家参数格式有误的更多相关文章

  1. 微信h5支付出现“商家参数格式有误,请联系商家解决”

    在浏览器进行微信h5支付时出现:

  2. “商家参数格式有误”应用切微信H5支付完美解决方案

    一.业务场景发生 最近在跟一些合作公司作业务对接,在对方的APP中接入我们的H5支付,包括微信和支付宝. 那就开搞,进展顺利,貌似一切都在掌握之中,给到对方一个链接即可调起支付.形如: https:/ ...

  3. 安卓系统源码编译系列(六)——单独编译内置浏览器WebView教程

    原文                   http://blog.csdn.net/zhaoxy_thu/article/details/18883015                 本文主要对从 ...

  4. andriod之应用内置浏览器 webview

    参考:http://my.eoe.cn/694183/archive/10476.html http://blog.csdn.net/it_ladeng/article/details/8136534 ...

  5. appium常见问题04_查看andriod内置浏览器webview版本

    方法一:手机上设置中查看 设置-->应用程序管理-->全部-->Android System WebView 方法二:adb指令查看(前提,已安装android sdk环境) 1,w ...

  6. 安卓微信对接H5微信支付出现“商家参数有误,请联系商家解决”的问题处理

    最近遇到客户在对接我们微信支付的时候,一些商家反馈在用户支付的过程中会出现报错,出错的截图如下: 查看微信官方文档如下:https://pay.weixin.qq.com/wiki/doc/api/H ...

  7. 微信内置浏览器浏览H5页面弹出的键盘遮盖文本框的解决办法(转)

    最近在做微信公众号的内嵌页面,发现点击输入框时键盘盖住文本框,找到一段代码解决了这个问题. iOS和android手机都已亲测,需要的可以直接拷贝到代码中使用. js代码如下: $(function ...

  8. 微信内置浏览器的JsAPI(WeixinJSBridge续)[转载]

    原文地址:  http://www.baidufe.com/item/f07a3be0b23b4c9606bb.html 之前有写过几篇关于微信内置浏览器(WebView)中特有的Javascript ...

  9. 微信内置浏览器的JsAPI(WeixinJSBridge续)_Alien的笔记

    微信内置浏览器的JsAPI(WeixinJSBridge续)_Alien的笔记 微信内置浏览器的JsAPI(WeixinJSBridge续)进入全屏 之前有写过几篇关于微信内置浏览器(WebView) ...

随机推荐

  1. 最小生成树算法Kruskal详解

    要讲Kruskal,我们先来看下面一组样例. 4 5 1 2 3 1 4 5 2 4 7 2 3 6 3 4 8 14 画出来更直观一些,就是上面的这张图. 智商只要不是0的(了解最小生成树是什么的童 ...

  2. 1. Python中的基本数据类型、运算、变量

    本文利用的是Python 3.x版本,建议学习3.x版本 Python中的基本数据类型.运算.变量 1. 基本数据类型 1.1 整数 py可以处理任意大小的整数,例如123,1234567891324 ...

  3. SCU Travel

    Travel The country frog lives in has n towns which are conveniently numbered by 1,2,…,n . Among n(n− ...

  4. [TJOI2014] [Bzoj3996] 线性代数 [网络流,最小割]

    由原式,可以推出D=Σ(i=1,n,Σ(j=1,n,A[i]*A[j]*B[i][j]))-Σ(i=1,n,A[i]*C[i]) $D=\sum\limits_{i=1}^{n}\sum\limits ...

  5. Linux imooc learning

    https://www.imooc.com/video/3529 Windows Vs Linux Linux: (other linux overall   https://onedrive.liv ...

  6. 越来越好玩,SPRINGMVC

    了解了JSP和SERVLET的运行机制, 看完SPRING的内容,理解了一些IOC及AOP之后,进入SPRINGMVC和SPRINGBOOT,感觉轻松多啦.

  7. Lifting the Stone 计算几何 多边形求重心

    Problem Description There are many secret openings in the floor which are covered by a big heavy sto ...

  8. codevs 1700 施工方案第二季

    1700 施工方案第二季 2012年市队选拔赛北京  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 黄金 Gold 题解       题目描述 Description c国边防 ...

  9. RSA 数据加密和数字签名算法

    PKCS8EncodedKeySpec pkcs8KeySpec = KeyFactory keyFactory = KeyFactory.getInstance(KEY_ALGORITHM); Pr ...

  10. HTMLParser in python

    You can know form the name that the HTMLParser is something used to parse HTML files.  In python, th ...