Skip to content

Одностадийная оплата

Одностадийная оплата задаётся в методе prepare_payment с помощью параметра auto_capture = true, который устанавливается по умолчанию в теле запроса. В данном процессе оплаты, денежные средства списываются сразу, без необходимости дополнительного подтверждения суммы со стороны Партнёра.

Схемы работ

Оплата через форму OCTO - Humo/Uzcard (ПЦ)

  1. Клиент выбрал товар/услугу;
  2. В корзине нажал «Оплатить»;
  3. Партнер инициирует транзакцию методом prepare_payment;
  4. Наш Back-end (BE) отправляет ссылку на наш Front-end (FE) для оплаты;
  5. Партнер отправляет ссылку для перехода на наш FE;
  6. Клиент выбирает способ оплаты;
  7. Наш FE отправляет экранную форму для ввода данных банковской карты;
  8. Клиент заполняет и отправляет данные банковской карты;
  9. Наш FE перенаправляет на экранную форму ввода OTP кода;
  10. ПЦ отправляет OTP код;
  11. Клиент отправляет OTP код*;
  12. После проверок, наш BE отправляет запрос на списание в ПЦ;
  13. ПЦ подтверждает списание/отказ;
  14. Мы уведомляем Партнера об успешном/неуспешном списании;
  15. Перенаправляем клиента обратно на сайт Партнера.

Важно!

Есть лимит на ввод неправильных OTP кодов для Uzcard. Если клиент 3 раза ошибся при вводе OTP кода, то транзакция аннулируется и необходимо регистрировать новый платеж.


Логотип

Оплата через форму OCTO Humo/Uzcard (ПЦ)

Оплата через форму OCTO - Visa/MC (ПЦ)

  1. Клиент выбрал товар/услугу;
  2. В корзине нажал «Оплатить»;
  3. Партнер инициирует транзакцию методом prepare_payment;
  4. Наш Back-end (BE) отправляет ссылку на наш Front-end (FE) для оплаты;
  5. Партнер перенаправляет клиента на наш FE для оплаты;
  6. Клиент выбирает способ оплаты;
  7. Наш FE отправляет экранную форму для ввода данных банковской карты;
  8. Клиент заполняет и отправляет данные банковской карты;
  9. Наш FE отображает клиенту экранную форму ввода OTP кода;
  10. ПЦ Visa/MC отправил OTP код клиенту;
  11. Клиент вводит OTP код, полученный от ПЦ Visa/MC;
  12. ПЦ Visa/MC отправляет подтверждение списания в наш BE;
  13. Наш BE уведомляем Партнера об успешном/неуспешном списании;
  14. Наш BE перенаправил клиента на сайт Партнера.

Логотип

Оплата через форму OCTO Visa/MC (ПЦ)

Методы

prepare_payment

  • URL: https://secure.octo.uz/prepare_payment
  • Method: POST
  • Content-type: application/json

Тестовые транзакции

Для проведения тестовой транзакции необходимо при инициации метода prepare_payment указать в теле запроса параметр test со значением true. Этот параметр является необязательным. Если он не указан, будет создана реальная транзакция.

Для проведения тестовой транзакции укажите - test: true

json
{
  "auto_capture": true,
  "test": true, 
  "init_time": "2024-05-02 09:17:00"
}

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

Важно!

Одностадийная оплата - auto_capture: true

Двухстадийная оплата - auto_capture: false

