从接口文档到 BAT 脚本,一次把 secretKey 获取、登录参数拼接、常见报错排查讲清楚。 有读者咨询:国家传染病前置软件已经安装在本机,文档里提供了 getSecretKey 和 login 两个接口,如何通过脚本实现单点登录? 简单来说:先用授权 license 获取一次性或临时的 secretKey,再带着 secretKey、用户 id、机构编码、科室编码调用登录接口。 http://127.0.0.1:12306/getSecretKey?license=授权码 带上 secretKey、用户 id、机构编码 orgCode、科室编码 deptCode,POST 到登录接口。 http://127.0.0.1:12306/login 下面是一个最小可用版本:启动前置软件、等待服务起来、获取 secretKey,然后调用登录接口。 依赖说明:Windows 需要能使用 curl;如果使用 jq 解析 JSON,需要提前安装 jq 并加入 PATH。 @echo offtaskkill /F /IM datahub.exestart "" D:\tools\datahub_win64\datahub.exetimeout /t 5 /nobreak >nulREM Step 1: 获取 secretKeyfor /f "delims=" %%A in ('curl -s "http://127.0.0.1:12306/getSecretKey?license=XXX" ^| jq -r .secretKey') do set secretKey=%%AREM 检查是否成功获取 secretKeyif "%secretKey%"=="" ( echo [ERROR] Failed to get secretKey exit /b 1)echo %secretKey%REM Step 2: 使用 secretKey 调用 /login 接口curl --location "http://127.0.0.1:12306/login" --header "Content-Type: application/json" ^--data "{\"secretKey\": \"%secretKey%\",\"id\": \"XXX\",\"orgCode\": \"XXX\", \"deptCode\": \"XXX\"}"
医院机构对应的软件授权码,用于换取 secretKey。用户 ID,uaams_user_app表的 user_id。前置机系统生成的,这也是这个系统鸡肋的地方之一,需要将该表信息同步到his。机构编码,config.properties 的 reportOrgCode(部署时https://59.255.31.78:8888/gateway.html#/login 下载的)科室编码,uaams_user_app表的 department 优先检查 datahub.exe 是否启动、12306 端口是否监听、license 是否正确。 说明没有安装 jq,或者 jq.exe 没有加入 PATH。可以改用上面的 PowerShell 版本。 检查 id、orgCode、deptCode 是否匹配。特别是用户是否有该机构、该科室权限。 文件建议保存为 UTF-8;脚本开头保留 chcp 65001。老系统如仍乱码,可改为 ANSI 保存。 这个脚本适合测试和本机快速调用。正式使用时,建议做到以下几点: 1. 不要把 license、用户 ID、机构编码直接暴露到公开文档或代码仓库。2. 建议把参数放到单独的 config.ini 或环境变量中,方便维护。 3. 调用失败时记录日志,方便排查接口、端口、参数、权限问题。 4. 单点登录只应在授权范围内使用,不要绕过系统权限控制。 国家传染病前置软件的单点登录,本质上不是复杂开发,而是把接口文档里的两个步骤自动化: 获取 secretKey → 组装登录参数 → 调用 login 接口 咨询过很多医院,前置软件大都是公卫老师在使用,HIS基本都是沿用之前的报卡模式。有种不祥的预感,疾控会强推前置软件报卡,拭目以待吧。