RoomKit
  • iOS : Objective-C
  • Android
  • macOS
  • Windows
  • Web
  • 小程序
  • Flutter
  • React Native
  • 产品简介
    • 概述
    • 发布日志
  • 开通 RoomKit 服务
  • 下载
  • 体验 App
  • 快速开始
  • 进阶功能
  • 客户端 API
  • 服务端 API
  • 常见错误码
  • 常见问题
  • 文档中心
  • RoomKit
  • 服务端 API
  • RoomKit 服务端 API
  • 获取 SDK Token

获取 SDK Token

更新时间:2022-06-17 19:25

1 描述

获取 sdk_token,用于客户端登录鉴权。

2 接口原型

  • 请求方法:POST

  • 请求地址:

    服务环境 调用频率限制 请求地址
    正式环境
    10 次/秒
    https://roomkit-api.zego.im/auth/get_sdk_token
  • 传输协议:HTTPS

3 请求参数

参数 类型 是否必选 示例 描述
sign
String
"CIE7hNPK6Y55DeUJBQWERTY"
md5("%s%s%d%d%d"%(secret_sign[:32].lower(), "device_id", 3, 1, timestamp)))
secret_id
Int
12580
创建企业时,ZEGO 分配的 secret ID。
device_id
String
"38-F9-D3-87-C8-15"
设备 ID。需要终端调用 ZegoRoomKit SDK 的 deviceID 接口生成,并传递给业务后台。
timestamp
Int
1615541262
请求参数中的 sign 的失效时间,Unix 时间戳,单位:秒 (例:time.now().unix()[当前时间戳]+3600[有效期])。
common_data.platform
Int
0
设备平台。
  • 0: None
  • 1:Windows
  • 2:Mac
  • 4:iOS
  • 8:Android
  • 16:MiniProgram
  • 32:Web
  • 64:SDK Server

sign 中各字段说明如下:

我们提供了 Postman Collection 帮助您调测,内含本参数的生成逻辑,您可参考 服务端 API 调测指南 使用 Postman 快速调试该接口。

参数 类型 是否必选 示例 描述
secret_sign[:32].lower()
String
"qwertyuiqwertyuiqwertyuiqwertyui"
创建企业时返回的 secret_sign 取前 32位,全使用小写字母。
device_id
String
"38-F9-D3-87-C8-15"
设备 ID。需要终端调用 ZegoRoomKit SDK 的 deviceID 接口生成,并传递给业务后台。
verify_type
Int
3
验证方式默认填 3,表示 SDK 平台发起验证。
version
Int
1
版本号,默认填 1。
timestamp
Int
1615541262
时间戳,单位:秒。跟输入参数中的 timestamp 保持一致即可。

4 请求示例

以下是 sdk_token 接口的请求示例。

{
    "common_data": {
        "platform": 8
    },
    "sign": "CIE7hNPK6Y55DeUJBQWERTY",
    "secret_id": 12580,
    "device_id": "38-F9-D3-87-C8-15",
    "timestamp": 1615541262
}

5 响应参数

参数 类型 示例 描述
ret
Object
-
接口调用结果。
ret.code
Int
0
错误码。
ret.msg
String
"succeed"
错误信息。
ret.version
String
"1.0.0"
版本号。
data
Object
-
接口调用返回数据。
data.sdk_token
String
"qwertyuiqwertyuiqwe"
服务端返回的 sdk_token。
data.expires_in
Int
86400
服务端返回的 sdk_token 的过期时间。

6 响应示例

以下是 sdk_token 接口的响应示例。

{
    "ret": {
        "code": 0,
        "message": "succeed",
        "version": "1.0.0"
    },
    "data": {
        "sdk_token": "sdk_token",
        "expires_in": 86400
    }
}

7 示例代码

7.1 Python 示例代码

import time
import hashlib
import json
import requests

def get_SDK_token(secret_id, secret_sign, deviceid, platform):
    timestamp = int(time.mktime(time.localtime(time.time()))) + 3600
    signSrc = ("%s%s%d%d%d" % (secret_sign[:32], deviceid, 3, 1, timestamp))
    sign = hashlib.md5(signSrc.encode()).hexdigest()
    url = 'https://roomkit-api.zego.im/auth/get_sdk_token'
    data = {
        "common_data": {
            "platform": platform,
        },
        "sign": sign,
        "secret_id": secret_id,
        "device_id": deviceid,
        "timestamp": timestamp
    }
    r = requests.post(url=url, json=data)
    respondStr = r.text.encode('utf-8').decode('utf-8')
    sdk_token = json.loads(respondStr)["data"]["sdk_token"]
    return sdk_token

7.2 Golang 示例代码

import (
    "bytes"
    "crypto/md5"
    "encoding/json"
    "errors"
    "fmt"
    "io/ioutil"
    "net/http"
    "testing"
    "time"
)

func GetSDKToken(secretId int, secretSign, deviceId string, platform int) (sdkToken string, err error) {
    // 过期时间
    expired := time.Now().Unix() + 3600

    // 计算hash
    m := md5.New()
    m.Write([]byte(fmt.Sprintf("%s%s%d%d%d", secretSign[:32], deviceId, 3, 1, expired)))
    hash := fmt.Sprintf("%x", m.Sum(nil))

    var reqStruct struct{
        CommonData  struct{
            Platform int     `json:"platform"`
        }
        SecretId     int     `json:"secret_id"`
        Sign         string    `json:"sign"`
        DeviceId     string    `json:"device_id"`
        Timestamp    int64   `json:"timestamp"`
    }
    reqStruct.CommonData.Platform = platform
    reqStruct.SecretId = secretId
    reqStruct.Sign = hash
    reqStruct.DeviceId = deviceId
    reqStruct.Timestamp = expired
    reqBody, _ := json.Marshal(reqStruct)

    // 发送post请求
    req, err := http.NewRequest(http.MethodPost, "https://roomkit-api.zego.im/auth/get_sdk_token", bytes.NewBuffer(reqBody))
    req.Header.Set("Content-Type", "application/json")

    client := &http.Client{}
    var resp *http.Response
    resp, err = client.Do(req)
    if err != nil {
        return
    }
    defer resp.Body.Close()

    var respBody []byte
    respBody, err = ioutil.ReadAll(resp.Body)
    if err != nil {
        return
    }

    var ret struct{
        Ret struct{
            Code     int     `json:"code"`
            Msg     string    `json:"msg"`
            Version string    `json:"version"`
        }                    `json:"ret"`
        Data struct{
            SDKToken     string    `json:"sdk_token"`
        }
    }

    err = json.Unmarshal(respBody, &ret)
    if err != nil {
        return
    }
    if ret.Ret.Code != 0 {
        return "", errors.New(ret.Ret.Msg)
    }

    return ret.Data.SDKToken, nil
}
本篇目录