Оплата через QR-терминал#
Отдельный сценарий оплаты партнёрам, предоставляющим платёжные терминалы субпартнёрам. Для стандартной интеграции используйте методы из описания API.
Термины#
Термин |
Описание |
|---|---|
Магазин-Партнёр |
Банк-партнёр, который предоставляет субпартнёрам терминалы для приёма оплаты |
Субпартнёр |
Продавец, который пользуется терминалами банка-партнёра. Идентифицируется логином (MID) |
Терминал |
Устройство, на котором Клиент оплачивает покупку в магазине Субпартнёра.
Идентифицируется параметром |
Процесс покупки#
Клиент в офлайн-магазине Субпартнёра сообщает кассиру об оплате через QR-терминал.
Кассир выбирает на терминале способ оплаты «Подели» — терминал вызывает метод CREATE_TERMINAL.
В «Подели» создаётся заказ (статус
CREATED); в ответе метода терминал получает ссылкуredirectUrl.Терминал формирует из полученной ссылки QR-код и периодически опрашивает статус заказа методом INFO до перехода заказа в терминальный статус.
Клиент сканирует QR-код и переходит на страницу оформления заказа «Подели» — запускается скоринг (статус
SCORING).При одобрении (статус
APPROVED) Клиент оплачивает первый платёж; заказ переходит в статусCOMPLETED— товар можно выдавать.
Статусная модель совпадает с офлайн-сценарием — см. статусную модель заказа.
CREATE_TERMINAL — создание заказа на терминале#
POST https://api-sand.podeli.ru/partners/v1/orders/create_terminal
Заголовки запроса
Все заголовки обязательны.
Заголовок |
Тип |
Описание |
|---|---|---|
|
string |
Тип контента: |
|
base64 |
Basic Auth: логин и пароль Магазина-Партнёра в формате |
|
string(36) |
Идентификатор запроса в формате UUID v4. Для каждого нового HTTP-запроса передавайте новое значение |
Параметры запроса
Поле |
Тип |
Обяз. |
Описание |
|---|---|---|---|
|
object |
✓ |
Субпартнёр |
└─ |
string |
✓ |
Логин субпартнёра (MID) |
|
object |
✓ |
Заказ |
├─ |
number(18,2) |
✓ |
Сумма для оплаты через «Подели», в рублях с точностью до двух знаков |
├─ |
number(18,2) |
— |
|
├─ |
boolean |
✓ |
|
├─ |
number |
— |
Широта |
├─ |
number |
— |
Долгота |
├─ |
string |
— |
Торговый центр |
├─ |
string |
— |
Адрес магазина |
├─ |
string |
— |
Номер кассы |
├─ |
string |
— |
Номер кассира |
└─ |
string |
— |
Комментарий |
|
string(36) |
✓ |
Идентификатор терминала (TID) |
|
string(500) |
— |
Комментарий Магазина-Партнёра |
|
string(500) |
— |
Комментарий Магазина-Партнёра |
Заголовки ответа
Заголовок |
Тип |
Описание |
|---|---|---|
|
string |
Идентификатор исходного запроса (для связи ответных сообщений) |
Тело ответа
Поле |
Тип |
Обяз. |
Описание |
|---|---|---|---|
|
object |
✓ |
Заказ |
└─ |
string |
✓ |
Идентификатор заказа. Уникален в рамках партнёра |
|
string |
✓ |
|
|
object |
— |
Описание ошибки (поля |
Примеры
{
"subpartnerInfo": {
"login": "submerchant_01"
},
"order": {
"amount": 5000.00,
"prepaidAmount": 0.0,
"isTwoStagePayment": false,
"mall": "ТРЦ Сити Молл",
"address": "ул. Первая, 5",
"cashRegisterNumber": "1234567890",
"cashierNumber": "0987654321"
},
"terminalId": "1234"
}
{
"order": {
"id": "937c7802-5c24-4a4b-81af-1837e8be2a23"
},
"redirectUrl": "https://pokupka-sand.podeli.ru/login?guid=2add8220-0da6-4ef0-94d5-854ca4f920d8&amountAll=5000.0&amountFirst=1250.00&flowId=1"
}
Статус-коды и коды ошибок метода
Код |
Код ошибки |
Значение |
|---|---|---|
200 |
— |
Заявка создана |
400 |
|
Ошибка валидации тела/параметров запроса (в т.ч. пустое значение
|
401 |
|
Аутентификация не пройдена: неверный логин/пароль, партнёр отключён или истёк срок договора |
422 |
— |
Ошибка бизнес-логики: в текущем состоянии заявки нельзя выполнить это действие |
429 |
|
Превышен лимит запросов к серверу |
500 |
|
Неизвестная ошибка |
Формат ошибки
При ошибке тело ответа содержит объект error с полями code (код ошибки)
и text (текст ошибки):
{
"error": {
"code": "not_authorized_partner_login",
"text": "Ошибка аутентификации: неверный логин/пароль"
}
}
Особенности терминального сценария#
Опрос статуса. После вызова CREATE_TERMINAL опрашивайте статус заказа методом INFO до перехода заказа в терминальный статус.
Возврат. При оформлении возврата методом REFUND обязательно передавайте в секции
order/refund/addParamsпараметры с ключамиMID(логин субпартнёра) иTID(идентификатор терминала) — без них метод вернёт ошибкуnone_additional_params(422). Если MID в возврате не совпадает с MID в заказе, метод вернёт ошибкуnot_allowed_refund_order(422) — заказ принадлежит другому субпартнёру. Идентификатор возврата формируется на стороне «Подели», полеorder/refund/idпередавать не требуется.Отмена. Заказ отменяется стандартным методом CANCEL.