H5 接入指南
最近更新:2024年10月24日
接入流程图
在开放平台创建应用后,获取appId、appSecret、salt
一、header公共参数
参数名 | 参数类型 | 是否必须 | 示例 | 参数说明 |
---|---|---|---|---|
appId | String | 是 | 开放平台申请的Id | |
appSecret | String | 是 | 开放平台申请的secret | |
sign | String | 是 | 见下方sign签名方法 | 经过加密生成的sign |
timestamp | String | 是 | 2020-05-21 11:07:50 | 请求时间戳,yyyy-MM-dd HH:mm:ss,误差不超过15分钟 |
nonce | String | 是 | SUzI1NiIsIn | 唯一的随机字符串(15分钟内) |
二、生成sign(前后端公用)
1. 按照请求参数名的字母升序排列非空请求参数(包含appId),使用URL键值对的格式(即key1=value1&key2=value2…)拼接成字符串stringA;
2. stringA最后拼接上`salt`得到字符串`stringSignTemp`;(md5)
3. 对`stringSignTemp`进行加密运算,并将得到的字符串所有字符转换为大写,得到sign值。
graph TD
appId --> sign
接口参数 --> sign
salt -.参与加密, 但不传输.-> sign
代码示例:
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.codec.digest.DigestUtils;
import org.springframework.util.StringUtils;
import java.nio.charset.StandardCharsets;
import java.util.Map;
import java.util.TreeMap;
/**
* main方法请求示例
*/
public static void main(String[] args) {
Map<String, Object> signParams = new HashMap<>(16);
// 客户端参数
signParams.put("appId", "系统分配的appId");
signParams.put("appSecret", "系统分配的appSecret");
signParams.put("timestamp", "请求时间戳,格式yyyy-MM-dd HH:mm:ss,与服务器时间误差不超过15分钟");
signParams.put("nonce", "请求唯一凭证,不可重复");
// 请求体body里必填参数、非空参数都要参与签名
signParams.put("mobile", "13012345678");
signParams.put("outUserId", "202410240001");
signParams.put("alias", "虚空假面");
signParams.put("sex", "MALE");
signParams.put("birthday", "1968-01-01");
String sign = sign(signParams, "系统分配的salt");
// 计算出的签名值sing放到用户授权注册register接口的http请求头sign字段
}
/**
* 方法描述:签名字符串
*/
public static String sign(Map<String, Object> params, String salt) {
StringBuilder sb = new StringBuilder();
params.put("salt", salt);
// 将参数以参数名的字典升序排序
Map<String, Object> sortParams = new TreeMap<>(params);
// 遍历排序的字典,并拼接a=b&c=d格式
for (Map.Entry<String, Object> entry : sortParams.entrySet()) {
String key = entry.getKey();
if (!StringUtils.isEmpty(entry.getValue())) {
sb.append("&").append(key).append("=").append(entry.getValue());
}
}
String rawString = sb.toString().replaceFirst("&","");
log.info("签名前字符串:"+ rawString);
params.remove("salt");
String signString = DigestUtils.md5Hex(rawString.getBytes(StandardCharsets.UTF_8)).toUpperCase();
log.info("签名后字符串:"+signString);
return signString;
}
三、接口列表
1. 接口名称:用户注册授权
Method:POST
(测试环境)Path:https://stg-open.adahealth.cn/api/user/v2/register
(生产环境)Path:https://open.adahealth.cn/api/user/v2/register
Header
名称 | 类型 | 是否必须 | 备注 | 说明 |
---|---|---|---|---|
appId | String | 是 | 应用标识 | 创建应用后自动生成 |
appSecret | String | 是 | 应用秘钥 | 创建应用后自动生成 |
sign | String | 是 | 见上方sign签名方法 | 经过加密生成的sign |
timestamp | String | 是 | 2020-05-21 11:07:50 | 请求时间戳,yyyy-MM-dd HH:mm:ss,误差不超过15分钟 |
nonce | String | 是 | SUzI1NiIsIn | 唯一的随机字符串(15分钟内) |
请求体 Body
名称 | 类型 | 是否必须 | 备注 | 说明 |
---|---|---|---|---|
mobile | String | 是 | 用户手机 | 以mobile作为用户标识 |
outUserId | String | 是 | 第三方平台用户标识 | 第三方平台用户ID |
alias | String | 是 | 昵称 | 主档案字段 |
sex | String | 是 | 性别 | 主档案字段 MALE:男 FEMALE:女 |
birthday | String | 是 | 生日 | 主档案字段 yyyy-MM-dd |
height | Integer | 否 | 身高 | CM |
weight | Integer | 否 | 体重 | KG |
smoker | String | 否 | 是否吸烟 | Y:是 N:否 NA:不确定(默认) |
diabetes | String | 否 | 是否高血糖 | Y:是 N:否 NA:不确定(默认) |
hypertension | String | 否 | 是否高血压 | Y:是 N:否 NA:不确定(默认) |
pregnancy | String | 否 | 是否怀孕 | Y:是 N:否 NA:不确定(默认) |
返回数据
名称 | 类型 | 是否必须 | 备注 | 说明 |
---|---|---|---|---|
code | integer | 是 | 响应码 | 0-success 非0-error |
msg | string | 否 | 响应信息 | |
data | object | 是 | 业务对象 | { openId:"efadkafhfw38994", channel:"38", redirectUrl: "第三方跳转H5 URL" } |
2. 接口名称:疾病—挂号科室匹配
注:该接口仅适用产品“AI分诊”
请求体 Body
名称 | 类型 | 是否必须 | 备注 | 说明 |
---|---|---|---|---|
userId | String | 是 | 第三方平台用户标识 | 第三方平台用户ID(唯一值) |
caseId | String | 是 | 评估编号 | 评估编号 |
date | Date | 是 | 评估日期时间 | 评估日期时间 |
diseaseId | String | 是 | 疾病ID | 疾病ID(ICD-10) |
disease | String | 是 | 疾病名称 | 疾病名称 |
department | DepartmentInfo | 是 | 挂号科室名称 | 推荐挂号科室 key=id,value=name |
DepartmentInfo
名称 | 类型 | 是否必须 | 备注 | 说明 |
---|---|---|---|---|
firstDepartCode | String | 是 | 一级科室code | |
firstDepartName | String | 是 | 一级科室name | |
secondDepartCode | String | 是 | 二级科室code | |
secondDepartName | String | 是 | 二级科室name | |
thirdDepartCode | String | 是 | 三级科室code | |
thirdDepartName | String | 是 | 三级科室name |
返回数据
名称 | 类型 | 是否必须 | 备注 | 说明 |
---|---|---|---|---|
code | integer | 是 | 响应码 | 0-success 非0-error |
message | string | 否 | 响应信息 | |
data | object | 是 | 业务对象 | { url: "第三方跳转H5 URL" } |