支付微信公眾號遇到的坑--解決方案


1,微信公眾號的支付流程:

    前后端分離的情況,在微信環境下---如果當前沒有先去請求接口---判斷是否有openid——如果有返回數據,如果沒有--進行重定向(openid.weixin.qq.com)--返回自己的有opendid的頁面

 1,第一個坑

    1, 在vue的項目中,ios環境中,重定向回來頁面空白,最后發現ios在微信公眾號的環境下,由於緩存的原因,它會緩存之前的頁面請求的狀態,導致vue生命周期不再執行,解決的方法用watch 監測路由的參數的變化,重新執行獲得數據的方法

    2,微信默認的返回bar顯示,支付成功返回回到收銀台回不去的處理

         1,安卓的處理、優化,ios的優化

// url 獲取openid
const openid = commonFun. curQueryString( curUrl, 'openid');
// 重定之后獲取seOpenid,不用再次請求獲取openid
const seOpenid = sessionStorage. getItem( "seOpenid");
const jOpenid = openid || seOpenid;
const fd = Qs. stringify({
djpayData: djpayDataStr,
openid: jOpenid
});
// 只有微信上有openid 、安卓的環境下
if ( openid) {
sessionStorage. setItem( "seOpenid", openid);
}
if ( openid && isAndroid) {
history. go(- 1);
}

 2ios的處理

  

 

popStateWeixin() {
var ua = navigator. userAgent. toLowerCase();
if ( ua. match( /MicroMessenger/ i) == "micromessenger") {
pushHistory();
setTimeout( function() {
window. addEventListener(
"popstate",
function( e) {
window. history. go(- 1);
// self.location.reload();
// wx.closeWindow();
},
false
);
}, 0);
}
function pushHistory() {
const href = window. location. href;
var state = { title: "title", url: href };
window. history. replaceState( state, "title", href);
}
}

 兼容的狀況

https://segmentfault.com/q/1010000010903892/a-1020000010908161 

3,解決這個問題發現ios7機型有卡死在收銀台的狀態--fuck

   解決這個方法--


setTimeout( function () {
window. location. replace( data. successUrl);
}, 500);


function weixinPay( data) {
function onBridgeReady() {
WeixinJSBridge. invoke(
"getBrandWCPayRequest",
JSON. parse( data. thirdayParam),
function ( res) {
if ( res. err_msg == "get_brand_wcpay_request:ok") {
// 使用以上方式判斷前端返回,微信團隊鄭重提示:
// res.err_msg將在用戶支付成功后返回ok,但並不保證它絕對可靠。
// 添加延遲在微信公眾號的時候,ios到收銀台有假死的狀態,等待同步的事件處理完成,處理這個問題添加的延遲的事件
setTimeout( function () {
window. location. replace( data. successUrl);
}, 500);
} else if (
res. err_msg == "get_brand_wcpay_request:cancel" ||
res. err_msg == "get_brand_wcpay_request:fail"
) {
// 文案提示有用取消支付
// alert("取消支付");
own. openModal( null, null, "提示", "取消支付", "normal");
} else {
own. openModal(
null,
null,
"提示",
res. err_msg,
"normal"
);
}
}
);
}
if ( typeof WeixinJSBridge == "undefined") {
if ( document. addEventListener) {
document. addEventListener(
"WeixinJSBridgeReady",
onBridgeReady,
false
);
} else if ( document. attachEvent) {
document. attachEvent( "WeixinJSBridgeReady", onBridgeReady);
document. attachEvent(
"onWeixinJSBridgeReady",
onBridgeReady
);
}
} else {
onBridgeReady();
}
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM