一、因 access_token 有时效性,故不可能每次都从接口取。可通过 cookie 或者其他本地存储方式,存储签名及其他个参数
var APIURL = getApi();
var getWeChatSignUrl = APIURL + '/app/sign'; // 后端提供的获取微信各必备参数接口
var corpId = 'ww0d54eb466aa17f6b';
var configParam = {};
function init () {
if (getCookie('rawstring') !== undefined) { // cookie 存在
var rawString = '?' + getCookie('rawstring');
if (rawString.indexOf(';') > 0) {
rawString = rawString.split(';')[0];
}
var rawStringObj = urlStrToDataObjFn(rawString);
configParam.noncestr = rawStringObj.noncestr;
configParam.timestamp = rawStringObj.timestamp;
configParam.signature = rawStringObj.signature;
verifyConfig(configParam.timestamp, configParam.noncestr, configParam.signature);
} else { // cookie 不存在需设置
getWeChatSign();
}
}
/**
* 获取加密后的签名等
*
*/
function getWeChatSign () {
var getSignParam = {
corp_id: corpId,
url: location.href,
userid: getUrlParam().userid,
jsonp: "jsonCallBack"
};
$.ajax({
url: getWeChatSignUrl,
type: 'get',
data: getSignParam,
dataType: 'jsonp', // 跨域处理
success: function (resp) {
// ...
}
})
}
function jsonCallBack (res) {
getWeChatSignSuccess(res)
}
function getWeChatSignSuccess (res) {
if (res.status == 1) {
configParam.noncestr = res.data.nonceStr;
configParam.timestamp = res.data.timestamp;
configParam.signature = res.data.signature;
var rawString = '?noncestr=' + res.data.nonceStr + '×tamp=' + res.data.timestamp + '&signature=' + res.data.signature;
verifyConfig(configParam.timestamp, configParam.noncestr, configParam.signature);
setCookie('rawstring', rawString, 7100 * 1000);
}
}
/**
* config接口注入权限验证配置
*
*/
function verifyConfig (timestamp, nonceStr, signature) {
wx.config({
beta: true, // 必须这么写,否则wx.invoke调用形式的jsapi会有问题
debug: false, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。
appId: corpId, // 必填,企业微信的corpID
timestamp: timestamp, // 必填,生成签名的时间戳
nonceStr: nonceStr, // 必填,生成签名的随机串
signature: signature, // 必填,签名,见附录1
jsApiList: ['scanQRCode', 'translateVoice'] // 必填,需要使用的JS接口列表
})
}