import { getWxSign } from "@/api/app"; // 引入已封装的请求接口 import wx from "weixin-js-sdk"; // 微信JS - Sdk import * as AppApi from '@/api/app' const WeixinJsSDK = { init: function (param) { // 外部引用初始化签名方法 if (!param) return if (param.APIs) this.APIs = param.APIs if (param.callback) this.callback = param.callback WeixinJsSDK.sign() }, sign: function () { // 请求后端接口获取签名参数 let pageUrl = location.href.split('#')[0]; getWxSign(pageUrl).then((res) => { if (res.Status === 0) { WeixinJsSDK.initAPIs(res.Data); } }).catch((signerr) => { console.log(signerr, 'signerr') }); }, initAPIs: function (param) { // 获取签名参数成功,config验证权限 console.log(param, '签名param') wx.config({ debug: false,// 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。 appId: param.appId, // 必填,公众号的唯一标识 timestamp: param.timestamp,// 必填,生成签名的时间戳 nonceStr: param.nonceStr,// 必填,生成签名的随机串 signature: param.signature, // 必填,签名 jsApiList: this.APIs, // 必填,需要使用的JS接口列表 }); console.log('验证签名') wx.ready(function () {// config信息验证后会执行ready方法,所有接口调用都必须在config接口获得结果之后,config是一个客户端的异步操作,所以如果需要在页面加载时就调用相关接口,则须把相关接口放在ready函数中调用来确保正确执行。对于用户触发时才调用的接口,则可以直接调用,不需要放在ready函数中。 wx.checkJsApi({ // 判断当前客户端版本是否支持指定JS接口 jsApiList: this.APIs, // 需要检测的JS接口列表,所有JS接口列表见附录2, success: function (res) { if (typeof WeixinJsSDK.callback == 'function') { WeixinJsSDK.callback() } // 以键值对的形式返回,可用的api值true,不可用为false // 如:{"checkResult":{"chooseImage":true},"errMsg":"checkJsApi:ok"} } }); }); wx.error(function (initAPIerr) {// config信息验证失败会执行error函数,如签名过期导致验证失败具体错误信息可以打开config的debug模式查看,也可以在返回的res参数中查看,对于SPA可以在这里更新签名。 console.log(initAPIerr, 'initAPIerr') }); } } export default WeixinJsSDK;