新同步組織結構接口¶
注: 所有接口只針對旗艦會員提供,非旗艦會員無法調用,所有開放平臺接口默認共享10QPS
同步考生數據可以方便的在系統之間進行考生數據交換,避免手動可能出現的錯誤;自動同步及時快捷,即可以同步考生信息也可以同步考生的組織結構。
分組管理¶
優考試通過組來管理考生,可以把組理解為班級,部門;優考試支持無限層級樹狀組管理,如下圖所示
1、插入組¶
插入組:¶
POST https://api.kyexam.com/api/v1/student/addcategory
參數:¶
code=權限碼&time=當前時間戳
參數說明:¶
-
code 每個賬戶唯一對應的驗證碼,string類型,旗艦會員及以上可在系統設置->開放平臺設置中獲取。
-
time 當前時間戳,例如1638768935。
-
parentGid 父節點id。 如傳0,代表插入根節點。
-
title 新建組組名。
-
Authorization 放到請求頭的Token,詳見示例代碼。簡單來說就是:將當前時間戳和您的code拼接起來,進行MD5加密而得。
如果操作成功,則返回:¶
{
"gid":2995, //插入成功后的組id
"status":"ok"
}
如果操作失敗,則返回:¶
接口使用示例:¶
package main
import (
"crypto/md5"
"fmt"
"io/ioutil"
"log"
"net/http"
"net/url"
"os"
"strconv"
"strings"
"time"
)
const (
Code = "xxx"
)
func main() {
host := "https://api.kyexam.com"
resource := "/api/v1/student/addcategory"
client := &http.Client{}
fullPath := host + resource
time64 := time.Now().UTC().Unix()
data := make(url.Values)
data["code"] = []string{Code}
data["parentGid"] = []string{"0"}
data["title"] = []string{"新建組"}
data["time"] = []string{strconv.Itoa(int(time64))}
req, _ := http.NewRequest(http.MethodPost, fullPath, strings.NewReader(data.Encode()))
ParseToken := fmt.Sprintf("%x", md5.Sum([]byte(strconv.FormatInt(time64, 10)+Code)))
req.Header.Set("Authorization", ParseToken)
req.Header.Set("Content-Type", "application/x-www-form-urlencoded")
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、編輯組名稱¶
編輯組名稱:¶
POST https://api.kyexam.com/api/v1/student/renamegroup
參數:¶
code=權限碼&time=當前時間戳
參數說明:¶
-
code 每個賬戶唯一對應的驗證碼,string類型,旗艦會員及以上可在系統設置->開放平臺設置中獲取。
-
time 當前時間戳,例如1638768935。
-
gid 被修改組的組id。
-
title 新組名。
-
Authorization 放到請求頭的Token,詳見示例代碼。簡單來說就是:將當前時間戳和您的code拼接起來,進行MD5加密而得。
如果操作成功,則返回:¶
{
"gid":2995,
"oldTitle":"新建組", //舊組名
"status":"ok"
}
如果操作失敗,則返回:¶
接口使用示例:¶
package main
import (
"crypto/md5"
"fmt"
"io/ioutil"
"log"
"net/http"
"net/url"
"os"
"strconv"
"strings"
"time"
)
const (
Code = "xxx"
)
func main() {
host := "https://api.kyexam.com"
resource := "/api/v1/student/renamegroup"
client := &http.Client{}
fullPath := host + resource
time64 := time.Now().UTC().Unix()
data := make(url.Values)
data["code"] = []string{Code}
data["gid"] = []string{"2995"}
data["title"] = []string{"新組名"}
data["time"] = []string{strconv.Itoa(int(time64))}
req, _ := http.NewRequest(http.MethodPost, fullPath, strings.NewReader(data.Encode()))
ParseToken := fmt.Sprintf("%x", md5.Sum([]byte(strconv.FormatInt(time64, 10)+Code)))
req.Header.Set("Authorization", ParseToken)
req.Header.Set("Content-Type", "application/x-www-form-urlencoded")
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、刪除組¶
刪除組:¶
POST https://api.kyexam.com/api/v1/student/delGroup
參數:¶
code=權限碼&time=當前時間戳
參數說明:¶
-
code 每個賬戶唯一對應的驗證碼,string類型,旗艦會員及以上可在系統設置->開放平臺設置中獲取。
-
time 當前時間戳,例如1638768935。
-
gid 被刪除組的組id。
-
Authorization 放到請求頭的Token,詳見示例代碼。簡單來說就是:將當前時間戳和您的code拼接起來,進行MD5加密而得。
如果操作成功,則返回:¶
{
"status":"ok"
}
如果操作失敗,則返回:¶
接口使用示例:¶
package main
import (
"crypto/md5"
"fmt"
"io/ioutil"
"log"
"net/http"
"net/url"
"os"
"strconv"
"strings"
"time"
)
const (
Code = "xxx"
)
func main() {
host := "https://api.kyexam.com"
resource := "/api/v1/student/delGroup"
client := &http.Client{}
fullPath := host + resource
time64 := time.Now().UTC().Unix()
data := make(url.Values)
data["code"] = []string{Code}
data["gid"] = []string{"2996"}
data["time"] = []string{strconv.Itoa(int(time64))}
req, _ := http.NewRequest(http.MethodPost, fullPath, strings.NewReader(data.Encode()))
ParseToken := fmt.Sprintf("%x", md5.Sum([]byte(strconv.FormatInt(time64, 10)+Code)))
req.Header.Set("Authorization", ParseToken)
req.Header.Set("Content-Type", "application/x-www-form-urlencoded")
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)
}
4、移動組¶
移動組:¶
POST https://api.kyexam.com/api/v1/student/mvgroup
參數:¶
code=權限碼&time=當前時間戳
參數說明:¶
-
code 每個賬戶唯一對應的驗證碼,string類型,旗艦會員及以上可在系統設置->開放平臺設置中獲取。
-
time 當前時間戳,例如1638768935。
-
gid 被移動組的組id。
-
mvToGid 目標組id。
-
Authorization 放到請求頭的Token,詳見示例代碼。簡單來說就是:將當前時間戳和您的code拼接起來,進行MD5加密而得。
如果操作成功,則返回:¶
{
"status":"ok"
}
如果操作失敗,則返回:¶
接口使用示例:¶
package main
import (
"crypto/md5"
"fmt"
"io/ioutil"
"log"
"net/http"
"net/url"
"os"
"strconv"
"strings"
"time"
)
const (
Code = "xxx"
)
func main() {
host := "https://api.kyexam.com"
resource := "/api/v1/student/mvgroup"
client := &http.Client{}
fullPath := host + resource
time64 := time.Now().UTC().Unix()
data := make(url.Values)
data["code"] = []string{Code}
data["gid"] = []string{"2996"}
data["mvToGid"] = []string{"2995"}
data["time"] = []string{strconv.Itoa(int(time64))}
req, _ := http.NewRequest(http.MethodPost, fullPath, strings.NewReader(data.Encode()))
ParseToken := fmt.Sprintf("%x", md5.Sum([]byte(strconv.FormatInt(time64, 10)+Code)))
req.Header.Set("Authorization", ParseToken)
req.Header.Set("Content-Type", "application/x-www-form-urlencoded")
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)
}
5、獲取組列表¶
獲取組列表:¶
GET https://api.kyexam.com/api/v1/student/lsgroups?code=權限碼&time=當前時間戳
參數:¶
code=權限碼&time=當前時間戳
參數說明:¶
-
code 每個賬戶唯一對應的驗證碼,string類型,旗艦會員及以上可在系統設置->開放平臺設置中獲取。
-
time 當前時間戳,例如1638768935。
-
gid(可選) 代表僅查詢當前組下的子組。 如要查詢所有組,不需要傳該值。
-
Authorization 放到請求頭的Token,詳見示例代碼。簡單來說就是:將當前時間戳和您的code拼接起來,進行MD5加密而得。
如果操作成功,則返回:¶
{
"data":[
{
"gid":2989,
"title":"2989組名"
},
{
"gid":2987,
"title":"2987組名"
}
],
"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 := "/api/v1/student/lsgroups"
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("gid", "2988")
q.Add("time", strconv.Itoa(int(time64)))
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)
}