签名及相关配置
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 + '&timestamp=' + 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接口列表
  })
}
插件
JSRUN前端笔记, 是针对前端工程师开放的一个笔记分享平台,是前端工程师记录重点、分享经验的一个笔记本。JSRUN前端采用的 MarkDown 语法 (极客专用语法), 这里属于IT工程师。