调用阿里健康API前必须确认三件事:一、完成合同签署、权限开通及白名单配置;二、使用官方SDK处理HTTPS签名,确保时间戳格式正确且服务器时间误差≤15分钟;三、建立院内药品编码与阿里健康drug_id的映射表,避免仅依赖模糊查询。

调用阿里健康 API 前必须确认的三件事
阿里健康开放平台(open.alyun.com)的药品和处方类接口不是开箱即用的——没签合同、没开通权限、没配置白名单,403 Forbidden 或 invalid app_key 是必然结果,不是代码问题。
实操建议:
- 登录 阿里云开放平台,进入「我的应用」,确认已创建应用且“阿里健康医疗开放平台”服务已开通
- 在应用详情页的「API 权限」中,手动勾选
alibaba.health.drug.query(查药品)、alibaba.health.prescription.push(推处方)等具体接口 - 联系阿里健康商务或客户经理,提供回调域名、业务场景说明,申请生产环境调用配额;沙箱环境虽可测,但返回的是模拟数据,
drug_id和prescription_no不真实
PHP 发起 HTTPS 请求时绕不开的证书与签名
阿里健康所有 API 都强制 HTTPS + 签名认证,直接用 file_get_contents 或简单 cURL 会卡在签名失败或 SSL 错误上。
常见错误现象:curl error: SSL certificate problem: unable to get local issuer certificate、sign invalid
立即学习“PHP免费学习笔记(深入)”;
实操建议:
- 禁用
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false)—— 阿里健康验签逻辑依赖完整证书链,关了它反而导致签名计算不一致 - 用阿里官方 PHP SDK(
aliyun-openapi-php-sdk)或至少复用其com.aliyuncs.http.HttpClient类,它内置了 RFC 3986 编码、参数排序、HMAC-SHA256 签名逻辑 - 注意时间戳参数
timestamp必须是 ISO8601 格式(如2024-05-20T10:30:45Z),且服务器时间误差不能超过 15 分钟,否则签名直接被拒
同步药品信息:别只查 alibaba.health.drug.query 就完事
这个接口返回的是国家药监局备案的静态药品库快照,字段多但更新滞后;实际业务中更常需要的是「本院在用药品」映射关系,而阿里健康不维护医院侧的库存或规格。
使用场景:你有院内 $hospital_drug_code,想对齐阿里健康标准 drug_id,用于后续处方流转
实操建议:
- 先用
alibaba.health.drug.query按通用名+规格模糊查,取items数组中match_score最高的项,别硬匹配name字段(存在别名、简写、繁体差异) - 把返回的
drug_id和你院内编码做双向映射表,存进数据库;后续所有处方推送都靠这个映射,而不是每次实时查 - 注意分页参数:
page_no和page_size是必传的,且page_size最大只支持 50,查全量需循环请求
处方流转失败最常卡在 alibaba.health.prescription.push 的结构校验
这个接口对 XML/JSON 结构、字段类型、嵌套层级极其敏感,一个空格、一个未转义的 &、一个缺失的 patient_id_type 都会导致 InvalidParameter.Format 错误,且错误提示极不友好。
实操建议:
- 严格按《阿里健康处方接口规范》v2.3 文档的 JSON Schema 校验字段,尤其注意:
prescription_items是数组,每个 item 必须含drug_id(不是你院编码)、dose(字符串,如"0.5g")、usage(枚举值,不能填中文) - 患者身份证号必须传
id_card字段,且patient_id_type设为"IDCARD";用医保卡号则要换patient_id_type为"INSURANCE_CARD"并传insurance_card_no - 调试阶段先用最小可行 payload 测试,例如只推 1 条药、无诊断、无附件,确认通道通了再补全;别一上来就塞 20 行 JSON 还带 base64 图片
真正难的不是调通,而是把院内异构的处方数据(比如不同 HIS 系统导出的 Excel 或 HL7 消息)规整成阿里健康能认的那套字段。这块没标准映射表,纯靠人工对齐,上线前务必拿真实处方单逐字段过一遍。











