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();
}
}