腾讯云患者档案对接使用全解析:从API集成到微信小程序落地
一、腾讯云患者档案产品概述
腾讯云患者档案(Smart Medical Record,简称SMR)是腾讯健康推出的一套面向医生和患者的智慧电子云病历解决方案。该产品以医疗报告的全生命周期管理为核心,提供医疗报告的存储、查阅和使用功能,旨在打破医疗机构之间的数据孤岛,实现患者医疗数据的互联互通与高效利用。
患者档案产品依托腾讯强大的微信生态系统,采用微信小程序作为患者端的主要载体,同时支持医生端在PC和微信小程序双终端使用。这种轻量化的部署方式使得产品可以快速上线,支持SaaS化部署,能够满足公立三甲医院、专业学会协会、虚拟联合医学组织、药企等多种机构的接入需求。
从应用场景来看,患者档案覆盖了诊前、诊中、诊后三个核心阶段。在诊前场景中,医生可以在线下门诊前或线上互联网医院接诊前,提前收集患者的相关信息,了解患者病情基本情况、既往史和既往病历报告。AI医疗文本结构化能力可以自动解析和整理患者上传的报告,大幅提高病历文书的撰写效率和规范性。在诊中场景,医生可以发布临床新药招募信息,接受患者报名并通过智能化手段进行初筛和匹配,同时收集患者在治疗过程中的病情变化、指标变化和用药情况。在诊后场景,医生可以对离院患者进行管理,发起智能随访计划、量表评估和患教信息推送,持续收集患者院外数据,为临床科研提供数据支撑。
需要先登录腾讯云控制台,点击:腾讯云控制台,还没有账号,点击:注册后再关联,已有账号点击:登录后再关联
二、患者档案的技术架构与对接模式
2.1 双端架构设计
腾讯云患者档案采用患者端与医生端分离的双端架构设计。患者端基于微信小程序实现,患者完成实名认证后即可上传相关病历资料、填写病情概况。系统通过AI医疗报告结构化能力自动分析病情时间线,整理病史资料,按照时间顺序对报告进行自动分类和排序,并以可视化图表的形式展示趋势数据。医生端则支持PC和微信小程序双终端,当患者授权给相关医疗机构后,隶属于该医疗机构的医务人员可以在医生端查看患者已上传的数据。医生可以对患者进行分组管理,制定个性化随访方案,下发个性化量表,并通过医生端触达患者。
2.2 对接方式与集成模式
腾讯云患者档案提供了多种灵活的接入方式。产品支持API接入和H5接入两种主要方式,功能模块可以按需拆分和接入,支持与第三方医疗系统的对接,同时也支持系统被集成。对于医疗机构而言,常见的对接场景包括与医院HIS系统的集成、与区域卫生信息平台的对接、以及与互联网医院平台的数据同步。
在数据层面,腾讯云建议构建符合HL7 FHIR标准的医疗数据湖,实现医疗数据的安全存储与高效检索。通过腾讯云API网关提供灵活的API管理和访问控制,对外提供数据共享接口。腾讯云对象存储COS则提供可扩展的存储空间,适用于存储大规模的病历数据和医学影像数据。
2.3 数智医疗影像平台的专项对接
对于医学影像相关的患者档案对接,腾讯云提供了数智医疗影像平台(Digital and Intelligent Medical Imaging Platform,AIMIS)。该平台为患者提供患者影像档案微信小程序,用于管理个人医学影像和检查数据,实现一部手机随时查看、长期存储安全可靠。平台与互联网医院进行集成,实现用户在互联网医院进行检查、报告和影像的信息同步和业务交互。
在患者影像档案的使用流程中,患者通过微信小程序搜索'患者影像档案'进入登录页,通过微信授权手机号完成注册。登录后需要完善个人信息并进行实名验证,系统通过证件号或手机号自动匹配云端的检查。如果系统无法自动匹配,患者可以通过检索检查ID、检查日期或机构名称手动搜索并匹配检查。患者可以浏览检查报告和影像,支持将检查分享给微信好友,并可以设置分享的有效期和密码以保护隐私。下载原始DICOM影像时,需要在链接有效期内通过输入安全码进行下载,每个下载链接仅有30分钟有效期。
三、互联网医院API对接详解
3.1 接口概述与使用场景
腾讯云数智医疗影像平台提供了一套完整的HTTP接口,用于与互联网医院进行集成。这些接口支持患者在院内完成的检查信息查询、会诊记录查询等业务场景。所有接口采用HTTPS协议,数据交互格式为JSON(application/json)。
主要的使用流程包括:患者检查列表查询、会诊拉取患者检查信息、选择添加检查信息的候选列表。接口通过请求参数中的数据用途(usage)字段来区分具体的使用场景,例如患者查看检查列表、患者在线咨询、医生查看患者详情等。
3.2 签名认证机制
所有接口请求需要进行签名认证,采用Hmac-Sha256算法生成签名。签名算法的计算公式为:
signature = Hmac-Sha256(token, appId + timestamp)其中各参数说明如下:
- token:密钥,由腾讯系统分配
- appId:合作方ID,由腾讯系统分配
- timestamp:当前生成的时间戳,毫秒数
所有接口在请求鉴权时需要在HTTP请求的Header中带上以下信息:
- signature:对应的HTTP Header字段
- appId:对应的HTTP Header字段
- timestamp:对应的HTTP Header字段
3.3 检查列表查询API
检查列表查询API用于患者查询在院内完成的检查信息。接口地址为:
https://pacs.qq.com/thirdparty/patientStudies/${appId}请求参数如下:
| 参数名 | 类型 | 是否必填 | 备注 |
|---|---|---|---|
| phoneNum | string | 是 | 患者电话号码,使用AES-256-ECB + HEX算法加密,密钥与签名token相同(32位) |
| idNum | string | 是 | 患者身份证号,同样使用AES-256-ECB + HEX加密 |
| hisId | string | 否 | 医院信息系统ID,HIS号 |
| patientName | string | 否 | 患者姓名 |
| hospitalId | string | 是 | 医院ID(腾讯觅影影像云系统医院ID) |
| unionId | string | 是 | 医联体ID |
| studyType | int | 是 | 检查类型:0放射、1眼科、2病理、3内镜、4心电、5超声 |
| dataFlag | int | 是 | 数据标识:0全部数据、1仅本院、2除本院外、3仅当前医联体、4除当前医联体外 |
| usage | int | 是 | 数据用途:0患者查看、1在线咨询、2医生查看患者详情 |
| studyDateBegin | string | 是 | 检查时间查询开始时间,格式yyyy-MM-dd hh:mm:ss |
| studyDateEnd | string | 是 | 检查时间查询结束时间 |
返回数据结构中包含以下字段:
| 字段 | 类型 | 备注 |
|---|---|---|
| code | int | 错误码,0表示成功,非0表示失败 |
| message | string | 错误描述 |
| data | list(Study) | 检查数据详情列表 |
每条检查数据(Study)包含以下主要字段:
| 字段 | 类型 | 备注 |
|---|---|---|
| hisId | string | 医院信息系统ID |
| reportId | string | 影像云返回的报告ID |
| studyType | int | 检查类型 |
| studyDate | string | 检查时间 |
| studyId | string | 检查号 |
| bodyPart | string | 检查部位 |
| studyName | string | 检查项目 |
| applyDoctor | string | 申请医生 |
| applyDept | string | 申请科室 |
| uniAppId | string | 跳转小程序的appid |
| uniPath | string | 检查详情小程序跳转路径 |
| h5Url | string | 检查报告详情H5跳转URL |
| h5DetailUrl | string | 检查影像详情H5跳转URL |
3.4 会诊记录查询API
会诊记录查询API用于医生查询远程会诊记录。接口地址为:
https://pacs.qq.com/thirdparty/patientConsultations/${appId}该接口的使用场景是医生在远程会诊过程中拉取患者的检查信息,选择添加检查信息的候选列表。接口同样采用前述的签名认证机制,数据交互格式为JSON。
四、数据安全与隐私保护机制
4.1 加密传输与存储
腾讯云患者档案在数据传输和存储过程中采用了多层加密机制。在传输层面,所有API接口强制使用HTTPS协议,确保数据在传输过程中的机密性和完整性。敏感字段如患者电话号码和身份证号在请求参数中需要使用AES-256-ECB算法结合HEX编码进行加密,加密密钥与签名token相同(32位)。
在存储层面,患者数据经过严格的脱敏和加密保护后存储于腾讯云。数据的查看和传输均需在专门的权限控制下进行,所有操作均在加密状态下完成,严格保证用户数据安全。腾讯云病历数据流转解决方案采用国密SM算法(SM2/SM3/SM4),满足加密算法国产化监管要求,切实保障链上存证信息安全可靠且防篡改。
4.2 患者授权管理
患者档案产品建立了完善的患者授权管理体系。患者对自身的病历数据进行授权管理,患者本人或其监护人可以通过授权机制控制病历数据的访问和使用。当患者授权给相关医疗机构后,该医疗机构的医务人员才能在医生端查看患者已上传的数据。
在病历数据流转解决方案中,用户病历数据上链时进行数字摘要运算,在跨链接入时做二次隐私处理,确保整个过程中的数据隐私性和安全性。区块链技术的应用使得数据流转全程可追溯,保证了数据的真实性与完整性。
4.3 合规与监管要求
腾讯云患者档案产品在设计和运营过程中充分考虑了医疗行业的数据合规要求。产品支持医疗机构通过数据共享协议实现与其他医疗机构或数据使用者在病历数据共享方面的合规性。腾讯云病历数据流转解决方案所构建的区块链健康链的成员节点可由各医疗机构、卫计委、医疗协会、电子数据司法鉴定中心、医疗信息技术公司等机构组成。
在实际案例中,深圳市第二人民医院龙华医院通过部署腾讯健康的解决方案,已取得电子病历六级、互联互通五乙、智慧服务三级等建设成果。这些评级成果充分证明了腾讯云患者档案产品在数据安全和合规方面的成熟度。
五、对接开发实战指南
5.1 Python对接示例
以下是一个使用Python语言调用检查列表查询API的完整示例:
import hashlib
import hmac
import time
import json
import requests
from Crypto.Cipher import AES
import binascii
# 配置参数
APP_ID = 'your_app_id'
TOKEN = 'your_token_32_bytes' # 32位密钥
HOSPITAL_ID = 'your_hospital_id'
UNION_ID = 'your_union_id'
def generate_signature(app_id, token, timestamp):
'''生成HMAC-SHA256签名'''
message = app_id + str(timestamp)
signature = hmac.new(
token.encode('utf-8'),
message.encode('utf-8'),
hashlib.sha256
).hexdigest()
return signature
def aes_encrypt(data, key):
'''AES-256-ECB加密并返回HEX格式'''
cipher = AES.new(key.encode('utf-8'), AES.MODE_ECB)
# 补齐到16的倍数
pad_len = 16 - (len(data) % 16)
padded_data = data + chr(pad_len) * pad_len
encrypted = cipher.encrypt(padded_data.encode('utf-8'))
return binascii.hexlify(encrypted).decode('utf-8')
def query_patient_studies(phone_num, id_num, study_date_begin, study_date_end):
'''查询患者检查列表'''
timestamp = int(time.time() * 1000)
signature = generate_signature(APP_ID, TOKEN, timestamp)
# 加密敏感字段
encrypted_phone = aes_encrypt(phone_num, TOKEN)
encrypted_id = aes_encrypt(id_num, TOKEN)
url = f'https://pacs.qq.com/thirdparty/patientStudies/{APP_ID}'
headers = {
'signature': signature,
'appId': APP_ID,
'timestamp': str(timestamp),
'Content-Type': 'application/json'
}
body = {
'phoneNum': encrypted_phone,
'idNum': encrypted_id,
'hospitalId': HOSPITAL_ID,
'unionId': UNION_ID,
'studyType': 0, # 放射
'dataFlag': 0, # 全部数据
'usage': 0, # 患者查看
'studyDateBegin': study_date_begin,
'studyDateEnd': study_date_end
}
response = requests.post(url, headers=headers, json=body)
return response.json()
# 调用示例
if __name__ == '__main__':
result = query_patient_studies(
phone_num='13800138000',
id_num='110101199001011234',
study_date_begin='2026-01-01 00:00:00',
study_date_end='2026-06-22 23:59:59'
)
print(json.dumps(result, indent=2, ensure_ascii=False))5.2 Java对接示例
以下是一个使用Java语言实现相同功能的示例:
import javax.crypto.Cipher;
import javax.crypto.spec.SecretKeySpec;
import java.nio.charset.StandardCharsets;
import java.security.MessageDigest;
import java.util.Base64;
import java.util.HashMap;
import java.util.Map;
import javax.crypto.Mac;
import javax.crypto.spec.SecretKeySpec;
import okhttp3.*;
public class PatientArchiveClient {
private static final String APP_ID = 'your_app_id';
private static final String TOKEN = 'your_token_32_bytes';
private static final String HOSPITAL_ID = 'your_hospital_id';
private static final String UNION_ID = 'your_union_id';
private static final String BASE_URL = 'https://pacs.qq.com/thirdparty';
public static String generateSignature(String appId, String token, long timestamp) throws Exception {
String message = appId + timestamp;
Mac hmacSha256 = Mac.getInstance('HmacSHA256');
SecretKeySpec secretKey = new SecretKeySpec(
token.getBytes(StandardCharsets.UTF_8),
'HmacSHA256'
);
hmacSha256.init(secretKey);
byte[] hash = hmacSha256.doFinal(message.getBytes(StandardCharsets.UTF_8));
StringBuilder hexString = new StringBuilder();
for (byte b : hash) {
String hex = Integer.toHexString(0xff & b);
if (hex.length() == 1) hexString.append('0');
hexString.append(hex);
}
return hexString.toString();
}
public static String aesEncrypt(String data, String key) throws Exception {
SecretKeySpec secretKey = new SecretKeySpec(
key.getBytes(StandardCharsets.UTF_8),
'AES'
);
Cipher cipher = Cipher.getInstance('AES/ECB/PKCS5Padding');
cipher.init(Cipher.ENCRYPT_MODE, secretKey);
byte[] encrypted = cipher.doFinal(data.getBytes(StandardCharsets.UTF_8));
StringBuilder hexString = new StringBuilder();
for (byte b : encrypted) {
String hex = Integer.toHexString(0xff & b);
if (hex.length() == 1) hexString.append('0');
hexString.append(hex);
}
return hexString.toString();
}
public static String queryPatientStudies(String phoneNum, String idNum,
String dateBegin, String dateEnd) throws Exception {
long timestamp = System.currentTimeMillis();
String signature = generateSignature(APP_ID, TOKEN, timestamp);
String encryptedPhone = aesEncrypt(phoneNum, TOKEN);
String encryptedId = aesEncrypt(idNum, TOKEN);
OkHttpClient client = new OkHttpClient();
String url = BASE_URL + '/patientStudies/' + APP_ID;
Map bodyMap = new HashMap<>();
bodyMap.put('phoneNum', encryptedPhone);
bodyMap.put('idNum', encryptedId);
bodyMap.put('hospitalId', HOSPITAL_ID);
bodyMap.put('unionId', UNION_ID);
bodyMap.put('studyType', 0);
bodyMap.put('dataFlag', 0);
bodyMap.put('usage', 0);
bodyMap.put('studyDateBegin', dateBegin);
bodyMap.put('studyDateEnd', dateEnd);
String jsonBody = new com.google.gson.Gson().toJson(bodyMap);
Request request = new Request.Builder()
.url(url)
.addHeader('signature', signature)
.addHeader('appId', APP_ID)
.addHeader('timestamp', String.valueOf(timestamp))
.addHeader('Content-Type', 'application/json')
.post(RequestBody.create(jsonBody, MediaType.parse('application/json')))
.build();
try (Response response = client.newCall(request).execute()) {
return response.body().string();
}
}
public static void main(String[] args) throws Exception {
String result = queryPatientStudies(
'13800138000',
'110101199001011234',
'2026-01-01 00:00:00',
'2026-06-22 23:59:59'
);
System.out.println(result);
}
} 5.3 微信小程序端集成
对于微信小程序端的集成,开发者可以参考腾讯云提供的官方文档和SDK。患者档案产品本身基于微信小程序实现,患者端无需安装和下载额外应用。在集成过程中,开发者需要注意以下几点:
- 确保小程序已获取必要的用户授权,包括手机号授权和实名认证信息
- 实现完善的个人信息完善流程,其中姓名和证件号码为必填项
- 支持多成员管理功能,允许用户添加家庭成员并查看成员的云端影像检查
- 实现检查分享功能,支持设置分享的有效期和密码
六、典型应用案例与最佳实践
6.1 复旦大学附属肿瘤医院案例
复旦大学附属肿瘤医院利用腾讯云患者档案构建了诊前智能问诊系统和诊中临床新药招募推荐体系,大幅提高了门诊效率。通过患者档案的AI医疗文本结构化能力,医院实现了患者病历资料的自动解析和整理,医生可以在接诊前高效掌握患者情况。
6.2 青岛市卫健委'出生一件事'项目
青岛市卫健委通过患者档案触达居民,收集本地居民健康数据,加强对母婴、慢病、精神心理、公共卫生等多领域的数据监控。该项目充分利用了患者档案的多渠道触达能力,通过微信小程序与企业微信、微信公众号的联动,实现了对特定人群的精准健康管理。
6.3 中山大学肿瘤防治中心案例
中山大学肿瘤防治中心利用患者档案开展诊后康复计划,患者的康复情况医生可以一目了然。医生通过制定个性化随访方案和下发个性化量表,实现了对离院患者的持续管理。
6.4 最佳实践建议
基于上述案例和产品特性,以下是对医疗机构对接使用腾讯云患者档案的几点最佳实践建议:
- 分阶段推进:建议先从患者端小程序的基础功能入手,完成患者实名认证和病历上传功能的部署,再逐步扩展到医生端的患者管理和随访功能
- 注重数据标准化:在对接过程中,应遵循HL7 FHIR等医疗数据标准,确保数据的互操作性。腾讯云API网关可以帮助实现标准化的数据共享接口
- 强化安全管控:充分利用腾讯云提供的加密传输、访问控制和患者授权管理机制,确保患者数据的安全和隐私
- 充分利用AI能力:积极使用AI医疗文本结构化引擎对患者上传的报告进行自动解析和分类,提高数据处理效率
- 构建闭环管理:将患者档案与智能随访、量表评估、患教触达等功能结合,形成从诊前到诊后的全周期患者管理闭环
七、常见问题解答
问:腾讯云患者档案支持哪些终端设备?
答:患者端基于微信小程序实现,无需安装和下载额外应用,在微信内即可使用。医生端支持PC端和微信小程序双终端,方便医生在院内和院外各种场景下使用。
问:如何保证患者数据的安全性?
答:腾讯云患者档案采用多层安全保护机制。数据传输使用HTTPS协议和AES-256加密,数据存储经过严格脱敏和加密。同时支持国密SM算法,并通过患者授权管理控制数据访问权限。
问:患者档案如何与医院现有HIS系统对接?
答:腾讯云患者档案提供API接入方式,支持与医院HIS系统、区域卫生信息平台等第三方系统对接。通过腾讯云API网关可以实现灵活的数据共享接口管理。
问:AI医疗文本结构化能处理哪些类型的报告?
答:AI医疗文本结构化引擎可以自动解析和整理患者上传的各类医疗报告,包括检验报告、检查报告、病理报告等。系统能够自动识别报告类型,提取关键信息,按照时间顺序排序并生成趋势图表。
问:患者档案支持多成员管理吗?
答:支持。用户可以在患者档案微信小程序中添加家庭成员,完善成员信息并完成验证后,即可查看家庭成员的云端影像检查。系统支持建立包含父母、子女的多成员家庭档案。
问:对接开发和部署需要多长时间?
答:腾讯云患者档案支持SaaS化部署,可以快速轻量上线。产品提供API和H5等多种接入方式,功能模块可按需拆分接入。具体的开发和部署时间取决于医疗机构的实际需求和系统复杂度,一般可以在数周内完成基础功能的对接上线。




