单点登录¶
注: 所有接口仅针对旗舰会员或以上会员级别提供,非旗舰会员及以上无法调用,所有开放平台接口默认共享10QPS。
单点登录允许考生只在用户的系统上登录一次,点击试卷考试时不再需要再次登录, 例如用户A有公司自己的OA系统, 考生王二登录到公司的OA系统后, 在系统里点开始考试,这时王二就不再需要输入自己的账号,而是直接就进入考试了。
1、单点登录考试¶
单点登录考试允许用户考生直接在用户系统上点击就开始考试, 不再需要额外的身份认证。
单点登录考试¶
GET https://api.kyexam.com/newstudentsso
参数:¶
userId=用户id&loginValue=试卷验证信息&password=考生密码&eid=试卷id&aspart=0&rflag=0&expiretime=1
参数说明:¶
- code 每个账户唯一对应的验证码,string类型,旗舰会员及以上可在系统设置->开放平台设置中获取。
- time 当前时间戳,例如1638768935。
- userId 用户id。
- loginValue 表示的是考生的登录值,比如说系统设置了使用手机登录,那么这里就是考生的手机号码。
- password 考生密码。
- eid 试卷id
- aspart 1表示去掉侧边栏
- rflag 如果是登录到考生后台,这里可以指定登录后自动跳转到对应的页面,取考生后台页面连接上的前端路由信息
- expiretime 认证过期时间,expiretime应大于0小于15,对应1-14分钟
如果操作成功,则返回:¶
{
"data": "https://api.kyexam.com/login/u/api/112?rflag=0\u0026loginValue=13240935349\u0026password=13240935349\u0026eid=3506\u0026token=a05d2c44c08d87c2243315d63e35d274\u0026aspart=0",
"status": "ok"
}
如果操作失败,则返回:¶
接口使用示例:¶
package main
import (
"crypto/md5"
"fmt"
"io/ioutil"
"log"
"net/http"
"os"
"strconv"
"time"
)
const (
Code = "xxx"
)
func main() {
host := "https://api.kyexam.com"
resource := "/newstudentsso"
client := &http.Client{}
fullPath := host + resource
req, _ := http.NewRequest(http.MethodGet, fullPath, nil)
time64 := time.Now().UTC().Unix()
ParseToken := fmt.Sprintf("%x", md5.Sum([]byte(strconv.FormatInt(time64, 10)+Code)))
req.Header.Set("Authorization", ParseToken)
q := req.URL.Query()
q.Add("code", Code)
q.Add("time", strconv.Itoa(int(time64)))
q.Add("userId", "1")
q.Add("loginValue", "2")
q.Add("password", "3")
q.Add("eid", "4")
q.Add("aspart", "0")
q.Add("rflag", "0")
q.Add("expiretime", "1")
req.URL.RawQuery = q.Encode()
resp, err := client.Do(req)
if err != nil {
log.Println(err)
return
}
defer resp.Body.Close()
b, err := ioutil.ReadAll(resp.Body)
if err != nil {
log.Println(err)
return
}
// fmt.Println(string(b))
f, _ := os.OpenFile("test.txt", os.O_RDWR|os.O_CREATE|os.O_TRUNC, 0644)
f.Write(b)
}
2、单点登录考生后台¶
单点登录到考生后台和单点登录考试原理一样, 差别是不传eid参数或传0。
系统判断eid为0时会自动跳转到考生后台界面。
单点登录考生后台¶
GET https://api.kyexam.com/newstudentsso
参数:¶
userId=用户id&loginValue=试卷验证信息&password=考生密码&eid=试卷id&aspart=0&rflag=0&expiretime=1
参数说明:¶
- code 每个账户唯一对应的验证码,string类型,旗舰会员及以上可在系统设置->开放平台设置中获取。
- time 当前时间戳,例如1638768935。
- userId 用户id。
- loginValue 表示的是考生的登录值,比如说系统设置了使用手机登录,那么这里就是考生的手机号码。
- password 考生密码。
- eid 试卷id
- aspart 1表示去掉侧边栏
- rflag 如果是登录到考生后台,这里可以指定登录后自动跳转到对应的页面,取考生后台页面连接上的前端路由信息
- expiretime 认证过期时间,expiretime应大于0小于15,对应1-14分钟
如果操作成功,则返回:¶
{
"data": "https://api.kyexam.com/login/u/api/112?rflag=0\u0026loginValue=13240935349\u0026password=13240935349\u0026eid=0\u0026token=a05d2c44c08d87c2243315d63e35d274\u0026aspart=0",
"status": "ok"
}
如果操作失败,则返回:¶
接口使用示例:¶
package main
import (
"crypto/md5"
"fmt"
"io/ioutil"
"log"
"net/http"
"os"
"strconv"
"time"
)
const (
Code = "xxx"
)
func main() {
host := "https://api.kyexam.com"
resource := "/newstudentsso"
client := &http.Client{}
fullPath := host + resource
req, _ := http.NewRequest(http.MethodGet, fullPath, nil)
time64 := time.Now().UTC().Unix()
ParseToken := fmt.Sprintf("%x", md5.Sum([]byte(strconv.FormatInt(time64, 10)+Code)))
req.Header.Set("Authorization", ParseToken)
q := req.URL.Query()
q.Add("code", Code)
q.Add("time", strconv.Itoa(int(time64)))
q.Add("userId", "1")
q.Add("loginValue", "2")
q.Add("password", "3")
q.Add("eid", "4")
q.Add("aspart", "0")
q.Add("rflag", "0")
q.Add("expiretime", "1")
req.URL.RawQuery = q.Encode()
resp, err := client.Do(req)
if err != nil {
log.Println(err)
return
}
defer resp.Body.Close()
b, err := ioutil.ReadAll(resp.Body)
if err != nil {
log.Println(err)
return
}
// fmt.Println(string(b))
f, _ := os.OpenFile("test.txt", os.O_RDWR|os.O_CREATE|os.O_TRUNC, 0644)
f.Write(b)
}
3、子管理员单点登录¶
子管理员单点登录管理后台, 接口如下:
请求
GET https://admin.kyexam.com/index.php?option=com_exams&task=api.childAdminSSO&format=raw
请求数据
code=权限码&email=邮箱&password=密码
- code 每个账户唯一对应的验证码,string类型,该值可联系优考试获取
- email 子管理员邮箱,必填
- password 子管理员密码,必填
登录成功后,系统会自动跳转到管理后台