Zoom API接入Academy LMS 学生端加入会议提示连接超时
当前使用Academy LMS系统搭配Academy LMS Live Class (Zoom)插件,已按插件要求填写API Key与Security Key。以教师身份通过Zoom客户端创建会议后,将会议ID和密码保存至系统中,学生身份尝试加入会议时触发报错:
Joining meeting timeout. Your connection has timed out and you cannot join the meeting. Verify your network connectivity and try again.
(中文释义:加入会议超时,当前连接已超时无法加入会议,请检查网络连通性后重试)
<!DOCTYPE html> <head> <title>Zoom</title> <meta charset="utf-8" /> <link type="text/css" rel="stylesheet" href="https://source.zoom.us/1.7.7/css/bootstrap.css"/> <link type="text/css" rel="stylesheet" href="https://source.zoom.us/1.7.7/css/react-select.css"/> <meta name="format-detection" content="telephone=no"> <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no"> </head> <body> <script src="https://source.zoom.us/1.7.7/lib/vendor/react.min.js"></script> <script src="https://source.zoom.us/1.7.7/lib/vendor/react-dom.min.js"></script> <script src="https://source.zoom.us/1.7.7/lib/vendor/redux.min.js"></script> <script src="https://source.zoom.us/1.7.7/lib/vendor/redux-thunk.min.js"></script> <script src="https://source.zoom.us/1.7.7/lib/vendor/jquery.min.js"></script> <script src="https://source.zoom.us/1.7.7/lib/vendor/lodash.min.js"></script> <script src="https://source.zoom.us/zoom-meeting-1.7.7.min.js"></script> <script> $( document ).ready(function() { start_zoom(); }); function start_zoom() { ZoomMtg.preLoadWasm(); ZoomMtg.prepareJssdk(); testTool = window.testTool; var meetConfig = { apiKey: 'Existing Values', apiSecret: 'Existing Values', meetingNumber: 'Existing Values', userName: 'Existing Values', passWord: 'Existing Values', }; var signature = ZoomMtg.generateSignature({ meetingNumber: meetConfig.meetingNumber, apiKey: meetConfig.apiKey, apiSecret: meetConfig.apiSecret, role: 0, success: function(res){ console.log(res.result); } }); ZoomMtg.init({ leaveUrl: "file:///C:/Users/User/Desktop/zoom.html", isSupportAV: true, success: function () { ZoomMtg.join( { meetingNumber: meetConfig.meetingNumber, userName: meetConfig.userName, signature: signature, apiKey: meetConfig.apiKey, passWord: meetConfig.passWord, success: function(res){ console.log('join meeting success'); }, error: function(res) { console.log(res); } } ); }, error: function(res) { console.log(res); } }); } </script> </body> </html>
- 核心报错文案:
Joining meeting timeout. Your connection has timed out and you cannot join the meeting. Verify your network connectivity and try again - 报错截图:查看报错截图
按优先级从高到低排查修复:
运行环境不符合SDK要求
Zoom Web SDK 不支持file本地文件协议运行,当前直接双击打开本地HTML文件测试,且leaveUrl配置为本地文件路径,会触发浏览器安全限制,导致WASM模块加载失败、WebSocket连接被拦截,最终出现连接超时。
修复方式:将页面部署到HTTP/HTTPS协议的Web服务中,本地测试可使用VS Code Live Server、Nginx等工具启动本地Web服务,禁止直接双击打开HTML文件。同时将leaveUrl替换为同域名下的合法线上/本地服务地址,不要填写本地file协议路径。签名生成逻辑存在安全与合规问题
当前在前端代码中明文暴露apiSecret,且直接在前端调用方法生成签名,不符合Zoom SDK的安全规范,新版SDK会拦截前端生成的无效签名,导致连接鉴权失败触发超时。同时明文存储apiSecret会导致账号被盗用的安全风险。
修复方式:将签名生成逻辑迁移到服务端,使用PHP/Node.js/Java等后端语言,结合apiKey、apiSecret、会议号、用户角色、签名过期时间生成合法签名,前端仅通过接口获取后端生成的签名用于入会,禁止在任何前端代码中暴露apiSecret。SDK版本过旧存在已知bug
使用的1.7.7版本Zoom Web SDK存在已知的WebSocket连接兼容bug,在部分网络环境下会无故触发连接超时。
修复方式:升级到最新稳定版Zoom Web SDK,替换页面中所有SDK相关的CSS、JS资源引用地址。网络连通性异常
确认访问用户的网络、LMS服务器的网络没有拦截Zoom服务相关域名,Zoom Web SDK需要正常连通*.zoom.us域名下的服务才能正常入会。如果是国内网络环境,需确认网络可以正常访问Zoom国际版服务,网络不通也会触发该超时报错。
内容的提问来源于stack exchange,提问作者Berdan

