企业微信开发的操作:企业微信JS-SDK权限验证
企业微信开发的操作:企业微信JS-SDK权限验证agentId:应用IDlet { data } = await getAgentTicket( locationUrl agentId );参数说明:timestamp,nonceStr,signature签名生成一般让后端是返回给前端调用后端请求,生成timestamp,nonceStr,signature如下:这里是一个后端请求,只需要注意参数就可以
步骤一: 引入js-sdk相关js
<script src="//res.wx.qq.com/open/js/jweixin-1.2.0.js "></script>
    
步骤二: 通过wx.config注入权限验证配置(第一次握手config注入的是企业的身份与权限)
wx.config({
    beta: true // 必须这么写,否则wx.invoke调用形式的jsapi会有问题
    debug: true  // 开启调试模式 调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。
    appId: ''  // 必填,企业微信的corpID
    timestamp:   // 必填,生成签名的时间戳
    nonceStr: ''  // 必填,生成签名的随机串
    signature: '' // 必填,签名,见 附录-JS-SDK使用权限签名算法
    jsApiList: [] // 必填,需要使用的JS接口列表,凡是要调用的接口都需要传进来
});
    
需要主要点:
appId 对应的是企业微信的corpID
timestamp,nonceStr,signature签名生成一般让后端是返回给前端
调用后端请求,生成timestamp,nonceStr,signature如下:
这里是一个后端请求,只需要注意参数就可以
let { data } = await getAgentTicket( locationUrl  agentId );
    
参数说明:
agentId:应用ID
locationUrl:授权访问的页面URL
步骤三:通过agentConfig注入应用权限
async wxConfig (state) {
      try {
        let { data } = await getAgentTicket( locationUrl  agentId  );
        let { timestamp  nonceStr  signature } = data;
        wx.agentConfig({
          beta: true  // 必须这么写,否则wx.invoke调用形式的jsapi会有问题
          debug: true 
          corpid: state.corpId  // 必填,企业微信的corpid,必须与当前登录的企业一致
          agentid: state.agentId  // 必填,企业微信的应用id (e.g. 1000247)
          timestamp  // 必填,生成签名的时间戳
          nonceStr  // 必填,生成签名的随机串
          signature  // 必填,签名,见附录-JS-SDK使用权限签名算法
          jsApiList: [
            "sendChatMessage" 
            "getContext" 
            "shareToExternalMoments" 
            "getCurExternalContact" 
            "openEnterpriseChat" 
            "shareToExternalContact" 
            "shareToExternalChat" 
            "getCurExternalChat"  //获取当前客户群的群ID
          ]  //必填
          success: (res) => {
            // console.log(res)
            // 回调
            // alert("agentId成功:");
            state.agentConfigStatus = true;
          } 
          fail: (res) => {
            console.log("agent config 失败: "  res);
            //alert("agentId失败:"   JSON.stri.jpgy(res));
            if (res.errMsg.indexOf("function not exist") > -1) {
              alert("版本过低请升级");
            }
          } 
        });
      } catch (error) {
        console.log(error);
      }
    
调用agentConfig的注意事项
- agentConfig与config的签名算法完全一样,但是jsapi_ticket的获取方法不一样(后端注意)
 - agentConfig与config的签名算法完全一样,但是jsapi_ticket的获取方法不一样(后端注意)
 - 当前页面url中的域名必须是在该应用中设置的可信域名。
 - 当前页面url中的域名必须是在该应用中设置的可信域名。
 - 当前页面url中的域名必须是在该应用中设置的可信域名。
 
友情提醒:
开发时候我们肯定会有多套应用环境的部署(测试,生产),所以我们需要在企业后台进行多个应用的创建,然后一些可变动的参数尽量动态获取 列如,执行agentConfig(AgentId这个是根据应用走的参数),到此我们要进行前面的步骤完成一个应用,这里隐藏了一个不为认知的坑,就是多个环境调试时候,会一直遇到 getCurExternalContact:fail_nopermission,那么问题来了,步骤都对了,agenConfig也是ok,就是获取外部联系人方法 不可用,这里就去找到客户联系配置外部联系人关联的应用,如图


到这里就就可以进行正常的多套环境应用调试。




