获取Access Token

下载pdf
更新时间:2019-06-05 16:30

access_token是接口的全局唯一票据,接入方调用各接口时都需使用access_token。开发者需要进行妥善保存。access_token的存储至少要保留512个字符空间。access_token的有效期目前为2个小时,需定时刷新,重复获取将导致上次获取的access_token失效

接入方可以使用AppID和AppSecret调用本接口来获取access_token。AppID和AppSecret(联系ZEGO技术支持获得)。注意调用所有接口时均需使用https协议。

1 接口调用请求说明

http请求方式: GET
正式环境地址
https://webapi.zego.im/cgi/token?appid=APPID&secret=APPSECRET
测试环境地址
https://testwebapi.zego.im/cgi/token?appid=APPID&secret=APPSECRET

2 参数说明

参数名 是否必须 说明
appid 第三方用户唯一凭证
secret 第三方用户唯一凭证密钥,即appsecret,请联系技术支持获取。

3 返回说明

正常情况下,会返回下述JSON数据包给调用方:

{
    "code": 0,
    "data": {
        "access_token": "c205dytwQTd4ZlZjSjBLTXY0V3FzYUtBY1Q9ZEo0eGFJcEt3WVBKSlFGeXh5aGZITjJWYnlBcT0",
        "expires_in": 7200
    },
    "message": "success"
}

4 参数说明

参数名 说明
code 返回码
message 操作结果描述
access_token 获取到的凭证
expires_in 凭证有效时间,单位:秒

错误时会返回错误码等信息,JSON数据包示例如下(该示例为AppSecret无效错误):

{
    "code": 40005,
    "message": "appsecret错误"
}

5 示例代码

5.1 Java示例代码

public class GetToken {
    // 发送get请求
    public static String sendGet(String url, String param) {
        String result = "";
        String urlName = url + "?" + param;        
        try {
            URL realUrl = new URL(urlName);
            URLConnection conn = realUrl.openConnection();
            conn.connect();
            Map<String, List<String>> map = conn.getHeaderFields();
            for (String key : map.keySet()) {
                System.out.println(key + ":" + map.get(key));
            }

            try (
                    BufferedReader in = new BufferedReader(new InputStreamReader(conn.getInputStream(), "utf-8"))
                ){
                    String line;
                    while ((line = in.readLine()) != null) {
                        result += "\n" + line;
                  }
            }
        } catch (Exception e) {
            System.out.println(e);
            e.printStackTrace();
        }
        return result;
    }
    // 从指定url中获取access_token, 注意accessToken_request_url参数测试环境和正式环境的区别
    public static String getToken(String appid, String serverSecret, String accessToken_request_url){
        // 从请求access_token的url中获取返回的数据
        String retStr_getTokenUrl = GetToken.sendGet(accessToken_request_url, "appid="+appid+"&secret="+serverSecret);
        // 解析并获取access_token
        String access_token = JSONObject.parseObject(retStr_getTokenUrl).getJSONObject("data").getString("access_token");
        return access_token;
    }
}

5.2 php示例代码

<?php
$appid = "123456789";
$secret = "xxxxx";
$token = "";
// 从指定url中获取access_token, 注意accessToken_request_url参数测试环境和正式环境的区别
$url = "https://webapi.zego.im/cgi/token?appid={$appid}&secret={$secret}";

// 发送get请求
$curl = curl_init();
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_TIMEOUT, 500);
curl_setopt($curl, CURLOPT_URL, $url);

$result = curl_exec($curl);
curl_close($curl);

// 解析并获取access_token
$result = json_decode($result, true);

if (!isset($result["data"])) {
    print_r($result["message"]);
} else {
    $token = $result["data"]["access_token"];
    print_r($token);
}

5.3 python示例代码

from urllib import request, parse
import json

def getToken():
    # 初始化获取access_token的变量
    access_token = ""
    # 请求token的url, 注意正式环境与测试环境的区别
    accessToken_request_url = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"

    # 通过请求accessToken_request_url获取access_token
    with request.urlopen(request.Request(accessToken_request_url)) as f:
        respond_str = f.read().decode("utf-8")
        access_token = json.loads(respond_str)["data"]["access_token"]

    return access_token  

if __name__ == '__main__':
    # token有效时间为两个小时, 业务侧应对token获取之后进行保存,有效时间内一定时间间隔(例如3600s)获取一次, 切忌频繁获取 
    getToken()