json
{
    "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_idIntegerДаУникальный ID магазина (доступен в ЛК магазина).
octo_secretStringДаПерсональный секретный ключ магазина, который генерируется в ЛК магазина.
Должен содержаться в безопасной недоступной зоне сайта магазина.
shop_transaction_idStringДаУникальный идентификатор транзакции на стороне магазина.
Используется OCTO для предотвращения случайного дублирования транзакций.
auto_captureBoolДаЕсли true, то ПС Octo будет автоматически подтверждать списание средств со счета покупателя.
Если false, то после авторизации платежа Octo будет ожидать от магазина дополнительного подтверждения завершения транзакции.
По умолчанию false
testBoolДаТестовый платёж или нет.
init_timeDatetimeДаВремя создания платежа в формате yyyy-MM-dd HH:mm:ss.
user_dataObjectНетИнформация о покупателе, используется для отображения на странице оплаты.
user_data.user_idStringДа (если передаётся весь блок user_data)ID пользователя в БД магазина.
user_data.phoneStringДа (если передаётся весь блок user_data)Номер телефона пользователя.
user_data.emailStringДа (если передаётся весь блок user_data)Электронная почта пользователя.
total_sumDoubleДаИтоговая сумма платежа.
currencyStringДаВалюта. Варианты: USD, UZS, RUB.
descriptionStringДаОписание товара.
basketArrayДаБлок детальной информации по корзине. Если присутствует, то будет отображен покупателю при оплате.
basket.position_descStringДа (если передаётся весь блок basket)Название позиции в чеке.
basket.countIntДа (если передаётся весь блок basket)Число таких позиций.
basket.priceDoubleДа (если передаётся весь блок basket)Цена одной позиции.
basket.spicStringНетДополнительное поле для уточнения информации о позиции в корзине.
payment_methodsArrayНетМножество доступных покупателю методов оплаты. Если не передается, то будут предложены все доступные методы.
payment_methods.methodStringДа (если передаётся весь блок payment_methods)Название одного метода из вариантов: bank_card, uzcard, humo.
tsp_idIntНетИдентификатор торгово-сервисного предприятия, обеспечивающего продажу данной услуги или товара.
return_urlStringДаURL на который следует перенаправить покупателя после завершения оплаты.
URL должен содержать уникальный параметр, идентифицирующий конкретный платеж.
notify_urlStringНетURL на который сервер OCTO будет отправлять нотификации об изменении статуса платежа.
Если не установлен, то используется общий URL, который установлен в личном кабинете.
languageStringДаЯзык платежной формы. По умолчанию - язык браузера или en.
Допустимые значения: oz - узбекский (латиница), uz - узбекский (кириллица), en - английский, ru - русский.
ttlIntНетВремя жизни платежа с момента создания (в минутах). По истечению этого времени провести платеж будет невозможно.

Пример успешного ответа

json
{
    "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
}

Параметры успешного ответа

ПараметрТипОбязательностьОписание
errorintДа (если error=0)Код ошибки (0 — ошибок нет).
dataobjectДа (если error=0)Основной объект с данными о платеже.
data.shop_transaction_idstringДа (если error=0)Уникальный идентификатор транзакции на стороне магазина.
data.octo_payment_UUIDstringДа (если error=0)Уникальный идентификатор платежа в системе Octo.
data.statusstringДа (если error=0)Статус платежа.
data.octo_pay_urlstringДа (если error=0)URL для перехода к оплате в системе Octo.
data.refunded_sumdoubleНетСумма, которая была возвращена (если есть возвраты).
data.total_sumdoubleДа (если error=0)Итоговая сумма платежа.
apiMessageForDevelopersstringНетСообщение для разработчиков, предоставляемое API (пустое в случае успеха).
shop_transaction_idstringДа (если error=0)Дублирует shop_transaction_id из объекта data.
octo_payment_UUIDstringДа (если error=0)Дублирует octo_payment_UUID из объекта data.
statusstringДа (если error=0)Дублирует status из объекта data.
octo_pay_urlstringДа (если error=0)Дублирует octo_pay_url из объекта data.
refunded_sumdoubleДа (если error=0)Дублирует refunded_sum из объекта data.
total_sumdoubleДа (если error=0)Дублирует total_sum из объекта data.

Пример неуспешного ответа

json
{
    "error": 2,
    "errMessage": "Wrong secret",
    "data": null,
    "errorMessage": "Wrong secret",
    "apiMessageForDevelopers": "Поле errorMessage устарело, просим перейти на errMessage для унификации ответов. Так же пожалуйста знайте, что в дальнейшем все поля кроме error и errMessage будут передаваться в data. Для более подробного ознакомление свяжитесь с технической поддержкой сервиса"
}

Параметры неуспешного ответа

ПараметрТипОбязательностьОписание
errorintДаКод ошибки (0 указывает на отсутствие ошибок).
errMessagestringДаСообщение об ошибке (если ошибка произошла).
dataobjectНетОсновные данные транзакции (при ошибке может быть null).
errorMessagestringДаСообщение об ошибке (если ошибка произошла).
apiMessageForDevelopersstringНетТехническое сообщение (поле для дополнительной информации).

Важно!

В дальнейшем все поля, кроме error и errMessage, будут передаваться в объект data. Если у вас возникают вопросы по поводу структуры ответов, пожалуйста, свяжитесь с технической поддержкой сервиса Octo.