检测报告回调
接口描述
用于舌诊平台回传用户检测报告的通知
- 参数名称和字段类型固定;
- 接收到通知后,先解密数据,再对原文进行验签;
- 舌诊平台最多尝试3次回调通知,均无响应则不再通知。
接口说明
请求地址 系统集成方提供的支付成功后通知地址
请求方法
POST
请求参数
- 使用form-data方式传参。
名称 | 格式 | 是否必须 | 含义 |
---|---|---|---|
encryptedJson |
String |
是 | 应用 AES 秘钥(aesKey )对原文进行加密后的字符串 |
signEncryptedJson |
String |
是 | 使用平台私钥(rsaPrivateKey )对原文中的thirdId 和time 进行RSA签名后的字符串。字符串拼接方式: thirdId_time 。建议开发者接收到请求后对 signEncryptedJson 验证签名以保证系统安全性。 |
原文实例
{
"returnType": 1,
"name": "张三",
"phone": "13344445555",
"email": null,
"sex": 1,
"age": 42,
"time": "2023-03-08 08:23:13",
"pdf": "https://labelsys-images.oss-cn-hangzhou.aliyuncs.com/tongueFile/check/2023/03/87d76220-085e-4d2e-9fd7-9f5a01da1940.pdf",
"healthIndex": 100.0,
"constitutionNames": "气虚",
"symptomName": "胃气虚证",
"thirdId": "13344445555"
}
原文参数
参数 | 类型 | 描述 |
---|---|---|
returnType |
number |
响应类型 |
errorMsg |
string |
错误信息。returnType=1 时有值 |
name |
string |
检测人名称 |
phone |
string |
检测人手机号 |
email |
string |
检测人邮箱 |
sex |
number |
检测人性别(1 男,2 女) |
age |
number |
检测人年龄 |
time |
string |
检测时间 |
pdf |
string |
检测 PDF 报告 URL |
healthIndex |
number |
健康指数,其值越大表示健康状态越好 |
constitutionNames |
string |
体质 |
symptomName |
string |
证型,进一步判断体质(constitutionNames )的结果,更为准确体现用户的真实体质 |
thirdId |
string |
第三方用户唯一标识 |
- 原文参数中
returnType
字段各个值的含义如下表:
类型 |
含义 |
---|---|
returnType=1 |
检测成功。可能包含PDF文件 |
returnType=2 |
检测失败 |
returnType=3 |
PDF已生成。数据格式同returnType=1 ,肯定包含PDF文件 |
结果处理示例
- 接收到通知后,客户系统处理流程参考如下代码:
@PostMapping("reportReturn")
public String reportReturn(String encryptedJson, String signEncryptedJson) throws Exception {
// 应用AES秘钥
String aesKey = "";
// 平台RSA公钥
String rsaPublicKey = "";
// 1. 先解密
String source = AesSimpleUtil.decrypt(encryptedJson, aesKey);
JSONObject jsonObject = JSONObject.parseObject(source);
// 2. 再验证签名
String signSource = String.format("%s_%s",
jsonObject.getString("thirdId"),
jsonObject.getString("time"));
boolean verify = RsaSimpleUtil.verify(signSource, signEncryptedJson, rsaPublicKey);
if (!verify) {
return "error";
}
// 3. 验证成功,则仅仅业务保存并返回success字符串
return "success";
}