普通商户(直连)开发jsapi支付时,前端唤起微信收银台,用户支付并确定后页面闪退了,怎么回事
场景:打开公司公众号 - 充值水电费 - 选择金额并点击立即充值 - 前端请求后端toPay接口 - 后端toPay接口组装参数调用微信统一下单接口(https://api.mch.weixin.qq.com/pay/unifiedorder),最后获得返回值响应给前端 - 前端收到返回值在js中调用 WeixinJSBridge.invoke( 'getBrandWCPayRequest', { "appId": obj.appid, //公众号ID,由商户传入 "timeStamp": timeStamp.toString(), //时间戳,自1970年以来的秒数 "nonceStr": nonceStr, //随机串 "package": packageId, "signType": "MD5", //微信签名方式: "paySign": sign //微信签名 }, function (res) { alert("会回调吗????") //支付回调函数 if (res.err_msg == "get_brand_wcpay_request:ok") { // 使用以上方式判断前端返回,微信团队郑重提示: //res.err_msg将在用户支付成功后返回ok,但并不保证它绝对可靠。 WeixinJSBridge.call('closeWindow'); } }); 问题:用手机测试时,支付完成点击确定,整个窗口立即关闭,并没有想象中的执行alert。问某群,一个人说都2023年了,还有这个问题,说的很轻松,我想,这是个很简单的问题,求解答,该怎么做,让用户支付点击确定时回到原先充值页面(说点金计划的注意我说的商户类型) 解决:我找到问题了,罪魁祸首是微信的缓存导致的一系列奇奇怪怪的问题!!!其他浏览器没事是因为我在Network中勾选了Disable cache禁用缓存了 1、普通商户付款成功的回调关闭界面(也有人说闪退)是因为这段代码WeixinJSBridge.call('closeWindow'); 造成的。而注释掉没有效果是因为手机端的微信缓存了旧代码,导致新的代码并没有运行到。(一个jsapi的支付流程中,会有两个回调,一个是请求微信下单时告诉微信支付成功后回调后台某个接口,另一个回调是html页面WeixinJSBridge.invoke这段js代码的回调。以上我说的回调都是指html页面的js回调) 2、在微信内置浏览器alert 是可以出弹窗的,网上说alert失效也是缓存问题,因为缓存中根本没有alert这段代码。但是WeixinJSBridge.invoke的回调函数这个位置比较特殊,这个位置使用alert效果不好,因为用户输入支付密码后会展示支付成功的页面,这个时候在原来页面已经执行alert,当用户在微信的支付成功页面点击最下方的确定时,回到原来页面就不会看到alert的弹窗了。 3、手机端的微信(苹果的)缓存,要到微信的通用-存储空间 去清理相关缓存,直接杀进程,甚至重启手机缓存都是存在的 4、微信的缓存的原理不知道是怎样的,有时候缓存了,有时候又不缓存(我在idea里修改代码按ctrl+f9 重构下,手机微信里重新访问就有新的代码效果了,而有时候怎么重构怎么重启怎么修改更新都不行,这很容易误导人啊) 5、别人说微信开发者工具首页 - 点击打开公众号网页项目 ,然后在最上面输入url 调试相当于调试微信内置浏览器,不知道是不是这样,有知道的麻烦告知 6、手机想看下调试信息,可以在你想看的页面上加入以下代码,但功能没有谷歌强大 <script src="https://unpkg.com/vconsole@latest/dist/vconsole.min.js"></script> <script> // VConsole will be exported to `window.VConsole` by default. var vConsole = new window.VConsole(); </script> 7、感谢所有参与回答的开发者