最近在给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标签反复比对出来的。与大家共享,希望少走弯路。
引入文件之后是没有wx对象的,只有jWeixin对象, 尝试添加这行
const wx = window.jWeixin
被这个问题困扰了很久,经过不断尝试终于解决,留下记录给后边的兄弟们参考一下(微信号: 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); }; }, []); }
3.1.18 版本卡死
3.2.20 直接闪退
现在涉及到桌面端jssdk功能全部砍掉了。
我引入你这个js后,苹果手机可以,安卓手机不行
特地登录上来感谢博主,终于成功了!!!
我按照引入后,初始化wx.agentConfig报错{"errMsg":"agentConfig:function not exist"}
跟企微的技术沟通过,官方回答:
我们之所以慢,是因为 我们agentConfig的注入 要兼容ios8。 natvie的ios8只能是在类似js的window.onload才可以开始
虽然已经ios 16了,但是我们就是不改,我们就是不支持contentload的注入,因为我们要兼容!兼容!兼容!!!
着实优秀的企业微信官方~~~ 我理解,毕竟企业微信技术团队,现在还在像办法兼容我们的IE5 6 7 8
感恩的心
赞赞赞,楼主好人,优秀,强
我的企业微信Mac版一直报错wx.agentConfig is not a function,引入https://res.wx.qq.com/wwopen/js/jsapi/jweixin-1.0.0.js
正常了,感谢
这个方案,安卓手机也是正常的么?有人回答下么