Перейти к содержанию

Получить токен доступа OAuth2

Обменяйте данные доступа CloudPrint API на короткоживущий Bearer-токен OAuth2 по схеме Client Credentials.

POST/oauth/tokenВерсия API: v1operationId: issueOAuthTokenОткрыть в Markdown

Назначение метода

Обменяйте данные доступа CloudPrint API на короткоживущий Bearer-токен OAuth2 по схеме Client Credentials.

Авторизация

Для этого метода Bearer-токен не нужен.

Запрос

Основной адрес API: https://public-api.cloudprint.me/oauth/token

Параметры

У метода нет параметров пути, строки запроса или дополнительных заголовков.

Тело запроса

Тип содержимого: application/x-www-form-urlencoded

ИмяТипОбязательноОписаниеОграничения
grant_typestringдаOAuth2 grant, используемый для запроса токена.enum: client_credentials; example: "client_credentials"
client_idstringдаПубличный идентификатор из пары API Credentials аккаунта.
client_secretstringдаСекрет из данных доступа API; храните его только в защищённом хранилище серверной части.
scopestringнетЗапрашиваемые разрешения для токена доступа, разделённые пробелами.example: "agents:read printers:read documents:write print_jobs:write print_jobs:read"

Примеры запросов

cURL

bash
curl -sS https://public-api.cloudprint.me/oauth/token \
  -H 'Content-Type: application/x-www-form-urlencoded' \
  --data-urlencode 'grant_type=client_credentials' \
  --data-urlencode 'client_id=33333333-3333-4333-8333-333333333333' \
  --data-urlencode 'client_secret=cpsec_...' \
  --data-urlencode 'scope=agents:read printers:read documents:write print_jobs:write print_jobs:read'

PHP

php
<?php

$response = file_get_contents('https://public-api.cloudprint.me/oauth/token', false, stream_context_create([
    'http' => [
        'method' => 'POST',
        'header' => "Content-Type: application/x-www-form-urlencoded\r\n",
        'content' => http_build_query([
            'grant_type' => 'client_credentials',
            'client_id' => getenv('CLOUDPRINT_CLIENT_ID'),
            'client_secret' => getenv('CLOUDPRINT_CLIENT_SECRET'),
            'scope' => 'agents:read printers:read documents:write print_jobs:write print_jobs:read',
        ]),
    ],
]));

$token = json_decode((string) $response, true, flags: JSON_THROW_ON_ERROR)['access_token'];

Ответ

HTTP-статус: 200 — Запрос выполнен.

Поля ответа

ИмяТипОбязательноОписаниеОграничения
token_typestringдаТип OAuth2-токена; Public API использует Bearer.example: "Bearer"
expires_inintegerдаСрок действия токена доступа в секундах с момента выдачи.example: 900
access_tokenstringдаКороткоживущий OAuth2 Bearer-токен для запросов к Public API.example: "eyJ..."
scopestringдаЗапрашиваемые разрешения для токена доступа, разделённые пробелами.example: "printers:read print_jobs:write"

Пример ответа

json
{
  "token_type": "Bearer",
  "expires_in": 900,
  "access_token": "eyJ...",
  "scope": "printers:read print_jobs:write"
}

Ошибки

HTTP-статусОписание
400Проверьте формат и параметры запроса.
401Авторизация отсутствует или недействительна.
429Превышен лимит запросов; учитывайте Retry-After.
500Внутренняя ошибка CloudPrint.

Рекомендации по интеграции

  • Храните client_secret только в защищённом хранилище серверной части; не передавайте его в браузер или распространяемое настольное приложение.
  • Кешируйте токен почти до окончания expires_in, а не запрашивайте новый для каждого задания.
  • Запрашивайте только те разрешения, которые нужны текущей интеграции.

Связанная документация

Руководства по интеграции CloudPrint, подключению локального агента и надёжной работе печати.