评论

企业微信巨坑:wx.agentConfig is not a function

wx.agentConfig is not a function的正确解决方案

最近在给CabloyJS框架开发企业微信对接模块时,完全按照文档指引进行JS SDK的引入及注入Config配置时,遇到一个报错:wx.agentConfig is not a function

官方文档提到,需要引入http://res.wx.qq.com/open/js/jweixin-1.2.0.js,但是经过大量测试验证,得出如下解决方案:

1、引入http://res.wx.qq.com/open/js/jweixin-1.2.0.js

企业微信Mac版:通过wx.config、wx.agentConfig

企业微信手机版:报错:wx.agentConfig is not a function

2、引入https://open.work.weixin.qq.com/wwopen/js/jwxwork-1.0.0.js

企业微信Mac版:报错:window.wx未定义

企业微信手机版:通过wx.config、wx.agentConfig

3、引入https://res.wx.qq.com/wwopen/js/jsapi/jweixin-1.0.0.js

企业微信Mac版:通过wx.config、wx.agentConfig

企业微信手机版:通过wx.config、wx.agentConfig

总结:

在进行企业微信JS SDK对接时,正确引用的JS文件应该是https://res.wx.qq.com/wwopen/js/jsapi/jweixin-1.0.0.js,而这个文件链接在官方文档中根本就找不到,是笔者通过F12 Network标签反复比对出来的。与大家共享,希望少走弯路。

最后一次编辑于  2020-06-17  
点赞 21
收藏
评论

