# 接口平台
# 平台能力
结合具体场景,创建平台应用,实现平台能力
- 访问凭证验证【默认】
- 重复请求验证【默认】
- IP白名单验证【结合应用配置】
- 运行环境验证【结合应用配置】
- 访问频次验证【结合应用配置】
- 有效时间验证【结合应用配置】
- 响应加密解密【结合应用配置】
- 统一接口管理【TODO】
- 应用接口授权【仅对PLAT地址生效】
- 请求日志管理【外部接口】
# 创建平台应用
基本信息:
- 地址: /plat/app/generate
- 请求方式: POST
- Content-Type: application/json
- Header:userKey Future_2018
参数说明:
| 参数 | 示例 | 必填 | 说明 |
|---|---|---|---|
| sourceCode | htmp | 是 | 第三方用户唯一凭证 |
| appName | 教学平台 | 是 | 第三方用户唯一凭证密钥,即auth_secret |
| generateResponseSecret | true | 是 | 返回结果是否加密 |
| visitLimit | 20 | 否 | 接口访问频次,单位分钟 |
| validTime | 60 | 否 | 请求时间与服务器时间的有效间隔,单位秒 |
| validEnv | production | 否 | 运行环境 |
| whiteIpList | 192.168.0.198 | 否 | IP白名单列表,多个用逗号隔开 |
响应说明:
{
"msg": "操作成功",
"code": 200,
"data": {
"sourceCode": "htmp",
"appName": "教学平台",
"appId": "78974aede6b8408ab69a364160a682ef", // 应用唯一标识
"appSecret": "292ef3fa6b1d3038484fc37657fa74b9", // 应用标识密钥
"responseSecret": "19a523c6d7c10096513fd42a8ecc0a17" // 返回结果解密密钥
}
}
# 获取访问凭证
平台接口调用时,请求头需携带访问凭证satoken,开发者需妥善保存,有效期为2小时。
基本信息:
- 地址: /plat/access/getToken
- 请求方式: POST
- Content-Type: application/json
参数说明:
| 参数 | 示例 | 必填 | 说明 |
|---|---|---|---|
| appId | 78974aede6b8408ab69a364160a682ef | 是 | 第三方应用唯一标识 |
| appSecret | 292ef3fa6b1d3038484fc37657fa74b9 | 是 | 第三方应用唯一密钥 |
结果说明:
{
"msg": "操作成功",
"code": 200,
"data": "c2363ed2-04f6-494f-956d-6ef08b5a4790" // 访问凭证satoken
}
# 访问业务资源
PATH地址:PLAT服务暴露的业务资源地址
基本信息:
- 地址: /plat/access/getData
- 请求方式: POST
- Content-Type: application/json
- Header【必要】:satoken
- Header【必要】:appId
- Header【必要】:nonce 示例:请求唯一值
- Header【结合应用配置】:timestamp 示例:1750212960723
- Header【结合应用配置】:appEnv 示例:prod
参数说明:
| 参数 | 示例 | 必填 | 说明 |
|---|---|---|---|
| path | /plat/system/system/config/configByName | 是 | 资源地址 |
| hospitalId | NTSY135 | 是 | 访问医院标识 |
| appCode | mt | 是 | 访问应用标识 |
| param | {"configName": "进修类型"} | 是 | 业务参数 json对象 |
结果说明:
{
"code": 200,
"msg": "操作成功",
"data": "[{\"value\":\"普通进修\",\"type\":\"周期\",\"typeCode\":\"mt\"},{\"value\":\"短期进修\",\"type\":\"周期\",\"typeCode\":\"mt\"}]"
}
响应解密:
请求响应采用AES加密 Java的解密示例:
/**
* 使用Hutool工具类解密
* @param encrypt 密文
* @param aesKey 解密密钥responseSecret
*/
public static String decrypt(String encrypt, String aesKey) {
byte[] byteKey = SecureUtil.generateKey(SymmetricAlgorithm.AES.getValue(), aesKey.getBytes()).getEncoded();
SymmetricCrypto aes = SecureUtil.aes(byteKey);
return aes.decryptStr(encrypt);
}