API Руководство по интеграции
В этом руководстве объясняется весь процесс интеграции API, от регистрации до получения токенов и выполнения аутентифицированных запросов API.
1. Процесс адаптации
Что такое онбординг?
Регистрация — это однократный процесс настройки для получения учетных данных API:
usernamepasswordconsumer_keyconsumer_secret
Чтобы начать этот процесс, вам понадобится токен регистрации, предоставленный Paylov.
Рекомендации по безопасности
После завершения регистрации ваши username и password устанавливаются вами, а consumer_key и consumer_secret выдаются Paylov.
Сохраняйте все четыре учетных данных строго конфиденциальными. Относитесь к ним как к паролям — никогда не передавайте их, никогда не раскрывайте их в клиентском коде или общедоступных репозиториях и храните их в безопасном диспетчере секретов или в переменных среды.
Если ваш consumer_secret утек или стал доступен неавторизованной стороне, немедленно сообщите об этом в службу поддержки Paylov — учетные данные будут немедленно отозваны.
Шаг 1. Проверьте токен регистрации
Сначала убедитесь, что ваш токен регистрации действителен.
Конечная точка
GET {BASE_URL}/merchant/onboarding/?token=YOUR_TOKENПараметры
- Требуется
token— токен регистрации
Пример запроса
curl -X GET "https://{BASE_URL}/merchant/onboarding/?token=YOUR_TOKEN"Успешный ответ 200 OK
{
"status": "ok"
}2
3
Ответ об ошибке 400 Bad Request
{
"error": "invalid_or_expired"
}2
3
Шаг 2. Установите имя пользователя и пароль.
После проверки токена создайте свое имя пользователя и пароль. Взамен вы получите свои consumer_key и consumer_secret.
Требования к паролю
Ваш пароль должен:
- быть длиной не менее 8 символов
- содержать хотя бы одну строчную букву
a-z - содержать хотя бы одну заглавную букву
A-Z - содержать хотя бы одну цифру
0-9 - содержать хотя бы один специальный символ, например
!@#$%^&*
Примеры действительных паролей
Secure@Pass123!MyP@s3W0rdTr0pic@lLh!eze
Примеры неверных паролей
password123— без заглавных букв и специальных символов.Pass123— слишком короткоPASSWORD123!— нет строчной буквы
Конечная точка
POST {BASE_URL}/merchant/onboarding/?token=YOUR_TOKENЗаголовки запросов
Content-Type: application/jsonТело запроса
{
"username": "...",
"password": "..."
}2
3
4
Пример запроса
curl -X POST "https://{BASE_URL}/merchant/onboarding/?token=YOUR_TOKEN"
-H "accept: */*"
-H "Content-Type: application/json"
-d '{
"username": "...",
"password": "..."
}'2
3
4
5
6
7
Успешный ответ 200 OK
{
"consumer_key": "app_a1b2c3d4e5f6g7h8i9j0k1",
"consumer_secret": "Ks8Lp90q0Rr1Ss2Tt3Uu4Vv5Ww6Xx7Yy8Zz9Aa0Bb1Cc2Dd3Ee",
"username": "my_username"
}2
3
4
5
Важные примечания
consumer_keyиconsumer_secret— ваши учетные данные API. Храните их надежно.consumer_secretотображается только один раз. Если вы потеряете его, вам необходимо создать новые учетные данные.- Регистрационный токен можно использовать только один раз.
- Храните свое имя пользователя и пароль в безопасности.
Активация аккаунта
После получения consumer_key и consumer_secret аккаунт не становится активным сразу. Пока аккаунт не будет активирован администраторами Paylov, получить access_token и отправлять API-запросы с этими учетными данными невозможно.
После завершения онбординга свяжитесь с Paylov по вопросу активации аккаунта и продолжайте интеграцию после получения подтверждения.
2. Получение токена доступа
Что такое токен доступа?
Токен доступа необходим для аутентифицированных запросов API. Включайте его в каждый вызов API.
Процесс запроса токена
Конечная точка
POST {BASE_URL}/merchant/oauth2/token/Аутентификация
Используйте базовую аутентификацию, закодировав consumer_key и consumer_secret в формате base64.
Заголовки запросов
Authorization: Basic base64(consumer_key:consumer_secret) # YycX3bGtsMnJfWH...
Content-Type: application/json2
Тело запроса
{
"grant_type": "password",
"username": "some-username",
"password": "strong-password"
}2
3
4
5
grant_typeобязательный —passwordилиrefresh_tokenusername— обязателен приgrant_type=passwordpassword— обязателен приgrant_type=password
Примечание
Тело запроса принимается только в формате JSON. Если в любое поле передать null, вернётся 400 validation_error.
Шаг 1. Подготовьте базовую авторизацию
Объедините свой потребительский ключ и потребительский секрет в следующем формате:
consumer_key:consumer_secretЗатем закодируйте это значение в base64.
Шаг 2. Отправьте запрос токена
Пример запроса
curl -X POST "https://{BASE_URL}/merchant/oauth2/token/" \
-H "Authorization: Basic <BASE64_CONSUMER_KEY_AND_SECRET>" \
-H "Content-Type: application/json" \
-d '{
"grant_type": "password",
"username": "my_username",
"password": "secure_password_123"
}'2
3
4
5
6
7
8
Успешный ответ 200 OK
{
"access_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
"refresh_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
"token_type": "Bearer",
"expires_in": 3600,
"refresh_expires_in": 2592000
}2
3
4
5
6
7
Объяснение ответа
access_token— токен для запросов API, действителен 1 час.refresh_token— токен, используемый для получения нового токена доступа, действителен в течение 30 дней.expires_in— время жизни токена доступа в секундахrefresh_expires_in— время жизни токена обновления в секундах
Ответ об ошибке 401 Unauthorized
{
"result": null,
"error": {
"code": "invalid_grant",
"message": "Invalid credentials"
}
}2
3
4
5
6
7
this account not activated
После получения учётных данных через токен регистрации аккаунт не становится активным сразу. Пока администраторы Paylov не активируют аккаунт, запрос токена возвращает следующую ошибку:
{
"result": null,
"error": {
"code": "invalid_grant",
"message": "this account not activated"
}
}2
3
4
5
6
7
В этом случае учётные данные верны — обратитесь к администрации Paylov для активации аккаунта.
3. Выполнение запросов API с токеном доступа
Использование токена доступа
Включите токен доступа в заголовок Authorization каждого запроса API.
Формат заголовка
Authorization: Bearer YOUR_ACCESS_TOKENПример запроса
curl -X GET "https://{BASE_URL}/merchant/status/" \
-H "Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..."2
4. Обновление токена доступа
Когда срок действия вашего токена доступа истечет, используйте токен обновления, чтобы получить новый. Вам не нужно повторно отправлять имя пользователя и пароль.
Конечная точка
POST {BASE_URL}/merchant/oauth2/token/Заголовки запросов
Authorization: Basic base64(consumer_key:consumer_secret)
Content-Type: application/json2
Тело запроса
{
"grant_type": "refresh_token",
"refresh_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..."
}2
3
4
refresh_token— обязателен приgrant_type=refresh_token
Пример запроса
curl -X POST "https://{BASE_URL}/merchant/oauth2/token/" \
-H "Authorization: Basic <BASE64_CONSUMER_KEY_AND_SECRET>" \
-H "Content-Type: application/json" \
-d '{
"grant_type": "refresh_token",
"refresh_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..."
}'2
3
4
5
6
7
Успешный ответ 200 OK
{
"access_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
"refresh_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
"token_type": "Bearer",
"expires_in": 3600,
"refresh_expires_in": 2592000
}2
3
4
5
6
7
INFO
После успешного обновления старый refresh_token отзывается. Для следующих запросов используйте только новый refresh_token.
5. Отзыв токенов
Вы можете отозвать токен, чтобы предотвратить его дальнейшее использование. Отозвать можно только access_token.
Конечная точка
POST {BASE_URL}/merchant/oauth2/revoke/Заголовки запросов
Content-Type: application/jsonТело запроса
{
"token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..."
}2
3
Пример запроса
curl -X POST "https://{BASE_URL}/merchant/oauth2/revoke/" \
-H "Content-Type: application/json" \
-d '{
"token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..."
}'2
3
4
5
Успешный ответ 200 OK
{
"status": "success"
}2
3
Ответ об ошибке 400 Bad Request
{
"result": null,
"error": {
"code": "invalid_token",
"message": "Token not found or already revoked"
}
}2
3
4
5
6
7
6. Обработка ошибок
Все ошибки возвращаются в следующем формате:
{
"result": null,
"error": {
"code": "invalid_grant",
"message": "Invalid credentials"
}
}2
3
4
5
6
7
400 Bad Request
code | message | Причина |
|---|---|---|
invalid_request | Basic Authorization header required | Заголовок Authorization отсутствует или не начинается с Basic |
invalid_request | Invalid Authorization header format | base64(consumer_key:consumer_secret) имеет неверный формат |
invalid_request | username and password required | Для grant_type=password не передан username или password |
invalid_request | refresh_token required | Для grant_type=refresh_token не передан refresh_token |
unsupported_grant_type | Grant type '...' is not supported | grant_type не равен password или refresh_token |
validation_error | — | Поля тела запроса неверны или передан null |
invalid_token | Token not found or already revoked | Отзываемый токен не найден или уже отозван |
invalid_or_expired | Token is invalid or expired | Токен регистрации недействителен или истёк |
401 Unauthorized
Для grant_type=password:
code | message | Причина |
|---|---|---|
invalid_grant | Invalid consumer key | consumer_key неверный или неактивен |
invalid_grant | Invalid consumer secret | consumer_secret неверный |
invalid_grant | IP address not in whitelist | IP-адрес запроса не входит в список разрешённых |
invalid_grant | Invalid credentials | Неверный username или password |
invalid_grant | this account not activated | Аккаунт ещё не активирован администраторами |
invalid_grant | User account is locked | Аккаунт заблокирован из-за многократного ввода неверного пароля |
Для grant_type=refresh_token:
code | message | Причина |
|---|---|---|
invalid_client | Invalid consumer key | consumer_key неверный или неактивен |
invalid_grant | Refresh token expired | Срок действия refresh_token истёк |
invalid_grant | Invalid refresh token | refresh_token неверный |
invalid_grant | Not a refresh token | Вместо refresh_token передан другой токен |
invalid_grant | Refresh token invalid or expired | refresh_token отозван или истёк |
invalid_grant | User credential inactive | Аккаунт неактивен |
7. Краткий справочник
API конечные точки
| Метод | Конечная точка | Цель |
|---|---|---|
GET | /merchant/onboarding/ | Проверить токен регистрации |
POST | /merchant/onboarding/ | Завершить регистрацию |
POST | /merchant/oauth2/token/ | Получить или обновить токен доступа |
POST | /merchant/oauth2/revoke/ | Отозвать токен |
Коды ошибок
| Ошибка | Описание |
|---|---|
invalid_request | Запрос имеет неверный формат |
invalid_client | Потребительский ключ недействителен (при обновлении токена) |
invalid_grant | Учётные данные или refresh_token недействительны, либо аккаунт неактивен |
unsupported_grant_type | Тип гранта не поддерживается |
invalid_token | Отзываемый токен не найден или уже отозван |
validation_error | Поля тела запроса неверны |
invalid_or_expired | Токен недействителен или срок его действия истек |
token_required | Параметр токена отсутствует |