Данное API предназначено для подтверждения номера телефона пользователя.
Этап | Способ | Примечание |
---|---|---|
1 | SIM-Push уведомление + SMS | SMS отправляется, если уведомление не доставлено или отклонено; оба через одного провайдера |
2 | Звонок | Если SIM-Push не сработал |
3 | SMS (другой провайдер) | Если звонок не сработал |
4 | Тех. поддержка | Если ни один из каналов подтверждения не сработал, обращение в тех поддержку для подтверждения номера телефона |
API подразумевает доступ только аутентифицированного пользователя (возможно, анонимного), пользующегося авторизованным приложением.
Вследствие чего данное API должно быть доступно только по HTTPS. Формат запроса:
https://<path_to_api>/<api_version>/<method>
Где:
path_to_api
— путь до API, полученный в Регистратуреapi_version
— мажорная версия API (должна быть равна 2
)method
— метод, который производится над элементомКоды ответов сервера должны соответствовать стандартным кодам HTTP-ответов для соответствующих ситуаций.
HTTP-код | Описание |
---|---|
200 | Успешный запрос. Ответ содержит ожидаемые данные |
400 | Неверный запрос. Ошибка в синтаксисе запроса или отсутствуют обязательные параметры |
404 | Ресурс не найден |
401 | Пользователь не авторизован. Нужно получить действующий токен |
422 | Ошибка валидации. Невалидны параметры запроса |
500 | Внутренняя ошибка сервера. Что-то пошло не так на стороне бэкенда |
503 | Сервис временно недоступен (например, из-за технических работ) |
Для аутентификации пользователя клиент должен передать полученный ранее токен доступа, выданный Auth API контрагента, по схеме аутентификации в соответствии с типом токена.
Для авторизации по типу токена “Bearer” рекомендуется использовать HTTP заголовок Authorization, пример:
Authorization: Bearer 18dasd81230dah12032
Параметры:
Параметр | Тип | Обязательный | Описание |
---|---|---|---|
phone |
строка | Да | Номер телефона пользователя |
request_id |
строка | опциональный | ID запроса подтверждения. Используется для смены канала подтверждения |
Замечание:
- phone
должен содержать 11 цифр и первые две цифры должны начинаться с 79
, +79
, 89
. То есть только сотовые российские номера
✅ Допустимый формат phone
:
- +79xxxxxxxx
- 79xxxxxxxx
- 89xxxxxxxx
Запрос
POST /phoneconfirm/2/confirm
Authorization: Bearer 18dasd81230dah12032
Content-Type: application/json
Host: api.peers.tv
{
"phone": "79997772222"
}
Ответ*
HTTP/1.1 200 OK
Content-Type: application/json; charset=UTF-8
{
"result": "ok",
"request_id": "bded3728-3ddc-4db9-ab7f-16612f3e3494",
"type": "sim-push",
"code_input_required": "4_digit_code",
"ttl": 900,
"timeout": 60
}
Параметр | Тип | Обязательный | Описание |
---|---|---|---|
result |
строка | Да | Статус выполнения: ok при успехе, error при ошибке |
request_id |
строка | Да | ID запроса подтверждения. |
type |
строка | Да | Тип канала подтверждения |
code_input_required |
строка | Да | информация о том, нужно ли пользователю вводить код |
ttl |
число | Да | Время жизни ID запроса подтверждения секундах. При истечении времени нужно выполнить повторный запрос на подтверждение номера телефона и подтверждение произойдет заново с sim-push |
timeout |
число | Да | Это интервал времени между запросами на подтверждение в секундах. |
error |
строка | опциональный | Ошибка. Список ошибок смотреть ниже |
Возможные значения параметра type
:
sim-push
— верификация через sim-push.call
— верификация через звонокsms
— верификация через смсHTTP/1.1 200
Content-Type: application/json; charset=UTF-8
{
"result": "error",
"error": "delivery_failed"
}
Параметры:
Параметр | Тип | Обязательный | Описание |
---|---|---|---|
request_id |
integer | Да | ID запроса подтверждения из метода confirm |
Запрос
POST /phoneconfirm/2/verify
Authorization: Bearer 18dasd81230dah12032
Content-Type: application/json
Host: api.peers.tv
{
"request_id": "bded3728-3ddc-4db9-ab7f-16612f3e3494"
}
Успешный Ответ
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
{
"result": "ok",
"status": "confirmed",
"code_input_required": "no_code",
"error_attempts": 0,
"max_attempts": 3,
"ttl": 90
}
HTTP/1.1 200
Content-Type: application/json; charset=UTF-8
{
"result": "error",
"error": "request_id_expired"
}
Параметр | Тип | Обязательный | Описание |
---|---|---|---|
result |
строка | Да | Статус выполнения: ok при успехе, error при ошибке |
status |
строка | Да | Статус выполнения |
code_input_required |
строка | Да | информация о том, нужно ли пользователю вводить код |
error_attempts |
число | Да | Количество неверных попыток ввода кода |
max_attempts |
число | Да | Максимальное количество попыток ввода кода |
ttl |
число | Да | Оставшееся время в секундах для проверки статуса. Счетчик уменьшается на бэкенде |
error |
строка | опциональный | Ошибка. Список ошибок смотреть ниже |
! Клиент обязан сохранять предыдущий ответ API при status: "unconfirmed" !
Это требуется для корректной обработки сценариев:
- Сравнения изменений между последовательными запросами verify
- Отслеживания динамики параметров (error_attempts, code_input_required)
- Принятия решений о переходе между экранами приложения
verify
Параметры ответа:
{
"result": "ok",
"status": "confirmed",
"code_input_required": "no_code",
"error_attempts": 0,
"max_attempts": 3,
"ttl": 90
}
Действия от клиента:
Параметры ответа:
{
"result": "ok",
"status": "unconfirmed",
"code_input_required": "no_code",
"error_attempts": 0,
"max_attempts": 3,
"ttl": 90,
}
Действия от клиента:
verify
ttl
confirmed
4_digit_code
Параметры ответа:
{
"result": "ok",
"status": "unconfirmed",
"code_input_required": "4_digit_code",
"error_attempts": 0,
"max_attempts": 3,
"ttl": 90
}
Действия от клиента:
checkCode
Параметры ответа:
{
"result": "ok",
"status": "unconfirmed",
"code_input_required": "4_digit_code",
"error_attempts": 0,
"max_attempts": 3,
"ttl": 90
}
Действия от клиента:
verify
error_attempts
увеличилсяПараметры ответа:
{
"result": "ok",
"status": "unconfirmed",
"code_input_required": "4_digit_code",
"error_attempts": 1, // увеличилось. Приложению нужно запомнить предыдущий ответ и сравнивать с новым. При увелечении приложению нужно уведомить пользователю о невалидном коде и предложить ввести код заново
"max_attempts": 3,
"ttl": 90
}
Действия клиента:
Параметры:
Параметр | Тип | Обязательный | Описание |
---|---|---|---|
request_id |
строка | Да | ID запроса подтверждения из метода confirm |
code |
строка | Да | код введенный пользователем |
Запрос
POST /phoneconfirm/2/checkCode
Authorization: Bearer 18dasd81230dah12032
Content-Type: application/json
Host: api.peers.tv
{
"request_id": "bded3728-3ddc-4db9-ab7f-16612f3e3494",
"code": "1234"
}
Успешный Ответ
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
{
"result": "ok"
}
HTTP/1.1 200
Content-Type: application/json; charset=UTF-8
{
"result": "error",
"error": "max_attempts_check_code"
}
Параметр | Тип | Обязательный | Описание |
---|---|---|---|
result |
строка | Да | Статус выполнения: ok при успехе, error при ошибке |
error |
строка | опциональный | Ошибка. Список ошибок смотреть ниже |
status | Описание |
---|---|
confirmed | номер телефона успешно подтвержден |
unconfirmed | номер телефона не подтвержден |
result | Описание |
---|---|
ok | Успешный ответ. |
error | негативный ответ. Действия приложения определяются ошибкой указанного в параметре error |
code_input_required | Описание |
---|---|
4_digit_code | используется, если пользователю отправлен код 4-х значный |
no_code | используется, если пользователю отправлено уведомление на телефон через sim-push |
Ошибка | Описание |
---|---|
delivery_failed | Не удалось доставить запрос подтверждения ни по одному из доступных способов (SIM-Push, звонок, SMS). Возможно подтверждение через тех. поддержку |
request_id_expired | Время жизни (ttl) ID запроса подтверждения истекло. Нужно выполнить новый запрос на подтверждение без request_id для повторной попытки подтверждения |
request_id_not_found | Не найден ID запроса подтверждения. Нужно выполнить новый запрос на подтверждение без request_id для повторной попытки подтверждения |
many_requests | Слишком частые запросы на подтверждение номера телефона. Приложению необходимо дождаться истечения timeout . |
max_attempts_check_code | Достигнуто максимальное количество попыток ввода кода. Нужно сменить канал подтверждения в методе confirm'. Счетчик error_attempts обнулится, так как весь процесс подтверждения номера телефона начнется сначала
| verify_expired | ttl в методе verifyистек. Нужно сменить канал подтверждения в методе confirm’. Счетчик error_attempts обнулится |
check_code_failed | Не удалось проверить код в методе checkCode. Нужно сменить канал подтверждения номера телефона |