背景:nuxt为默认的history模式,用这个npm 支付weixin-js-sdk,开启debug模式,尽可能在ios下调试,由于alert弹窗的信息会更多。ios
async onPay (config) { try { const wxUrl = window.location.href//分享的路径 const res = await $axios.$get("")//获取配置sdk参数,包括微信分享的参数 if (res.status === 0) { const {data} = res wx.config({ debug: true, appId: data.appId, timestamp: data.timestamp, nonceStr: data.nonceStr, signature: data.signature, jsApiList: ['chooseWXPay'] }) wx.ready(function () { wx.checkJsApi({ jsApiList: ['chooseWXPay'], success: (res) => { wx.chooseWXPay({ timestamp: config.timestamp, nonceStr: config.nonceStr, package: config.package, signType: config.signType, paySign: config.paySign, // 支付签名 success: function (res) { }, cancel: function (res) { // 支付取消的回调函数 }, error: function (res) { // 支付失败的回调函数 } }) } }) }) } } catch (e) { throw e } }
补充:因为支付路径太深,ios下,提示支付路径未注册出现了各类状况。甚至出现只有我一我的能够调起支付,其余人测试都不行的状况。git
缘由:这是由于微信获取支付路径的时候,在ios与安卓下是不一样的,对于spa应用来讲,首先咱们把咱们从微信别的地方点击连接呼出微信浏览器时所落在的页面、或者点击微信浏览器的刷新按钮时所刷新的页面,咱们叫作落地页。问题来了,在ios和安卓下呼出微信支付的时候,微信支付判断当前路径ios为落地页,安卓则为正常的当前页面的路径。github
解决支付路径app不统一:用window.location.href 的方式跳转至支付页npm
微信获取支付路径的方式:以url最后一个/为准,获取/以前的路径。axios
支付路径例子:例如咱们后台配置的支付的路径为后端
https://域名/项目名/(可能有多级目录)/pay/
那么就会匹配浏览器
https://域名/项目名/(可能有多级目录)/pay/?xxxxxxxxxxxxxxxxxx
注意pay支付路径后的/必定要加。由于咱们作路由跳转极可能是这种形式服务器
https://域名/项目名/(可能有多级目录)/pay?xxxxxxxxxxxxxxxxxx //错误,'?'前没有'/',会匹配不到正确的路径。
解决:这个是服务器那边的问题,后端直接设置了固定的订单时间以跳过支付环节。微信
事实上,咱们并不须要额外的请求wx.config的参数,由于支付接口返回的支付参数已经有了全部的config参数,除了signature这个加密签名字段,在支付参数中对应的加密签名是paysign这个字段,事实上直接用paysign做为signature的值也是没有问题的。wx.config的参数差异是分享的时候。须要额外的分享的路径urlapp
以上。。。其余记不起来了