16 个评论

  • 陈逍遥York
    陈逍遥York
    2021-01-12

    引入文件之后是没有wx对象的,只有jWeixin对象, 尝试添加这行

    const wx  = window.jWeixin
    
    2021-01-12
    赞同 4
    回复 2
    • Horan.
      Horan.
      2023-03-02
      还好有你
      2023-03-02
      回复
    • my
      my
      2023-06-21
      我uni.app开发的  wx  和jWeixin 都没有 咋办...
      2023-06-21
      1
      回复
  • 人文亲斤(信新)
    人文亲斤(信新)
    06-24

    被这个问题困扰了很久,经过不断尝试终于解决,留下记录给后边的兄弟们参考一下(微信号: xinyu780731)

    declare var wx: any;
    
    export default function Demo() {
      useEffect(() => {
          const script = document.createElement('script');
          const agentScript = document.createElement('script');
          script.src = "https://res.wx.qq.com/wwopen/js/jsapi/jweixin-1.0.0.js";
          script.onload = () => {
              wx.config({
                  beta: true,//必须这么写,否则wx.invoke调用形式的jsapi会有问题
                  debug: false, //开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。
                  appId: '#你的appId', // 必填,企业微信的corpID,必须是本企业的corpID,不允许跨企业使用
                  timestamp: '#你的timestamp', // 必填,生成签名的时间戳
                  nonceStr: '#你的nonceStr', // 必填,生成签名的随机串
                  signature: '#你的signature',// 必填,签名,见 附录-JS-SDK使用权限签名算法
                  jsApiList: [
                      'getCurExternalContact',
                      'getCurExternalChat',
                      'getContext',
                      'agentConfig',
                  ], // 必填,需要使用的JS接口列表
              });
              wx.ready(function () {
                  agentScript.src = "https://open.work.weixin.qq.com/wwopen/js/jwxwork-1.0.0.js";
                  agentScript.onload = () => {
                          function waitForAgentConfigReady(wx: any) {
                              if (wx.agent !== undefined) {
                                  return
                              }
                              return new Promise((resolve) => {
                                  detectAgentConfig(wx, resolve as () => void)
                              })
                          }
      
                          function detectAgentConfig(wx: any, resolve: () => void) {
                              if (wx.agentConfig !== undefined) {
                                  resolve()
                                  return
                              }
                              setTimeout(() => {
                                  if (waitCount > 5) {
                                      setTimeout(() => {
                                          window.location.reload()
                                      }, 2000)
                                      return
                                  }
      
                                  detectAgentConfig(wx, resolve)
                              }, 1000)
                          }
      
                          async function waitAgentConfig(wx: any, config: any) {
                              console.info('wx.agentconfig', config)
                              return new Promise(async (resolve, reject) => {
                                  await waitForAgentConfigReady(wx)
                                  wx.agentConfig({...config, success: resolve, fail: reject})
                              }).then(
                                  res => {
                                      console.info('wx.agentConfig success', res)
                                      return res
                                  },
                                  error => {
                                      console.error('wx.agentConfig fail', error)
                                      throw error
                                  }
                              )
                          }
      
                          waitAgentConfig(wx, {
                              beta: true, // 是否是内测版
                              corpid: '#你的corpid', // 必填,企业微信的corpid,必须与当前登录的企业一致
                              agentid: '#你的agentid', // 必填,企业微信的应用id (e.g. 1000247)
                              timestamp: '#你的timestamp', // 必填,生成签名的时间戳
                              nonceStr: '#你的nonceStr', // 必填,生成签名的随机串
                              signature: '#你的signature',// 必填,签名,见附录-JS-SDK使用权限签名算法
                              jsApiList: [
                                  'getCurExternalContact',
                                  'getCurExternalChat',
                                  'getContext',
                              ], // 必填,需要使用的JS接口列表
                          }).then(res => {
                              wx.invoke('getContext', {}, function (res: any) {
                                  console.log('getContext', res)
                                  if (res.err_msg == "getContext:ok") {
                                      const entry = res.entry; //返回进入H5页面的入口类型,目前有normal、contact_profile、single_chat_tools、group_chat_tools、chat_attachment
                                      if (entry === 'single_chat_tools') {
                                          // 当前是单聊会话页面
                                          wx.invoke('getCurExternalContact', {}, function (res: any) {
                                              if (res.err_msg == "getCurExternalContact:ok") {
                                                  const url = getDomain() + '/my?userId=' + res.userId;
                                                  window.location.href = url; 
                                              } else {
                                                  //错误处理
                                              }
                                          });
                                      } else if (entry === 'group_chat_tools') {
                                          // 当前是群聊会话页面
                                          wx.invoke('getCurExternalChat', {}, function (res: any) {
                                              if (res.err_msg == "getCurExternalChat:ok") {
                                                  window.location.href = '#你的页面地址'; 
                                              } else {
                                                  //错误处理
                                              }
                                          });
                                      }
                                  } else {
                                      //错误处理
                                  }
                              });
                          }).catch(res => {
                              if (res.errMsg.indexOf('function not exist') > -1) {
                                  alert('版本过低请升级')
                              }
                          })
                  }
                  document.body.appendChild(agentScript);
              });
              wx.error(function (res: any) {
                  // config信息验证失败会执行error函数,如签名过期导致验证失败,具体错误信息可以打开config的debug模式查看,也可以在返回的res参数中查看,对于SPA可以在这里更新签名。
                  alert('调试信息:config error, ' + JSON.stringify(res))
              });
          }
          document.body.appendChild(script);
      
          return () => {
              document.body.removeChild(script);
              document.body.removeChild(agentScript);
          };
      }, []);
      }
    


    06-24
    赞同 1
    回复
  • Aiden
    Aiden
    2021-12-09

    3.1.18 版本卡死

    3.2.20 直接闪退

    现在涉及到桌面端jssdk功能全部砍掉了。

    2021-12-09
    赞同 1
    回复
  • 特殊字符🤏
    特殊字符🤏
    2021-05-31

    我引入你这个js后,苹果手机可以,安卓手机不行

    2021-05-31
    赞同 1
    回复 1
    • 空气
      空气
      2022-09-15
      兄弟,安卓手机到底行不行啊
      2022-09-15
      回复
  • 炜炜
    炜炜
    10-17

    特地登录上来感谢博主,终于成功了!!!

    10-17
    赞同
    回复
  • .罗.
    .罗.
    2023-08-16

    我按照引入后,初始化wx.agentConfig报错{"errMsg":"agentConfig:function not exist"}

    2023-08-16
    赞同
    回复
  • 旭升Oscar
    旭升Oscar
    2023-07-04

    跟企微的技术沟通过,官方回答:

    我们之所以慢,是因为 我们agentConfig的注入 要兼容ios8。 natvie的ios8只能是在类似js的window.onload才可以开始

    虽然已经ios 16了,但是我们就是不改,我们就是不支持contentload的注入,因为我们要兼容!兼容!兼容!!!

    着实优秀的企业微信官方~~~ 我理解,毕竟企业微信技术团队,现在还在像办法兼容我们的IE5 6 7 8

    2023-07-04
    赞同
    回复
  • null
    null
    2023-06-06

    感恩的心

    2023-06-06
    赞同
    回复
  • NXQ
    NXQ
    2022-10-26

    赞赞赞,楼主好人,优秀,强

    我的企业微信Mac版一直报错wx.agentConfig is not a function,引入https://res.wx.qq.com/wwopen/js/jsapi/jweixin-1.0.0.js

    正常了,感谢

    2022-10-26
    赞同
    回复
  • 空气
    空气
    2022-09-15

    这个方案,安卓手机也是正常的么?有人回答下么

    2022-09-15
    赞同
    回复 3
    • 空气
      空气
      2022-09-15
      时隔两年企业微信依然存在这个问题,真是醉了
      2022-09-15
      1
      回复
    • Claire
      Claire
      2023-09-25回复空气
      别说是2年了,时隔3年依然是这个德行
      2023-09-25
      回复
    • 顺其自然
      顺其自然
      06-18
      别说是3年了,时隔4年依然是这个德行
      06-18
      回复

正在加载...

登录 后发表内容