一、回调接口设计
~~~\[api\]
post:/xxx/xxx
~~~
**Content-Type类型:** application/json;charset=UTF-8
## 请求参数
| 类型 | 是否必填 | 最大长度 | 描述 | 示例值 |
| --- | --- | --- | --- | --- |
| String | 是 | 1024| 3DES加密字符串| ....|
Java请求示例
```
MUhMwhNCPD70Z41v246BKLN7pp7Y2plYwrxWpSdnAD6IPfk14ixR40QAGkjPTv38lql30htU0rSJMluXjQOlZDDqTxvHsRCIr1nAmrdKn2KuDoj9BX6dFu4x+kgPvJ6TigRTJYxgZapwwuVljNav2jxz1gpIMsS0ZI+fZS2U2dw=
```
解析参数(3DES解密后JSON说明)
| 请求参数 | 类型 | 是否必填 | 最大长度 | 描述 | 示例值 |
| --- | --- | --- | --- | --- | --- |
| text| String | 是 | 2048| 内容| ....|
| time| String | 是 | 1024| 时间| 1970-01-15 14:56:07|
| type| String | 是 | 1024| 类型| 短信|
| userId| String| 是 | 1024| 用户ID| 666|
| sign| String | 是 | 32 | 商户请求参数的签名串,详见签名 |
响应参数
| 类型 | 是否必填 | 最大长度 | 描述 |
| --- | --- | --- | --- | --- |
| String | 是 | 11 | 正确:SUCCESS;错误:ERROR| SUCCESS|
java接口示例:
```
@RestController
@RequestMapping("/api/callBack")
public class CallBackApi {
/*
* key 回调密钥,用于app端与服务端数据加密协议
* 格式位24位大写字母和数字的组合,用户自定义设置
*/
private String key = "EAC5391E1A4FBB4A1319BD80";
@Autowired
private VipHuidiaoService vipHuidiaoService;
@Autowired
private SysUserService sysUserService;
/**
* @ Description : API获取回调接口
* @ author : superMartin
* @ param : data:3DES-ECB加密字符串
* @ return : String:成功SUCCESS;失败ERROR
* @ exception :
* @ date : 2020/7/4 14:13
*/
@PostMapping("/save")
public String save(@RequestBody String data) throws Exception {
//通过key对data进行3DES-ECB解密
String json = ThreeDes.decryptThreeDESECB(data,key);
//将解密后的字符串转JSON格式
JSONObject jsonObject = JSONObject.parseObject(json);
//将JSON字符转转键值对格式
Map<String, String> params = JSONObject.parseObject(jsonObject.toJSONString(), new TypeReference<Map<String, String>>(){});
/*
* 验签,Map去掉sign,,排序通过key的ASCII值排序,通过"key=value&key2=value2...&"+"key="+key;
* 得到字符串通过MD5加密后与data解密后获取的sign进行比较,如果一致则为验签成功
*/
boolean verify = SignUtil.verifySign(params, key);
if (verify) {
//TODO 验签成功,做后续的操作
SysUserEntity user = sysUserService.queryObject(Long.valueOf(params.get("userId")));
VipHuidiaoEntity vipHuidiao = new VipHuidiaoEntity();
vipHuidiao.setText(params.get("text"));
vipHuidiao.setTime(params.get("time"));
vipHuidiao.setType(params.get("type"));
vipHuidiao.setUserId(Integer.valueOf(params.get("userId")));
vipHuidiao.setDeptId(user.getDeptId());
vipHuidiao.setDeptName(user.getDeptName());
vipHuidiaoService.save(vipHuidiao);
return "SUCCESS";
}
//TODO 验签失败
return "ERROR";
}
}
```