# 挂号 H5 接入
# 1. 背景介绍
这里主要针对合作方以 H5 的方式接入到腾讯健康小程序中来
用户从腾讯健康小程序跳转到合作方 H5 页面,完成挂号后,合作方通过接口将订单信息同步给腾讯健康,便于用户查看订单。
# 2. 接口说明
# 2.1 H5 挂号后跳转小程序支付
- 小程序通过 webview 加载 H5 时,是无法拉起 H5 的收银台的,这时候仍然需要跳转到腾讯健康小程序的支付页面来唤起收银台
- 如果在 H5 里面打开调试模式,是可能在小程序里面调起 H5 收银台的,但关闭调试模式后将失效,所以该方法不可行
代码片段:
// 1.引入jssdk
<script
type="text/javascript"
src="https://res.wx.qq.com/open/js/jweixin-1.3.2.js"
/>; // 这里版本高于1.3.2均可
// 2. 在用户挂完号后,如果需要支付,执行以下代码进行跳转腾讯健康小程序
wx.miniProgram.navigateTo({
url:
"/pages/registration/payment/main?appointId=${appointId}&ThRegisterId=${ThRegisterId}", //
});
序号 | 字段 | 名称 | 类型 | 必填 | 备注 |
---|---|---|---|---|---|
1 | appointId | 预约 ID | string | ✔️ | 在 H5 链接里面点击挂号后产生, 主要是用于后台接口来获取签名用,不一定要是挂号订单 ID,只要能换取签名和订单信息均可,合作方可以自由定义 |
2 | ThRegisterId | 跳转到合作方链接带的 ThRegisterId | string | ✔️ |
# 2.2 获取小程序支付和预约相关信息
- 支付在
腾讯健康
小程序端发起,但统一下单以及小程序支付所需的签名等信息由合作方去微信支付完成后返回- 腾讯侧需要给用户展示订单信息,这里需要合作方返回
要拿到小程序拉起收银台所需要的参数,大概要经过两步:
# 第一步:统一下单
- 统一下单请参考:微信支付文档 (opens new window)
- 在该模式下的关于统一下单中的参数携带说明:
appid
: ISV 申请的服务商商户对应的 APPIDmch_id
:ISV 申请的服务商商户号sub_appid
:当前调起支付的小程序 APPID,即腾讯健康小程序的appid
,固定为:wxb032bc789053daf4
sub_mch_id
:跟 ISV 有绑定关系的某个医院的商户号,即上述提到的服务商商户号的某个子商户号sub_openid
:此处是用户在腾讯健康小程序下的 openid,这个比较重要,到时候退款是直接退到该用户的原支付路径下的- 其他参数按照文档上传递即可,无特殊性
# 第二步:获取签名参数:
- 在获取到统一下单的相关返回参数后,按照文档上的加密方法再生成小程序支付所需的签名,具体方法请参考:小程序调起支付 API (opens new window)
接口名:
paymentAndOrderInfo
请求参数:
序号 | 字段 | 名称 | 类型 | 必填 | 备注 |
---|---|---|---|---|---|
1 | appointId | 预约 ID | string | ✔️ | 在 H5 链接里面点击挂号后产生的订单 ID |
2 | paymentReq | 获取小程序支付的请求参数 | object | ✔️ | 详见PaymentReq |
# PaymentReq
序号 | 字段 | 名称 | 类型 | 必填 | 备注 |
---|---|---|---|---|---|
1 | openid | 用户在腾讯健康小程序的 openid | string | ✔️ | |
2 | sub_appid | 当前调起支付的小程序 APPID(腾讯健康 APPID) | string | ✔️ | 默认为:wxb032bc789053daf4 |
3 | body | 商品简单描述 | string | ✔️ | |
4 | detail | 商品详细描述 | string | ✖️ |
返回参数:
序号 | 字段 | 名称 | 类型 | 必填 | 备注 |
---|---|---|---|---|---|
1 | code | 状态码 | int | ✔️ | 0:正常,其他:异常。具体见附录说明 |
2 | message | 状态描述 | string | ✔️ | |
3 | count | 总记录条数 | int | ✔️ | |
4 | rsp | 返回详情 | PaymentAndOrderInfo | ✔️ |
# PaymentAndOrderInfo
序号 | 字段 | 名称 | 类型 | 必填 | 备注 |
---|---|---|---|---|---|
1 | paymentRsp | 小程序支付所需相关返回信息 | PaymentRsp | ✔️ | 请参照:第二步:获取签名参数 |
2 | orderInfo | 订单相关信息 | AppointOrderInfo | ✔️ |
# PaymentRsp
序号 | 字段 | 名称 | 类型 | 必填 | 备注 |
---|---|---|---|---|---|
1 | timeStamp | 时间戳从 1970 年 1 月 1 日 00:00:00 至今的秒数,即当前的时间 | string | ✔️ | |
2 | nonceStr | 随机字符串,长度为 32 个字符以下。 | string | ✔️ | |
3 | package | 统一下单接口返回的 prepay_id 参数值,提交格式如:prepay_id=* | string | ✔️ | |
4 | signType | 签名算法,暂支持 MD5 | string | ✔️ | |
5 | paySign | 签名 | string | ✔️ |
# AppointOrderInfo
序号 | 字段 | 名称 | 类型 | 必填 | 备注 |
---|---|---|---|---|---|
1 | appointId | 预约 ID | string | ✔️ | |
2 | bookingNo | HIS 预约订单号/当天挂号锁号 ID | string | ✖️ | |
3 | departmentId | 科室 ID | string | ✔️ | |
4 | departmentName | 科室 名称 | string | ✔️ | |
5 | doctorId | 医生 ID | string | ✔️ | |
6 | doctorName | 医生名 | string | ✔️ | |
7 | sourceType | 班别代码 | string | ✔️ | 详见 SourceType (opens new window) |
8 | sourceTypeName | 班别名称,如上午、下午 | string | ✔️ | |
9 | treatDate | 就诊日期 | string | ✔️ | 格式:yyyy-MM-dd |
10 | queueNo | 排队序号 | string | ✖️ | |
11 | waitingCount | 前面就诊人数 | int | ✖️ | 如果患者已就诊,则设为-1 |
12 | waitingTime | 预计候诊等待时间(分钟) | string | ✖️ | 例:1 患者就诊设置 3 分分钟,10 个患者预计候诊 30 分钟 |
13 | takeNoTime | 取号时间 | string | ✖️ | 格式:yyyy-MM-dd HH:mm:ss |
14 | visitTime | 实际就诊时间 | string | ✖️ | 格式:yyyy-MM-dd HH:mm:ss |
15 | sourceBeginTime | 分时开始时间 | string | ✔️ | 格式:HH:mm (08:30 ) |
16 | sourceEndTime | 分时结束时间 | string | ✔️ | 格式:HH:mm (09:00) |
17 | isCancelabe | 是否可以取消 | int | ✔️ | 0-不可以,1-可以,2-未定义 |
18 | hisTakeNo | 取号密码 | string | ✖️ | 医院终端取号密码 |
19 | hospitalId | 医院 ID | string | ✔️ | |
20 | hospitalName | 医院名称 | string | ✔️ | |
21 | orderSource | 订单来源 | string | ✖️ | 标识订单从哪个渠道产生的 详见 ordersource (opens new window) |
22 | payStatus | 订单支付状态 | int | ✔️ | 详见 PayStatus (opens new window) |
23 | treatStatus | 诊疗状态 | int | ✔️ | 详见 TreatStatus (opens new window) |
24 | orderStatus | 订单状态 | int | ✔️ | 详见 OrderStatus (opens new window) |
25 | payFee | 实付金额 | int | ✔️ | 单位:分;没有用 0 表示 |
26 | registerFee | 挂号金额 | int | ✔️ | 单位:分;没有用 0 表示 |
27 | treatFee | 诊疗金额 | int | ✔️ | 单位:分;没有用 0 表示 |
28 | reduceFee | 优惠金额 | int | ✔️ | 单位:分;没有用 0 表示 |
29 | userName | 就诊人姓名 | string | ✔️ | |
31 | userBirthday | 就诊人出生日期 | string | ✔️ | 格式:yyyy-MM-dd |
30 | userPhone | 就诊人手机号 | string | ✔️ | |
32 | userCardType | 就诊人证件类型 | string | ✔️ | 详见 cardType (opens new window) |
33 | userCardNo | 就诊人证件号 | string | ✖️ | |
34 | orderTime | 订单创建时间 | string | ✔️ | 格式:yyyy-MM-dd HH:mm:ss |
35 | payMethod | 支付方式 | int | ✖️ | 详见 PayMethod (opens new window) |
36 | payType | 支付类型 | int | ✖️ | 详见 PayType (opens new window) |
37 | branchHospitalId | 分院 ID | string | ✖️ | |
38 | branchHospitalName | 分院名 | string | ✖️ | |
39 | callbackUrl | 回调 url | string | ✖️ | 在腾讯健康 小程序前端支付完成后要跳转的页面。如果不传,默认就会回到合作方 H5 系统里跳腾讯健康 小程序支付页面前的那个页面 |
# 2.3 同步订单的排队叫号信息(可选)
- 针对支持
排队叫号
功能的合作方,排队队列在合作方侧维护,队列变动时同步到腾讯健康后台
接口名: syncQueueList
请求参数:
序号 | 字段 | 名称 | 类型 | 必填 | 备注 |
---|---|---|---|---|---|
1 | ThRegisterId | 关联 ID | string | ✔️ | 腾讯健康侧传给合作方,用于唯一标识一个用户 |
2 | queueList | 排队订单 | array[WaitingQueue] | ✔️ |
# WaitingQueue
序号 | 字段 | 名称 | 类型 | 必填 | 备注 |
---|---|---|---|---|---|
1 | ThRegisterId | 关联 ID | string | ✔️ | |
2 | appointId | 预约 ID | string | ✔️ | |
3 | queueId | 队列 ID | string | ✖️ | 平台方维护的叫号队列序号 |
4 | queueName | 队列名称 | string | ✖️ | 平台方维护的叫号队列名称 |
5 | hospitalId | 医院 ID | string | ✔️ | |
6 | hospitalName | 医院名称 | string | ✔️ | |
7 | departmentId | 部门 ID | string | ✔️ | |
8 | departmentName | 部门名称 | string | ✔️ | |
9 | doctorId | 医生 ID | string | ✔️ | |
10 | doctorName | 医生名称 | string | ✔️ | |
11 | queueNo | 排队序号 | int | ✔️ | |
12 | curQueueNo | 当前叫号 | int | ✔️ | |
13 | waitingCount | 还需等待人数 | int | ✔️ | |
14 | waitingTime | 还需等待时间 | string | ✔️ | |
15 | callState | 叫号状态 | int | ✔️ | 0-未叫;1-已叫 |
返回参数:
序号 | 字段 | 名称 | 类型 | 必填 | 备注 |
---|---|---|---|---|---|
1 | code | 返回码 | int | ✔️ | 0:正常,其他:异常。 |
2 | message | 状态描述 | string | ✔️ | |
3 | rsp | 返回详情 | object | ✔️ |
# 2.4 同步门诊费用(可选)
- 针对支持
门诊缴费
的合作方,将患者的门诊费用信息同步到 腾讯健康小程序 进行展示
接口名: syncOutPatientFee
请求参数:
序号 | 字段 | 名称 | 类型 | 必填 | 备注 |
---|---|---|---|---|---|
1 | ThRegisterId | 关联 ID | string | ✔️ | 腾讯健康侧传给合作方,用于唯一标识一个用户 |
2 | hospitalId | 医院 ID | string | ✔️ | |
3 | hospitalName | 医院名称 | string | ✔️ | |
4 | feeId | 费用列表 ID | string | ✔️ | 单次收费唯一 ID,与详情关联 |
5 | recordId | 单据 ID | string | ✔️ | 某个收费的单据 ID |
6 | subjectId | 检查项目 ID | string | ✔️ | |
7 | subjectName | 检查项目名称 | string | ✔️ | |
8 | departmentId | 科室 ID | string | ✔️ | |
9 | departmentName | 科室名称 | string | ✔️ | |
10 | doctorId | 医生 ID | string | ✔️ | |
11 | doctorName | 医生名称 | string | ✔️ | |
12 | patientName | 患者姓名 | string | ✔️ | |
13 | treatCardNo | 就诊卡号 | string | ✔️ | |
14 | idCard | 身份证号 | string | ✔️ | |
15 | totalCost | 总花费 | string | ✔️ | |
16 | selfCost | 自付费用 | string | ✔️ | |
17 | healthCost | 医保支出费用 | string | ✔️ | |
18 | outpID | 看诊次数 | string | ✔️ | |
19 | feeDate | 费用日期 | string | ✔️ | |
20 | feeType | 费用类型 | int | ✔️ | 0-门诊;1-住院 |
21 | payStatus | 是否已支付 | int | ✔️ | 0-未支付;1-已支付;2-已退款 |
22 | payTime | 支付时间 | string | ✔️ | |
23 | outPatientFeeList | 门诊费用详情 | array[FeeDetail] | ✔️ |
# FeeDetail
序号 | 字段 | 名称 | 类型 | 必填 | 备注 |
---|---|---|---|---|---|
1 | ThRegisterId | 关联 ID | string | ✔️ | 腾讯健康侧传给合作方,用于唯一标识一个用户 |
2 | feeId | 费用列表 ID | string | ✔️ | 此项费用属于单次收费 ID |
3 | itemId | 费用项目 ID | string | ✔️ | |
4 | itemName | 费用项目名称 | string | ✔️ | |
5 | itemUnitPrice | 费用项目单价 | string | ✔️ | |
6 | itemNum | 费用项目数量 | string | ✔️ | |
7 | itemUnit | 费用项目单位 | string | ✔️ | |
8 | itemPrice | 项目总费用 | string | ✔️ | |
9 | feeDate | 费用日期 | string | ✔️ | |
10 | payStatus | 是否已支付 | int | ✔️ | 0-未支付;1-已支付;2-已退款 |
11 | payTime | 支付时间 | string | ✔️ |
返回参数:
序号 | 字段 | 名称 | 类型 | 必填 | 备注 |
---|---|---|---|---|---|
1 | code | 返回码 | int | ✔️ | 0:正常,其他:异常。 |
2 | message | 状态描述 | string | ✔️ | |
3 | rsp | 返回详情 | object | ✔️ |
# 2.5 同步住院费用(可选)
- 针对支持住院费用展示的合作方,将住院费用同步到 腾讯健康小程序 进行展示
接口名: syncInPatientFee
请求参数:
序号 | 字段 | 名称 | 类型 | 必填 | 备注 |
---|---|---|---|---|---|
1 | ThRegisterId | 关联 ID | string | ✔️ | 腾讯健康侧传给合作方,用于唯一标识一个用户 |
2 | hospitalId | 医院 ID | string | ✔️ | |
3 | hospitalName | 医院名称 | string | ✔️ | |
4 | feeId | 费用列表 ID | string | ✔️ | 单次收费唯一 ID,与详情关联 |
5 | recordId | 单据 ID | string | ✔️ | 某个收费的单据 ID |
6 | subjectId | 检查项目 ID | string | ✔️ | |
7 | subjectName | 检查项目名称 | string | ✔️ | |
8 | departmentId | 科室 ID | string | ✔️ | |
9 | departmentName | 科室名称 | string | ✔️ | |
10 | doctorId | 医生 ID | string | ✔️ | |
11 | doctorName | 医生名称 | string | ✔️ | |
12 | patientName | 患者姓名 | string | ✔️ | |
13 | treatCardNo | 就诊卡号 | string | ✔️ | |
14 | idCard | 身份证号 | string | ✔️ | |
15 | totalCost | 总花费 | string | ✔️ | |
16 | selfCost | 自付费用 | string | ✔️ | |
17 | healthCost | 医保支出费用 | string | ✔️ | |
18 | inDate | 住院日期 | string | ✔️ | |
19 | outDate | 出院日期 | string | ✔️ | |
20 | feeType | 费用类型 | int | ✔️ | 0-门诊;1-住院 |
21 | payStatus | 是否已支付 | int | ✔️ | 0-未支付;1-已支付;2-已退款 |
22 | payTime | 支付时间 | string | ✔️ | |
23 | inPatientFeeList | 住院费用详情 | array[FeeDetail] | ✔️ |
返回参数:
序号 | 字段 | 名称 | 类型 | 必填 | 备注 |
---|---|---|---|---|---|
1 | code | 返回码 | int | ✔️ | 0:正常,其他:异常。 |
2 | message | 状态描述 | string | ✔️ | |
3 | rsp | 返回详情 | object | ✔️ |
# 2.6 获取用户授权信息
- 通过
腾讯健康
小程序跳转携带过去的ThRegisterId
来换取用户授权的手机号,从而实现用户打开合作方系统时的静默登录
接口名: queryUserAuthInfo
请求参数:
序号 | 字段 | 名称 | 类型 | 必填 | 备注 |
---|---|---|---|---|---|
1 | ThRegisterId | 关联 ID | string | ✔️ | 腾讯健康跳转合作方携带的 ID 标识 |
返回参数:
序号 | 字段 | 名称 | 类型 | 必填 | 备注 |
---|---|---|---|---|---|
1 | code | 返回码 | int | ✔️ | 0:正常,其他:异常。 |
2 | message | 状态描述 | string | ✔️ | |
3 | rsp | 返回详情 | UserAuthInfo | ✔️ |
# UserAuthInfo
序号 | 字段 | 名称 | 类型 | 必填 | 备注 |
---|---|---|---|---|---|
1 | phoneNum | 用户授权的手机号 | string | ✖️ | 如果返回NONE ,表示用户并未授权手机号给腾讯健康 ,暂时无法获取 |
# 2.7 错误/异常 信息回传上报(可选)
当用户在合作方系统进行操作,有相关异常时,可以通过接口回传给
腾讯
侧,便于进行行为的监控和统计
接口名: syncErrorInfo
请求参数:
序号 | 字段 | 名称 | 类型 | 必填 | 备注 |
---|---|---|---|---|---|
1 | ThRegisterId | 关联 ID | string | ✔️ | 腾讯健康跳转合作方携带的 ID 标识 |
2 | type | 错误类型 | string | ✔️ | 具体参见Type eg:实名认证失败,是发生在就诊人环节,这里传入 5 |
3 | detail | 具体错误原因 | string | ✔️ | |
4 | hospitalName | 医院名称 | string | ✔️ | |
5 | departmentName | 科室名称 | string | ✔️ | |
6 | doctorName | 医生名称 | string | ✔️ | |
7 | treatDate | 就诊日期 | string | ✔️ | 格式:yyyy-MM-dd |
8 | sourceBeginTime | 号源开始时间 | string | ✔️ | |
9 | sourceEndTime | 号源结束时间 | string | ✔️ | |
10 | userName | 就诊人姓名 | string | ✔️ | |
11 | userBirthday | 就诊人出生日期 | string | ✔️ | 格式:yyyy-MM-dd |
12 | userPhone | 就诊人手机号 | string | ✔️ | |
13 | userCardType | 就诊人证件类型 | string | ✔️ | 详见 cardType (opens new window) |
14 | userCardNo | 就诊人证件号 | string | ✔️ | |
15 | orderTime | 订单创建时间 | string | ✔️ | 格式:yyyy-MM-dd HH:mm:ss |
# Type
值 | 说明 |
---|---|
1 | 登录 |
2 | 获取科室 |
3 | 获取排班 |
4 | 获取号源 |
5 | 挂号--就诊人 |
6 | 挂号--下单 |
7 | 挂号--支付 |
8 | 挂号--取消 |
9 | 挂号--退款 |
10 | 其它 |
返回参数:
序号 | 字段 | 名称 | 类型 | 必填 | 备注 |
---|---|---|---|---|---|
1 | code | 返回码 | int | ✔️ | 0:正常,其他:异常。 |
2 | message | 状态描述 | string | ✔️ | |
3 | rsp | 返回详情 | ✔️ |
# 2.8 H5 订单回传
此接口用于用户在合作方 H5界面/小程序 初次产生订单,或订单状态产生变更时,合作方主动同步订单;
接口名:
参看 挂号API接入 2.3.2同步挂号订单 syncAppointInfo (opens new window)
注意:同步时必须带上THRegisterId
- 初次同步时,订单作为新建单,所有字段信息会被记录,需要保证初次同步数据完备和准确;
- 后续的订单记录同步,只同步订单、支付、退款状态,不再重复同步其他字段
# 3.修改记录
日期 | 更新事项 | 操作人 |
---|---|---|
2020.01.13 17:50 | 增加 H5 跳转小程序支付页面的相关说明和代码片段 | pigozhu |
2020.02.20 17:20 | 增加 H5 跳转小程序的排队叫号、门诊住院费用同步接口说明 | criszheng |
2020.02.20 17:20 | 增加 H5 换取用户授权信息(如:手机号)等 | pigozhu |
2020.04.17 15:30 | 增加 2.7 关于错误信息回传上报的接口说明 | pigozhu |
2020.08.05 09:30 | 2.1 -19,20 变更类型为必填(产品前端页面要展示相关信息) | pigozhu |