1.api接口说明
- api接口采用jwt规范。Json web token (JWT), 是为了在网络应用环境间传递声明而执行的一种基于JSON的开放标准((RFC 7519).该token被设计为紧凑且安全的,特别适用于分布式站点的单点登录(SSO)场景。JWT调用示例代码
2.api参数配置
- appId : 客户唯一标识符,由考试星提供,例如:14343。
- appKey : 用于加密/解密jwt,由考试星提供,例如:xf5ha3h67h4Ger34wh35p345h4。
- 获取方式:【管理员后台:系统设置->更多设置->开发者信息管理】
3.考试星提供api统一接口地址
- 地址: https://api.kaoshixing.com/api/company/data/:appId?jwt=:jwtInfo
- 请求方式:post
- jwtInfo:jwt_info是根据jwt规范,用appKey将过期时间、action_id加密,生成的加密字符串
4.客户提供api统一接口地址
- 地址(仅作示例):https://www.example.com/api/company/data/:appId?jwt=:jwtInfo
- 请求方式:post
- jwtInfo:jwt_info是根据jwt规范,用appKey将过期时间、action_id加密,生成的加密字符串
5.生成加密jwtInfo和解密(java示例)
(1).安装依赖
<dependency> <groupId>io.jsonwebtoken</groupId> <artifactId>jjwt</artifactId> <version>0.7.0</version> </dependency>
(2).生成加密字符串
import io.jsonwebtoken.Jwts;
String appKey = “xf5ha3h67h4Ger34wh35p345h4”
String jwtInfo = Jwts.builder()
.claim("exp", System. currentTimeMillis() + 1000*10)
.claim("action_id", "201")
.signWith(SignatureAlgorithm.HS256,appKey.getBytes("UTF-8")).compact();
(3).加密参数解释
appKey:加密的私钥,由考试星提供。 exp:过期时间。 action_id:请求行为类型。
(4).解密方法示例
import io.jsonwebtoken.Claims;
import io.jsonwebtoken.ExpiredJwtException;
import io.jsonwebtoken.Jwts;
public Boolean decodeJwt(String jwtInfo, String appKey) {
try {
Claims claims;
claims = Jwts.parser().setSigningKey(appKey.getBytes("UTF-8")).parseClaimsJws(jwtInfo).getBody();
String actionId = null == claims.get("action_id") || "".equals(claims.get("action_id")) ? ""
: claims.get("action_id").toString();
/**
* 处理action_id
*/
} catch (ExpiredJwtException e) {
LOGGER.info("decodeJwt解密失败!");
return false;
} catch (Exception e) {
LOGGER.info("decodeJwt解密失败!");
return false;
}
return true;
}
6.action_id参数解释
action_id调用方请求行为类型10000客户查询考生考试结果信息10001考试星回传考生考试结果信息。
7.查询考生考试结果信息
action_id = 10000
请求地址:https://api.kaoshixing.com/api/company/data/:appId?jwt=:jwtInfo
请求方式:POST
请求参数:
| 参数名称 | 是否必填 | 类型 | 参数描述 |
|---|---|---|---|
| userId | 是 | String | 考生唯一标识 |
| examId | 否 | int | 考试id |
| commitTimeStart | 否 | String | 起始交卷时间 |
| commitTimeEnd | 否 | String | 最晚交卷时间 |
| page | 是 | int | 页数,每页5条数据 |
参数示例:
{
"userId":"zhangsan",
"examId":47167,
"commitTimeStart":"2021-06-01 08:00:00",
"commitTimeEnd":"2021-06-30 20:00:00",
"page":1
}
正常返回:
{
"success":true,
"code":10000,
"desc":"成功",
"englishDesc":"Success",
"bizContent":{
"total":2,
"current":1,
"rowCount":5,
"rows":[
{
"userId":"zhangsan",
"examId":47167,
"examName":"期末考试",
"examStartTime":"2021-06-02 14:18:00",
"examEndTime":"2021-06-30 14:18:00",
"examTime":60,
"startTime":"2021-06-03 11:44:37",
"commitTime":"2021-06-03 11:44:44",
"score":"0.0",
"isPass":0,
"times":2,
"examResultsId":40561249,
"examStyleName":"考试分类",
"examStyleId":20046
},
{
"userId":"zhangsan",
"examId":47167,
"examName":"期末考试",
"examStartTime":"2021-06-02 14:18:00",
"examEndTime":"2021-06-30 14:18:00",
"examTime":60,
"startTime":"2021-06-02 14:19:17",
"commitTime":null,
"score":"0.0",
"isPass":0,
"times":1,
"examResultsId":40561220,
"examStyleName":"考试分类",
"examStyleId":20046
}
]
}
}
参数说明:
| 参数 | 类型 | 参数描述 |
|---|---|---|
userId | String | 客户内部考生id |
examId | int | 考试id |
examName | String | 考试名称 |
examStartTime | String | 考试开始时间 |
examEndTime | String | 考试结束时间 |
examTime | int | 考试时长(分钟) |
startTime | String | 考生开考时间 |
commitTime | String | 考生交卷时间 |
score | double | 考试分数 |
isPass | int | 是否及格(1及格,0不及格) |
times | int | 考试次数 |
examResultsId | int | 考试结果id |
examStyleName | String | 考试分类名称 |
examStyleId | int | 考试分类id |
错误返回:
{
"success":false,
"code":31014,
"desc":"用户不存在",
"englishDesc":"user not existed",
"bizContent":null
}
8.同步考生的考试结果(客户提供)
action_id = 10001
时序图:

请求地址(仅作示例):https://www.example.com/api/company/data/:appId?jwt=:jwtInfo
请求方式:POST
请求参数:
| 参数编号 | 参数名称 | 类型 | 参数描述 |
|---|---|---|---|
| 1 | jwt | String | 包含action_id的加密字符串 |
| 2 | params | JSONObject | 包含考生的考试信息 |
参数示例:
{
"jwt":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyX2lkIjo1LCJleHAiOjE0OTc5NTMxODguNjg0MTIxLCJhY3Rpb25faWQiOiIyMDEifQ.I3j56t_tVMX1GgH62dy-rIktqFRienFZTJ7VKgc6lPs",
"params":{
"commitTime":"2018-10-30 20:00:00",
"examEndTime":"2018-10-31 18:00:00",
"examId":15960,
"examName":"测试考试",
"examStartTime":"2018-10-30 18:00:00",
"examTime":60,
"isPass":1,
"score":100,
"startTime":"2018-10-30 19:00:00",
"times":1,
"userId":"779821sfsf"
}
}
参数说明:
| 参数 | 类型 | 说明 |
|---|---|---|
| userId | String | 客户内部考生id |
| examId | int | 考试id |
| examName | String | 考试名称 |
| examStartTime | String | 考试开始时间 |
| examEndTime | String | 考试结束时间 |
| examTime | int | 考试时长(分钟) |
| startTime | String | 考生开考时间 |
| commitTime | String | 考生交卷时间 |
| score | double | 考试分数 |
| isPass | int | 是否及格 |
| times | int | 考试次数 |
| examResultsId | int | 考试结果id |
| examStyleName | String | 考试分类名 |
| examStyleId | int | 考试分类id |
| userName | String | 考生姓名 |
| field1 | String | 属性1 |
返回数据:
{
"success":true,
"code":10000,
"desc":"成功",
"bizContent":null
}