Перейти к содержимому

1、Информация доступа

1.1 Адрес запроса

Адрес запроса интерфейса: subPath заменить адресом каждого интерфейса.

Узел Адрес Пример запроса
Внутренний центральный узел https://castack-gncenter.cheersucloud.com/openapi/ https://castack-gncenter.cheersucloud.com/openapi/{subPath}
Зарубежный центральный узел https://castack-hwcenter.cheersucloud.com/openapi/ https://castack-hwcenter.cheersucloud.com/openapi/{subPath}

1.2 Алгоритм подписи

  • Передается в заголовке запроса:X-ak:AK

  • URL должен содержать timestamp и signature

  • Пример:/openapi/v2/instance/page/list?time=1640494526&sign=*

  • time:единица — секунды,участвует в расчете значения sign
  • sign:рассчитывается с использованием AK、SK и time вместе с соответствующим алгоритмом шифрования
  • Платформа предоставляет пользователю AK и SK
  • Алгоритм шифрования: sha256, key=SK, пример кода шифрования ниже
public static String ak = "f2fcddffd0de46da811414216c5b225c";
public static String sk = "a01d33f69000405cb3eb44143fa9cd11";

public static void main(String[] args) throws NoSuchAlgorithmException, InvalidKeyException {
    String url = "http://127.0.0.1:1800/openapi/v2/instance/page/list";
    LocalDateTime now = LocalDateTime.now();
    long data = now.toEpochSecond(ZoneOffset.UTC);
    String hmacSHA256 = BaseTest.hmacSHA256(sk, String.valueOf(data));
    String requestUrl = url + "?time=" + data + "&sign=" + hmacSHA256;

    HttpRequest request = HttpUtil.createPost(requestUrl)
        .header("Content-Type", "application/json")
        .header("cache-control", "no-cache")
        .header("X-ak", ak);

    Map<String, Object> map = new HashMap<>();
    map.put("pageNum", 1);
    map.put("pageSize", 10);
    request.body(JSON.toJSONString(map));

    // 发送请求并获取响应
    HttpResponse response = request.execute();
    System.out.println(response.body());
}


public static String hmacSHA256(String key, String data) throws NoSuchAlgorithmException, InvalidKeyException {
    // 获取一个 HMAC SHA-256 的 Mac 实例
    Mac mac = Mac.getInstance("HmacSHA256");

    // 创建一个 SecretKeySpec 实例
    SecretKeySpec secretKeySpec = new SecretKeySpec(key.getBytes(StandardCharsets.UTF_8), "HmacSHA256");

    // 初始化 Mac 实例
    mac.init(secretKeySpec);

    // 执行 HMAC SHA-256 运算
    byte[] rawHmac = mac.doFinal(data.getBytes(StandardCharsets.UTF_8));

    // 将原始字节数组转换为十六进制字符串
    StringBuilder hexString = new StringBuilder();
    for (byte b : rawHmac) {
        String hex = Integer.toHexString(0xff & b);
        if (hex.length() == 1) {
            hexString.append('0');
        }
        hexString.append(hex);
    }

    return hexString.toString();
}

1.3 Спецификация ответа

Формат ответа:

Имя параметра Описание параметра Возвращать ли Тип данных Описание
code Код возврата Да interger(int32) 200 означает успешный ответ
message Возвращаемое сообщение обработки Да string
timestamp Временная метка Необязательно integer(int64)
traceId ID обработки запроса Необязательно string
result Возвращаемый объект данных, инкапсулирует конкретные данные ответа Да object

http-код состояния:

Код состояния Описание Описание
200 OK Result
201 Created
401 Unauthorized
403 Forbidden
404 Not Found

1.4 Инструкции по вызову

Во все следующие вызовы запросов необходимо добавить в заголовок запроса X-akиwrap, и добавить время в URL-адрес time и значение проверки подписи sign

curl -X POST -H 'X-ak:3d17155dec2a4076ac8dbe500d53765c' -H 'wrap:false' -H 'Content-Type: application/json' http://192.168.130.241:1800/openapi/v2/instance/page/list?time=1720774436&sign=3bbf04e6c524bc028d543148ea55447cad066f896431980e01d80488d1212807 -d '{"pageNum":1,"pageSize":10,"projectId":"project_admin"}'

1.5 Структуры данных

Возврат по умолчанию:

{
    "body": {
        "result": {/*返回根据接口功能的数据*/
            ...
        },
        "traceId": "C91320230805160421278",
        "code": 200,
        "message": "操作成功",
        "timestamp": 1691222661324
    },
    "ret": {
        "code": 200, /*200表示成功,非200表示错误*/
        "msg": "操作成功"
    }
}

Возвращается, когда значение параметра wrap в HEADER запроса равно false:

{
    "code":200, /*200表示成功,非200表示错误*/
    "message":"操作成功",
    "timestamp":1691222661324,
    "traceId":"C91320230805160421278",   
    "result":{/*返回根据接口功能的数据*/
        ...
    }
}