一、报错“商家参数格式有误,请联系商家解决”解决方案:
1、背景:
我方开发了一套h5商城,购买、下单、唤起微信进行微信h5支付、使用等都由h5页面端开发完成,第三方app端只管给个入口访问这套h5商城部署后的链接即可。
2、声明:
一说起微信h5支付,很多人都以为是微信jssdk支付(在微信公众号使用的支付方式),实际h5端微信支付分为两种:jssdk支付、微信h5支付,我这里说的就是微信h5支付(非微信环境使用的微信支付方法)。
3、遇到的问题:
第三方app访问我方h5商城链接,到唤起微信支付时,拿到mweb_url后安卓端却直接用手机自动浏览器打开,然后就报错:“商家参数格式有误,请联系商家解决”。
4、问题分析原因:
拿到mweb_url后安卓端不应该直接唤起自带浏览器直接打开mweb_url,而是应该让h5页面拿到mweb_url后,直接打卡即可,否则前往微信端后会丢失 referer 。
以下是我遇到问题时跳转代码:
window.location.href = args.mweb_url;
至于该打开url方式为什么会唤起自带浏览器,我没有去研究具体原因,因为经我测试只有部分app用这样的方法是唤起自带浏览器,部分app根本不会出现这样的问题,很有可能是第三方app的原因导致,这种问题很难定位,比较诡异
那怎么办?把问题抛给对方解决?第三方往往是爸爸,人家会管你? 只能自己硬着头皮各种尝试,各种研究调试了,不是自己的问题也得找问题,哎,,,,,,,,,,,,,,,。
5、解决方案1(不推荐,因为需要双方配合):
h5页面拿到mweb_url后发送给app端,app拿到后进行二次打开,实现代码大致如下:
webView.setWebViewClient(new WebViewClient() {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
if (url.startsWith("weixin://wap/pay?")) {
//如果return false 就会先提示找不到页面,然后跳转微信
Intent intent = new Intent();
intent.setAction(Intent.ACTION_VIEW);
intent.setData(Uri.parse(url));
startActivity(intent);
return true;
}
return false;
}
@Override
public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) {
//此方法是为了处理在5.0以上Htts的问题,必须加上
handler.proceed();
}
});
解决方案2(推荐,ios和安卓都支持):
var form = document.createElement('form');
document.body.appendChild(form);
form.method = "post";
form.action = args.mweb_url;
form.submit();
document.body.removeChild(form);
二、ios支付完跳转safari浏览器无法返回app解决方案:
在ios app端,嵌入的h5支付,支付完成后会自动跳转到safari浏览器无法返回app,此时在safari浏览器打开的刚刚好是h5页面的主页,所以,机会点来了:在safari浏览器打开的那个h5页面判断是否是safari浏览器,如果是通过app协议跳转回到app:
backApp() {
if(this.isSafari()){
window.location.href = 'shanxitoutiao://'
}
},
isSafari() {
if((/Safari/.test(navigator.userAgent) && !/Chrome/.test(navigator.userAgent))) {
return true;
}
return false
}
网友评论