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