Одностадийная оплата
Одностадийная оплата задаётся в методе prepare_payment
с помощью параметра auto_capture = true
, который устанавливается по умолчанию в теле запроса. В данном процессе оплаты, денежные средства списываются сразу, без необходимости дополнительного подтверждения суммы со стороны Партнёра.
Схемы работ
Оплата через форму OCTO - Humo/Uzcard (ПЦ)
- Клиент выбрал товар/услугу;
- В корзине нажал «Оплатить»;
- Партнер инициирует транзакцию методом
prepare_payment
; - Наш Back-end (BE) отправляет ссылку на наш Front-end (FE) для оплаты;
- Партнер отправляет ссылку для перехода на наш FE;
- Клиент выбирает способ оплаты;
- Наш FE отправляет экранную форму для ввода данных банковской карты;
- Клиент заполняет и отправляет данные банковской карты;
- Наш FE перенаправляет на экранную форму ввода OTP кода;
- ПЦ отправляет OTP код;
- Клиент отправляет OTP код*;
- После проверок, наш BE отправляет запрос на списание в ПЦ;
- ПЦ подтверждает списание/отказ;
- Мы уведомляем Партнера об успешном/неуспешном списании;
- Перенаправляем клиента обратно на сайт Партнера.
Важно!
Есть лимит на ввод неправильных OTP кодов для Uzcard. Если клиент 3 раза ошибся при вводе OTP кода, то транзакция аннулируется и необходимо регистрировать новый платеж.
Оплата через форму OCTO - Visa/MC (ПЦ)
- Клиент выбрал товар/услугу;
- В корзине нажал «Оплатить»;
- Партнер инициирует транзакцию методом
prepare_payment
; - Наш Back-end (BE) отправляет ссылку на наш Front-end (FE) для оплаты;
- Партнер перенаправляет клиента на наш FE для оплаты;
- Клиент выбирает способ оплаты;
- Наш FE отправляет экранную форму для ввода данных банковской карты;
- Клиент заполняет и отправляет данные банковской карты;
- Наш FE отображает клиенту экранную форму ввода OTP кода;
- ПЦ Visa/MC отправил OTP код клиенту;
- Клиент вводит OTP код, полученный от ПЦ Visa/MC;
- ПЦ Visa/MC отправляет подтверждение списания в наш BE;
- Наш BE уведомляем Партнера об успешном/неуспешном списании;
- Наш BE перенаправил клиента на сайт Партнера.
Методы
prepare_payment
- URL:
https://secure.octo.uz/prepare_payment
- Method:
POST
- Content-type:
application/json
Тестовые транзакции
Для проведения тестовой транзакции необходимо при инициации метода prepare_payment
указать в теле запроса параметр test
со значением true
. Этот параметр является необязательным. Если он не указан, будет создана реальная транзакция.
Для проведения тестовой транзакции укажите - test: true
{
"auto_capture": true,
"test": true,
"init_time": "2024-05-02 09:17:00"
}
Пример запроса
Важно!
Одностадийная оплата - auto_capture: true
Двухстадийная оплата - auto_capture: false
{
"octo_shop_id": 123,
"octo_secret": "537da54b-835a-4968-9864-c2ae02c5902e",
"shop_transaction_id": "0000_0000_0000_0000_0010",
"auto_capture": true,
"init_time": "2024-05-02 09:17:00",
"test": false,
"user_data": {
"user_id": "Johnny Depp",
"phone": "998901234567",
"email": "octo@mail.com"
},
"total_sum": 1000.0,
"currency": "UZS",
"description": "TEST_PAYMENT",
"basket": [
{
"position_desc": "Йогурт MANON клубничный",
"count": 2,
"price": 10.0,
"spic": "special_information_for_position"
},
{
"position_desc": "Йогурт MANON банановый",
"count": 1,
"price": 20.0,
"spic": "special_information_for_position"
}
],
"payment_methods": [
{
"method": "bank_card"
},
{
"method": "uzcard"
},
{
"method": "humo"
}
],
"tsp_id": 18,
"return_url": "https://octo.uz" // (URL всегда должен быть полным),
"notify_url": "https://notify-url.uz",
"language": "uz",
"ttl": 15
}
Параметры запроса
Параметр | Тип | Обязательность | Описание |
---|---|---|---|
octo_shop_id | Integer | Да | Уникальный ID магазина (доступен в ЛК магазина). |
octo_secret | String | Да | Персональный секретный ключ магазина, который генерируется в ЛК магазина. Должен содержаться в безопасной недоступной зоне сайта магазина. |
shop_transaction_id | String | Да | Уникальный идентификатор транзакции на стороне магазина. Используется OCTO для предотвращения случайного дублирования транзакций. |
auto_capture | Bool | Да | Если true, то ПС Octo будет автоматически подтверждать списание средств со счета покупателя. Если false, то после авторизации платежа Octo будет ожидать от магазина дополнительного подтверждения завершения транзакции. По умолчанию false |
test | Bool | Да | Тестовый платёж или нет. |
init_time | Datetime | Да | Время создания платежа в формате yyyy-MM-dd HH:mm:ss. |
user_data | Object | Нет | Информация о покупателе, используется для отображения на странице оплаты. |
user_data.user_id | String | Да (если передаётся весь блок user_data) | ID пользователя в БД магазина. |
user_data.phone | String | Да (если передаётся весь блок user_data) | Номер телефона пользователя. |
user_data.email | String | Да (если передаётся весь блок user_data) | Электронная почта пользователя. |
total_sum | Double | Да | Итоговая сумма платежа. |
currency | String | Да | Валюта. Варианты: USD, UZS, RUB. |
description | String | Да | Описание товара. |
basket | Array | Да | Блок детальной информации по корзине. Если присутствует, то будет отображен покупателю при оплате. |
basket.position_desc | String | Да (если передаётся весь блок basket) | Название позиции в чеке. |
basket.count | Int | Да (если передаётся весь блок basket) | Число таких позиций. |
basket.price | Double | Да (если передаётся весь блок basket) | Цена одной позиции. |
basket.spic | String | Нет | Дополнительное поле для уточнения информации о позиции в корзине. |
payment_methods | Array | Нет | Множество доступных покупателю методов оплаты. Если не передается, то будут предложены все доступные методы. |
payment_methods.method | String | Да (если передаётся весь блок payment_methods) | Название одного метода из вариантов: bank_card, uzcard, humo. |
tsp_id | Int | Нет | Идентификатор торгово-сервисного предприятия, обеспечивающего продажу данной услуги или товара. |
return_url | String | Да | URL на который следует перенаправить покупателя после завершения оплаты. URL должен содержать уникальный параметр, идентифицирующий конкретный платеж. |
notify_url | String | Нет | URL на который сервер OCTO будет отправлять нотификации об изменении статуса платежа. Если не установлен, то используется общий URL, который установлен в личном кабинете. |
language | String | Да | Язык платежной формы. По умолчанию - язык браузера или en. Допустимые значения: oz - узбекский (латиница), uz - узбекский (кириллица), en - английский, ru - русский. |
ttl | Int | Нет | Время жизни платежа с момента создания (в минутах). По истечению этого времени провести платеж будет невозможно. |
Пример успешного ответа
{
"error": 0,
"data": {
"shop_transaction_id": "c9211e0f-c6ba-4d97-b8be-fb230ef3985b",
"octo_payment_UUID": "e3f40dc3-4955-412a-853a-2ddd28d3201f",
"status": "created",
"octo_pay_url": "https://pay2.octo.uz/pay/e3f40dc3-4955-412a-853a-2ddd28d3201f?language=uz",
"refunded_sum": 0,
"total_sum": 1000.0
},
"apiMessageForDevelopers": "",
"shop_transaction_id": "c9211e0f-c6ba-4d97-b8be-fb230ef3985b",
"octo_payment_UUID": "e3f40dc3-4955-412a-853a-2ddd28d3201f",
"status": "created",
"octo_pay_url": "https://pay2.octo.uz/pay/e3f40dc3-4955-412a-853a-2ddd28d3201f?language=uz",
"refunded_sum": 0,
"total_sum": 1000.0
}
Параметры успешного ответа
Параметр | Тип | Обязательность | Описание |
---|---|---|---|
error | int | Да (если error=0 ) | Код ошибки (0 — ошибок нет). |
data | object | Да (если error=0 ) | Основной объект с данными о платеже. |
data.shop_transaction_id | string | Да (если error=0 ) | Уникальный идентификатор транзакции на стороне магазина. |
data.octo_payment_UUID | string | Да (если error=0 ) | Уникальный идентификатор платежа в системе Octo. |
data.status | string | Да (если error=0 ) | Статус платежа. |
data.octo_pay_url | string | Да (если error=0 ) | URL для перехода к оплате в системе Octo. |
data.refunded_sum | double | Нет | Сумма, которая была возвращена (если есть возвраты). |
data.total_sum | double | Да (если error=0 ) | Итоговая сумма платежа. |
apiMessageForDevelopers | string | Нет | Сообщение для разработчиков, предоставляемое API (пустое в случае успеха). |
shop_transaction_id | string | Да (если error=0 ) | Дублирует shop_transaction_id из объекта data . |
octo_payment_UUID | string | Да (если error=0 ) | Дублирует octo_payment_UUID из объекта data . |
status | string | Да (если error=0 ) | Дублирует status из объекта data . |
octo_pay_url | string | Да (если error=0 ) | Дублирует octo_pay_url из объекта data . |
refunded_sum | double | Да (если error=0 ) | Дублирует refunded_sum из объекта data . |
total_sum | double | Да (если error=0 ) | Дублирует total_sum из объекта data . |
Пример неуспешного ответа
{
"error": 2,
"errMessage": "Wrong secret",
"data": null,
"errorMessage": "Wrong secret",
"apiMessageForDevelopers": "Поле errorMessage устарело, просим перейти на errMessage для унификации ответов. Так же пожалуйста знайте, что в дальнейшем все поля кроме error и errMessage будут передаваться в data. Для более подробного ознакомление свяжитесь с технической поддержкой сервиса"
}
Параметры неуспешного ответа
Параметр | Тип | Обязательность | Описание |
---|---|---|---|
error | int | Да | Код ошибки (0 указывает на отсутствие ошибок). |
errMessage | string | Да | Сообщение об ошибке (если ошибка произошла). |
data | object | Нет | Основные данные транзакции (при ошибке может быть null ). |
errorMessage | string | Да | Сообщение об ошибке (если ошибка произошла). |
apiMessageForDevelopers | string | Нет | Техническое сообщение (поле для дополнительной информации). |
Важно!
В дальнейшем все поля, кроме error
и errMessage
, будут передаваться в объект data
. Если у вас возникают вопросы по поводу структуры ответов, пожалуйста, свяжитесь с технической поддержкой сервиса Octo.