健康温州在线服务
下载地址
https://www.zhengdianxue.com/wp-content/uploads/skills/herenit--phs-jkwz-cli.zip将提示词发送给你的 AI 安装该 skills
请根据 https://skillhub.cn/install/skillhub.md,安装 @herenit/phs-jkwz-cli。健康温州在线服务 CLI 工具,支持短信验证码登录/退出、就诊人管理(查询/选择)、医院查询、预约挂号(医院/科室/排班/号源/下单/取消)。触发词:互联网医院、挂号、登录、就诊人、短信验证码、健康温州。只包含 python scripts/heren_mobile_jkwz.py 一个 Python 入口。
阅读全文 (展开查看完整说明)
概述
heren-mobile-jkwz — 健康温州(区域)互联网医院 CLI 工具
CLI 工具,封装 phs 网关 API(互联网医院),支持 agent 驱动的流程:短信登录、就诊人管理、医院查询、预约挂号。
⚠️ 核心约束(必须遵守)
严禁自行组装 HTTP 请求
所有操作必须通过 python scripts/heren_mobile_jkwz.py 执行。 严禁自行调用 API 端点。
✅ 正确做法: 仅使用本文档列出的 CLI 子命令。参数和顺序必须与本文档示例完全一致。
原因:API 涉及加密签名、Token 注入等多级封装,自行组装极易出错。
发送短信前必须显式确认
auth login(交互式自动发验证码)和auth send-sms执行前必须向用户显式确认。- 禁止未经确认就执行任何可能触发短信发送的命令(包括
auth login --phone)。 - 登录失败或验证码错误时,必须再次确认后才能重发,禁止自动重试。
- 这是防止短信滥发的合规要求。
区域项目挂号前必须先查医院(强制)
健康温州是区域项目,平台下可能有多家医院。任何挂号相关操作(科室列表、医生列表、号源、下单、取消)之前,必须先执行 hospital list 查询医院,与用户确认目标医院:
- 先执行
python scripts/heren_mobile_jkwz.py hospital list --type 1 --json查询医院列表。 - 从结果中确认目标医院及其
hosId(可让用户指定医院名,用--name过滤)。 - 后续挂号命令带
--hos-id <hosId>使用该医院;会话已有缓存医院时也要先向用户确认是否就是目标医院。 - 脚本侧兜底:
reg命令若无医院会自动先查医院列表,查不到医院直接报错,禁止带着空 hosId 挂号。
禁止跳过查医院直接查科室/医生/下单。
挂号只提医生名 → 必须反问科室
- 当用户说"挂王医生的号"只给医生名字时,必须反问用户该医生在哪个科室,不能直接去所有科室遍历搜索。
- 用户必须明确给出科室名称(如"内科"、"外科"),才能继续
reg doc-list <deptCode>查医生。
就诊人列表为空 → 提示去小程序绑定(人脸识别)
- 登录成功后脚本会自动查询就诊人列表。
- 若就诊人列表为空,必须直接提醒用户去小程序完成绑定,不要在 CLI 内尝试任何建档/完善注册操作:
用户为了您的信息安全,健康温州就诊人绑定需要人脸识别,请微信搜索健康温州小程序绑定后再回来继续使用在线服务
- CLI 已移除
auth complete(完善注册)、patient add(建档)、patient add-by-treated(查档绑定)命令,就诊人绑定必须通过微信小程序完成人脸识别,CLI 仅支持查询/选择已绑定的就诊人。
禁止以下行为:
- ❌ 未经用户确认就自动重发验证码(每次重发都是合规风险)
- ❌ 自行写脚本直接调 API 端点测试(违反「严禁自行组装 HTTP 请求」)
- ❌ 在生产环境乱试不同的 herenId 值或擅自解密手机号字段
- ❌ 不经用户确认就
auth logout+auth login反复横跳 - ❌ 就诊人列表为空时尝试在 CLI 内建档/完善注册,绕过人脸识别
挂号 / 查报告前必须有就诊人
- 挂号(
reg book)、我的挂号(reg my-list)、报告查询(query reports/query report-detail/query report-detail-checkout)执行前,脚本会自动校验就诊人。 - 无就诊人时脚本自动处理:
- 就诊人列表为空 → 输出人脸识别提示语(见上一条),终止本次操作。
- 只有一个就诊人 → 自动选中后继续。
- 有多个就诊人但未选中 → 提示先
patient choose/patient select <patientId>选择,终止本次操作。
- agent 侧也应先确认已选中就诊人(
patient select)再执行挂号/查报告,避免携带空 patientId。
安装规范标准
1. 运行环境要求
| 项 | 要求 |
|---|---|
| Python | ≥ 3.8(实测 3.13.12 可用) |
| 依赖 | click、requests、pycryptodome |
| 平台 | Windows / macOS / Linux 均可 |
| 网络 | 需能访问 *.wzswsj.gov.cn(prod: https://eservice.wzswsj.gov.cn/gateway) |
2. ⚠️ 环境变量(必查,否则启动报错)
机器上若存在 PYTHONHOME / PYTHONPATH 环境变量(指向其他 Python 安装),会污染解释器导致启动失败:
AssertionError: SRE module mismatch执行任何命令前必须先清理:
unset PYTHONHOME && unset PYTHONPATH && python scripts/heren_mobile_jkwz.py --version若报 ModuleNotFoundError(缺依赖),说明当前解释器未安装依赖,见步骤 3。
3. 依赖安装
# 使用与运行时相同的解释器安装(本机推荐 WorkBuddy 管理版 Python 3.13.12)
"C:UsersAdministrator.workbuddybinariespythonversions3.13.12python.exe" -m pip install click requests pycryptodome禁止在系统 Python 上全局
pip install;若系统 Python 已损坏(SRE module mismatch),一律改用管理版解释器。
4. 安装验证
unset PYTHONHOME && unset PYTHONPATH && python scripts/heren_mobile_jkwz.py --version
unset PYTHONHOME && unset PYTHONPATH && python scripts/heren_mobile_jkwz.py config show--version正常输出版本号 → 安装成功config show能显示医院/登录状态 → 可开始使用- 首跑
config show若自动弹医院选择 → 输入编号1(健康温州)
5. 运行入口(统一规范)
所有子命令一律通过 scripts/heren_mobile_jkwz.py 调用,严禁自行组装 HTTP 请求:
# 推荐写法:进入 skill 根目录 + 清理环境变量 + 指定解释器
cd ~/.workbuddy/skills/jkwz828182026 &&
unset PYTHONHOME && unset PYTHONPATH &&
"C:UsersAdministrator.workbuddybinariespythonversions3.13.12python.exe" scripts/heren_mobile_jkwz.py <子命令>
# 简写(已确认解释器/环境正常时)
python scripts/heren_mobile_jkwz.py <子命令>所有子命令均通过此入口调用。
6. 常见错误排查表(不同环境报错对照)
同一脚本在不同机器上报错原因各不相同,先对照下表定位,禁止盲目重试或改代码。
| 报错特征 | 原因 | 解决 |
|---|---|---|
AssertionError: SRE module mismatch | PYTHONHOME/PYTHONPATH 指向了其他 Python,解释器库文件混用 | unset PYTHONHOME && unset PYTHONPATH 后重跑;或改用管理版解释器 |
ModuleNotFoundError: No module named 'click'/'requests' | 当前解释器未装依赖 | 用运行时同一解释器执行 -m pip install click requests pycryptodome |
ModuleNotFoundError: No module named 'Crypto' / from Crypto.Cipher import AES 失败 | pycryptodome 未装或被 pycrypto 干扰 | pip uninstall pycrypto -y && pip install pycryptodome(两者不可共存) |
UnicodeDecodeError / 中文乱码 / 'gbk' codec can't decode | Windows 控制台默认 GBK,脚本输出含 UTF-8 中文 | 用 bash(Git Bash)执行,或设置 PYTHONIOENCODING=utf-8;不要用 cmd 直接跑 |
[SSL: CERTIFICATE_VERIFY_FAILED] | 网络环境拦截证书(公司代理/内网) | 确认能访问 eservice.wzswsj.gov.cn;必要时由代理环境放开域名 |
ConnectionError / timeout / Name or service not known | 网络不通或域名解析失败 | 检查网络/代理;ping eservice.wzswsj.gov.cn 确认可达 |
PermissionError: [Errno 13] | 会话目录 ~/.heren-mobile-jkwz/ 无写权限 | 检查用户目录写权限,不要用 sudo 跑 |
Error: No such command / Usage: ... 参数错误 | 命令或参数写错(含中英文符号) | 对照本文档示例逐字核对,禁止自行改参数 |
404 / 400 / 接口签名错误 | 会话过期、医院未选对或参数缺失 | 先 config show 确认 sysCode=1001082、重新 auth login |
加密内容是空(999117) | 请求体被误加密,或接口路径写成了 getSK 大写前缀 | 见下方「接口路径与加密规范」,必须 sk 前缀 + 明文 |
签名不能为空(999106) | 请求头缺失 sign/st/phsSign | 恢复完整请求头(不能删),这三项是必须的 |
| 交互命令卡住不退出 | 无 TTY 环境(agent 后台执行) | agent 调用时一律用非交互参数(--phone/--sms-code/--json),不走交互输入 |
⚠️ 接口路径与加密规范(血泪教训,务必遵守)
健康温州网关各模块接口路径与加密规则如下,写错前缀或误加密都会失败:
| 模块 | 路径前缀规则 | 是否加密 | 正确示例 |
|---|---|---|---|
| auth | getSK(大写 SK) | 明文 | /phs-user/authUser/getSKAllinoneAuthApi |
| patient | sk 前缀 / getSk(小写 k) | 明文 | getSkPatCardList |
| hospital | sk 前缀 | 明文 | skGetHospital |
| reg | sk 前缀 | 明文 | skAddReg、skGetDeptList |
关键结论(2026-08 实测):
- 健康温州网关全模块明文,不需要请求体加密。误加
signContent加密会报加密内容是空或 404。 - 请求头
sign/st/phsSign必须保留,去掉会报签名不能为空。 skAddReg挂号必须带schedule-data+number-source(含disNo),否则报「号别编号不能为空」「显示序号不能为空」。- ⚠️
skAddReg挂号时clinicalType字段必须传"1",严禁空串。若schedule-data从doc-list返回的amPmResults直接复制,其clinicalType可能是空串"",会导致网关返回 HTTP 404(而非业务错误码,极易误判为接口不存在)。正确做法:把schedule-data里的clinicalType改成"1";categorName、docTitleName传空串反而没问题(参考成功请求模板:clinicalType:"1"+categorName:""+docTitleName:"")。
7. 环境差异备忘(本机已知)
- 本机(Windows)推荐解释器:
C:UsersAdministrator.workbuddybinariespythonversions3.13.12python.exe - 系统 Python(
D:pythonpython)已损坏(SRE module mismatch),禁用;macOS/Linux 默认python3正常可用 - 依赖已装到管理版解释器,可直接运行;换解释器需重新
pip install
会话状态
所有状态持久化到 ~/.heren-mobile-jkwz/jkwz_session.json:
| 字段 | 说明 |
|---|---|
accessToken | 登录 token |
herenId | 用户 ID |
patientId | 当前活跃就诊人 ID |
patientName | 当前活跃就诊人姓名 |
hosId | 医院 ID 缓存 |
sysCode | 系统医院编码(1001082) |
apiSuffix | API 路径后缀 |
支持的系统医院:
| 编码 | 医院名称 | API 后缀 |
|---|---|---|
1001082 | 健康温州 | =jkwz828182026 |
使用流程
0. 选择系统医院(首次使用必做)
首次使用必须先选择一个支持的医院系统,后续所有 API 调用会自动拼接对应后缀:
python scripts/heren_mobile_jkwz.py config hospital执行后交互式列出可选医院,输入编号即可切换。也可通过以下命令查看当前配置:
python scripts/heren_mobile_jkwz.py config show命令分组
config — 系统配置
# 查看当前配置(环境、系统医院、登录状态等)
python scripts/heren_mobile_jkwz.py config show
# 选择/切换系统医院(首次使用必做)
python scripts/heren_mobile_jkwz.py config hospitalauth — 认证
# 交互式登录:提示输入手机号 → 自动发送验证码 → 提示输入验证码 → 登录
python scripts/heren_mobile_jkwz.py auth login
# 也可直接传入手机号跳过第一步
python scripts/heren_mobile_jkwz.py auth login --phone <phone>
# 仅发送验证码(不登录)
python scripts/heren_mobile_jkwz.py auth send-sms <phone>
# 查看登录状态
python scripts/heren_mobile_jkwz.py auth status
# 获取当前用户信息(需登录)
python scripts/heren_mobile_jkwz.py auth user-info [--json]
# 退出登录
python scripts/heren_mobile_jkwz.py auth logoutpatient — 就诊人管理
# 查看已绑定的就诊人列表
python scripts/heren_mobile_jkwz.py patient list [--json]
# 交互选择就诊人(只有一个则自动选中)
python scripts/heren_mobile_jkwz.py patient choose [--json]
# 设置活跃就诊人
python scripts/heren_mobile_jkwz.py patient select <patientId> [--name "<姓名>"]
# 获取就诊人详情
python scripts/heren_mobile_jkwz.py patient detail <patientId> [--json]就诊人绑定(含人脸识别)只能在微信「健康温州」小程序完成,CLI 不提供建档/查档绑定命令。
reg — 预约挂号
# 科室列表
python scripts/heren_mobile_jkwz.py reg dept-list [--hos-id HOS001] [--json]
# 科室下医生列表
python scripts/heren_mobile_jkwz.py reg doc-list <deptCode> [--hos-id HOS001] [--json]
# 查询号源(预约前必执行)
python scripts/heren_mobile_jkwz.py reg number-source '<schedule_data_json>' [--hos-id HOS001] [--json]
# 预约挂号(需提供排班数据和号源数据)
python scripts/heren_mobile_jkwz.py reg book <schId> [--patient-id PAT001] [--schedule-data JSON] [--number-source JSON] [--json]
# 取消挂号
python scripts/heren_mobile_jkwz.py reg cancel <orderId> [--hos-order-id HO001] [--source 19] [--json]
# 我的挂号列表
python scripts/heren_mobile_jkwz.py reg my-list [--patient-id PAT001] [--hos-id HOS001] [--page 1] [--json]
# 获取所有科室医生(保存到文件)
python scripts/heren_mobile_jkwz.py reg all-doctors [--json]预约挂号工作流:
hospital list --json→ 先查医院,确认目标医院(hosId)reg dept-list --hos-id <hosId> --json→ 选择科室(deptCode)reg doc-list <deptCode> --json→ 选择医生(schedule 数据)reg number-source '<schedule_data_json>' --json→ 选择号源,获取 number_source 完整 JSONreg book <schId> --schedule-data '<schedule_data_json>' --number-source '<number_source_json>' --json
hospital — 医院信息
# 医院列表(支持按名称搜索和定位)
python scripts/heren_mobile_jkwz.py hospital list [--name "医院名"] [--type 1] [--hos-type TYPE] [--area-id AREA] [--gis-lng 120.1] [--gis-lat 30.1] [--json]--type:1=挂号预约--gis-lng/--gis-lat: 经纬度,用于最近医院距离计算
query — 报告查询
查报告列表不需要选医院:
query reports不带--hos-id,报告跨医院聚合查询。报告类型只查jy(检验)、jc(检查),不查tj(体检)。
# 报告列表(header-type: jy=检验, jc=检查;不选医院、不查体检 tj)
python scripts/heren_mobile_jkwz.py query reports --header-type jy [--json]
# 检查报告详情(repId 从 reports 列表取)
python scripts/heren_mobile_jkwz.py query report-detail <repId> [--hos-id HOS001] [--extend EXTEND] [--json]
# 检验报告详情(repType: 1=普通检验, 2=药敏/细菌培养)
python scripts/heren_mobile_jkwz.py query report-detail-checkout <repId> [--hos-id HOS001] [--rep-type 1] [--extend EXTEND] [--json]--header-type:jy=检验,jc=检查(报告列表不查tj体检)--header-name: 报告头名(默认按 header-type 自动映射:检验/检查)--type(reports):1=检查,2=检验,空=全部--extend: 透传参数(从报告列表项中取,报告详情接口需要)- 报告列表默认返回检验报告(
--header-type jy)
典型工作流程
0. 选择系统医院(前置步骤)
首次使用必须先选择一个医院系统,后续所有操作均基于该医院:
# 交互式选择系统医院
python scripts/heren_mobile_jkwz.py config hospital
# 查看当前配置确认
python scripts/heren_mobile_jkwz.py config show如果未选择系统医院就执行其他命令,会自动弹出医院选择界面。
1. 登录与就诊人选择
1.1 登录 → 获取用户信息
# 交互式登录:提示输入手机号 → 发送验证码 → 输入验证码 → 登录
python scripts/heren_mobile_jkwz.py auth login
# 也可直接传入手机号跳过第一步
python scripts/heren_mobile_jkwz.py auth login --phone <phone>也可以分两步执行:先
python scripts/heren_mobile_jkwz.py auth send-sms <phone>,再python scripts/heren_mobile_jkwz.py auth login --phone <phone> --sms-code <code>
登录成功后立即获取用户信息:
python scripts/heren_mobile_jkwz.py auth user-info --json1.2 获取就诊人列表 → 判空
登录成功后脚本会自动查询就诊人列表。
# 查看已绑定的就诊人列表
python scripts/heren_mobile_jkwz.py patient list --json- 列表不为空:选择一个就诊人即可
- 列表为空:直接提醒用户去小程序绑定(人脸识别),不要尝试 CLI 建档:
用户为了您的信息安全,健康温州就诊人绑定需要人脸识别,请微信搜索健康温州小程序绑定后再回来继续使用在线服务
1.3 选择就诊人
# 选择一个就诊人(设为 session 的 active patient)
python scripts/heren_mobile_jkwz.py patient select <patientId> --name "姓名"如果只有一个就诊人会自动选中。也可交互选择:
python scripts/heren_mobile_jkwz.py patient choose --json1.4 验证登录状态
python scripts/heren_mobile_jkwz.py auth status注意
- 登录后 session 持久化到
~/.heren-mobile-jkwz/jkwz_session.json,后续命令自动读取 patient select设置的patientId会作为后续所有命令的默认就诊人- 如需切换就诊人,再次调用
patient select即可
2. 就诊人列表为空时
登录后若就诊人列表为空,直接提醒用户去小程序完成人脸识别绑定,禁止在 CLI 内建档/完善注册:
用户为了您的信息安全,健康温州就诊人绑定需要人脸识别,请微信搜索健康温州小程序绑定后再回来继续使用在线服务
3. 预约挂号
⚠️ 区域项目:挂号前必须先查医院。 先执行 hospital list 查询并确认目标医院(拿到 hosId),再走科室/医生/号源/下单。禁止跳过查医院直接挂科室。
⚠️ 用户只给医生名时:必须反问科室。 例如"挂王医生的号" → 立刻反问"王医生在哪个科室?"。拿到科室名后才 reg doc-list <deptCode>。
3.0 先查医院(必须)
# 查询医院列表,确认目标医院与 hosId
python scripts/heren_mobile_jkwz.py hospital list --type 1 --json3.1 科室 → 医生
# 先查科室(带目标医院 hosId)
python scripts/heren_mobile_jkwz.py reg dept-list --hos-id <hosId> --json
# 再查科室下医生
python scripts/heren_mobile_jkwz.py reg doc-list <deptCode> --json3.2 查询号源(必须)
python scripts/heren_mobile_jkwz.py reg number-source '<schedule_data_json>' --json3.3 预约挂号
python scripts/heren_mobile_jkwz.py reg book <schId> --schedule-data '<schedule_data_json>' --number-source '<number_source_json>' --json3.4 查看/取消
python scripts/heren_mobile_jkwz.py reg my-list --json
python scripts/heren_mobile_jkwz.py reg cancel <orderId> --json健康温州(区域项目)挂号无需支付,预约成功即完成。预约成功后提醒用户可微信搜索「健康温州」小程序同步查看挂号信息。
JSON 输出
所有数据命令支持 --json 参数:
python scripts/heren_mobile_jkwz.py patient list --json
python scripts/heren_mobile_jkwz.py hospital list --type 1 --json # 挂号前必须先查医院
python scripts/heren_mobile_jkwz.py reg dept-list --hos-id <hosId> --jsonAPI 环境
| 环境 | Base URL |
|---|---|
prod | https://eservice.wzswsj.gov.cn/gateway |
Agent 注意事项
- 需要就诊人的命令默认使用 session 中的活跃
patientId,可通过--patient-id覆盖 --json适用于所有返回数据的命令- 认证状态跨调用持久化在
~/.heren-mobile-jkwz/jkwz_session.json - 预约挂号必须提供
--schedule-data和--number-source