一骏融、報錯“商家參數(shù)格式有誤链嘀,請聯(lián)系商家解決”解決方案:
1、背景:
我方開發(fā)了一套h5商城档玻,購買怀泊、下單、喚起微信進行微信h5支付误趴、使用等都由h5頁面端開發(fā)完成霹琼,第三方app端只管給個入口訪問這套h5商城部署后的鏈接即可。
2凉当、聲明:
一說起微信h5支付枣申,很多人都以為是微信jssdk支付(在微信公眾號使用的支付方式),實際h5端微信支付分為兩種:jssdk支付看杭、微信h5支付忠藤,我這里說的就是微信h5支付(非微信環(huán)境使用的微信支付方法)。
3楼雹、遇到的問題:
第三方app訪問我方h5商城鏈接模孩,到喚起微信支付時,拿到mweb_url后安卓端卻直接用手機自動瀏覽器打開贮缅,然后就報錯:“商家參數(shù)格式有誤榨咐,請聯(lián)系商家解決”。
4谴供、問題分析原因:
拿到mweb_url后安卓端不應(yīng)該直接喚起自帶瀏覽器直接打開mweb_url块茁,而是應(yīng)該讓h5頁面拿到mweb_url后,直接打卡即可永淌,否則前往微信端后會丟失 referer 昌跌。
以下是我遇到問題時跳轉(zhuǎn)代碼:
window.location.href = args.mweb_url;
至于該打開url方式為什么會喚起自帶瀏覽器仰禀,我沒有去研究具體原因,因為經(jīng)我測試只有部分app用這樣的方法是喚起自帶瀏覽器萍诱,部分app根本不會出現(xiàn)這樣的問題裕坊,很有可能是第三方app的原因?qū)е拢@種問題很難定位饵蒂,比較詭異
那怎么辦酱讶?把問題拋給對方解決渊迁?第三方往往是爸爸琉朽,人家會管你箱叁? 只能自己硬著頭皮各種嘗試蝌蹂,各種研究調(diào)試了孤个,不是自己的問題也得找問題斥废,哎,,,,,,,,,,,,,,,牡肉。
5统锤、解決方案1(不推薦,因為需要雙方配合):
h5頁面拿到mweb_url后發(fā)送給app端,app拿到后進行二次打開焕蹄,實現(xiàn)代碼大致如下:
webView.setWebViewClient(new WebViewClient() {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
if (url.startsWith("weixin://wap/pay?")) {
//如果return false 就會先提示找不到頁面鸦泳,然后跳轉(zhuǎn)微信
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支付完跳轉(zhuǎn)safari瀏覽器無法返回app解決方案:
在ios app端,嵌入的h5支付芋肠,支付完成后會自動跳轉(zhuǎn)到safari瀏覽器無法返回app帖池,此時在safari瀏覽器打開的剛剛好是h5頁面的主頁睡汹,所以囚巴,機會點來了:在safari瀏覽器打開的那個h5頁面判斷是否是safari瀏覽器彤叉,如果是通過app協(xié)議跳轉(zhuǎn)回到app:
backApp() {
if(this.isSafari()){
window.location.href = 'shanxitoutiao://'
}
},
isSafari() {
if((/Safari/.test(navigator.userAgent) && !/Chrome/.test(navigator.userAgent))) {
return true;
}
return false
}