这可能是你见过最有效的微信H5支付几大问题解决方案
因为项目中用到了支付,目前国内的支付方式无非就是支付宝、微信、银联支付。今天就不讨论支付宝和银联支付了,做过的都知道,支付宝比较简单,相对于前端来说,不算太复杂,近乎完美(毕竟人家也是做支付的)。不过微信真的坑不少啊!
1.商户参数格式不正确,请联系商户解决
说起来真的是想哭啊,特别是用vue这种单页应用开发项目的人,一开始都很头疼,我一开始也遇到过这个问题,百度搜了也没结果,最后研究了一下文档,才找到问题所在!
首先我们来看一下微信对于这个错误的解释:
我们直接看第一个提示,1、当前H5支付为空,一般是因为访问页面直接调用H5支付,请按照正常流程跳转页面发起支付,或者自行抓包确认值是否为空。
我先说一下这个问题的解决办法:
无论你使用的是 vue 还是 ,在你的项目中找到 .html ,通常在文件夹中,
注释掉 .html
此代码表示发起的请求将不被执行。
那么我们该如何理解这一点呢?
关于
它是HTTP请求的一部分,当浏览器向网页服务器发送请求时,一般都会带上它,告诉服务器这个网页是从哪个页面链接过来的,这样服务器才能得到一些信息进行处理。比如你在百度上搜索语雀,可以看到控制台网络,里面有: 表示来源。
的作用我就不细说了,一般用来防止盗链和恶意请求,下期可以单独介绍一下。
Vue第一次用脚手架生成的时候是默认不带的,所以付款的时候一定要检查.html!!!
2.商户有未配置参数,请联系商户解决
首先我们看一下微信文档里的解释:

意思很明显就是域名配置不正确,这个问题是接上一个的,当你配置好了之后,微信也能获取到你的来源,也能获取到你原地址里的域名,如果你在微信开放平台授权的H5支付安全域名和微信开放平台里的不一致,就会报这个错。
如果你能确保自己已经在微信开放平台授权了h5支付安全域名,并且该域名已经注册过,那么很有可能不会出现这个问题。
在微信开放平台授权h5支付安全域名的时候,一般会告诉你设置一级域名还是二级域名。一般来说,设置了一级域名之后,二级域名和三级域名就会自动通过,不需要再配置二级和三级域名。但是,有些人还是分不清一级域名和二级域名。
一级域名与二级域名的区别
1. 定义不同
顶级域名(或一级域名),英文:Top-,-(TLDs),又译国际顶级域名。是互联网DNS层次结构中最高级的域名;
二级域名(或称次级域名;英文:-;英文缩写:SLD)是互联网DNS层次中,位于顶级域名之下的域名。二级域名是域名的倒数第二部分,例如在域名中,二级域名为 。
2.域名组成不同
一级域名由合法字符串+域名后缀组成,比如这种形式的域名就是一级域名,lisp为域名主体,.com为域名后缀,.net也可以作为域名后缀。
二级域名是一级域名下的主机名,例如在一级域名前面添加的一串字符串。
二级域名依附于一级域名的存在而存在,也就是说,如果顶级域名消失,二级域名也将不复存在,反之,如果二级域名网站不再运营,主域名不会受到影响。
3.如果同一个订单号调用统一下单接口,没有支付,然后使用其他支付方式支付,会报错:201重复订单错误
这个错误一般发生在后台,PHP也好,Java也好,微信处理订单的方式和支付宝不一样,比如你调用了统一下单接口,但是还没有支付,这时候你用同样的参数去调用H5支付的统一下单接口,必然会报这个错。
这个问题很好解决,在调用统一下单接口给$赋值的时候,加上一个区分字符即可,如:
$out_trade_no = 'MWEB'.$out_trade_no; //H5支付 $out_trade_no = 'WWEB'.$out_trade_no; //native支付
这样你就不会收到错误。
注意:处理支付成功回调逻辑的时候,不要忘记去掉$的前几位数字
终于
在前端代码中获取支付链接后,
window.location.href= MWEB_URL + '&redirect_url=' + encodeURIComponent(redirect_url);
完成,今天就到此为止!