Skip to content

Ikki bosqichli to'lov

Ikki bosqichli to'lov prepare_payment metodida amalga oshiriladi va auto_capture = false parametri yordamida belgilanadi, bu esa so'rov tanasida ko'rsatiladi. Ushbu to'lov jarayonida mijozning mablag'lari bloklanadi (hollanadi) va tranzaksiya summasini tasdiqlash uchun qo'shimcha ravishda set_accept metodini chaqirish talab etiladi. Ikki xil stsenariy bo'lishi mumkin: tasdiqlangan summa yechilgan summaga teng bo'lgan holat yoki tasdiqlangan summa yechilgan summadan kam bo'lgan holat.


Eslatma

Agar tranzaksiya summasi 30 daqiqa ichida tasdiqlanmasa (bekor qilish bo'yicha batafsil ma'lumot uchun «To'lovni bekor qilish» bo'limiga qarang), tranzaksiya avtomatik ravishda bekor qilinadi.

Muhim!

Callback bizning tarafimizdan waiting_user_action yoki capture statusi olinmaguncha yuboriladi.


Ishlash jarayoni

To'liq summani tasdiqlashda, Humo/Uzcard (Protsessing Markazi - PM)

  1. Mijoz mahsulot/xizmatni tanlaydi;
  2. Savatchada «To'lash» tugmasini bosadi;
  3. Hamkor tranzaksiyani prepare_payment metodi orqali ishga tushiradi;
  4. Bizning Back-end (BE) Front-end (FE) uchun to'lov havolasini yuboradi;
  5. Hamkor mijozni bizning FE'ga yo'naltiradi;
  6. Mijoz to'lov usulini tanlaydi;
  7. Bizning FE bank kartasi ma'lumotlarini kiritish uchun forma yuboradi;
  8. Mijoz bank kartasi ma'lumotlarini to'ldiradi va yuboradi;
  9. Bizning FE OTP kod kiritish formasiga yo'naltiradi;
  10. Protsessing Markazi (PM) OTP kod yuboradi;
  11. Mijoz OTP kodni yuboradi*;
  12. Tekshiruvlardan so'ng, bizning BE PM'ga mablag'ni hollash uchun set_accept so'rovini yuboradi;
  13. PM mablag'ni hollashni tasdiqlaydi yoki rad etadi;
  14. Biz Hamkorga hollash muvaffaqiyati yoki muvaffaqiyatsizligi haqida xabar beramiz;
  15. Summani tasdiqlash so'rovini callback ko'rinishida yuboramiz;
  16. Hamkor to'lovning to'liq summasini tasdiqlaydi;
  17. Summa o'zgarmaganligini tasdiqlaymiz;
  18. Summani PM'ga tasdiqlaymiz;
  19. PM'dan tasdiqni olamiz;
  20. Summani tasdiqlash javobini yuboramiz;
  21. Mijozni Hamkor saytiga qaytaramiz.

Logotip


Qisman summani tasdiqlashda, Humo/Uzcard (Protsessing Markazi - PM)

  1. Mijoz mahsulot/xizmatni tanlaydi;
  2. Savatchada «To'lash» tugmasini bosadi;
  3. Hamkor tranzaksiyani prepare_payment metodi orqali ishga tushiradi;
  4. Bizning Back-end (BE) Front-end (FE) uchun to'lov havolasini yuboradi;
  5. Hamkor mijozni bizning FE'ga yo'naltiradi;
  6. Mijoz to'lov usulini tanlaydi;
  7. Bizning FE bank kartasi ma'lumotlarini kiritish uchun forma yuboradi;
  8. Mijoz bank kartasi ma'lumotlarini to'ldiradi va yuboradi;
  9. Bizning FE OTP kod kiritish formasiga yo'naltiradi;
  10. Protsessing Markazi (PM) OTP kod yuboradi;
  11. Mijoz OTP kodni yuboradi*;
  12. Tekshiruvlardan so'ng, bizning BE PM'ga mablag'ni hollash uchun set_accept so'rovini yuboradi;
  13. PM mablag'ni hollashni tasdiqlaydi yoki rad etadi;
  14. Biz Hamkorga hollash muvaffaqiyati yoki muvaffaqiyatsizligi haqida xabar beramiz;
  15. Summani tasdiqlash so'rovini callback ko'rinishida yuboramiz;
  16. Hamkor to'lovning bir qismini tasdiqlaydi;
  17. Boshlang'ich summadan kam bo'lgan miqdorni olamiz;
  18. Tranzaksiya summasini to'g'rilaymiz;
  19. PM'dan tasdiqni olamiz;
  20. Summani tasdiqlash javobini yuboramiz;
  21. Mijozni Hamkor saytiga qaytaramiz;
  22. PM qolgan mablag'ni mijozga qaytaradi.

Logotip


To'liq summani tasdiqlashda, Visa/MC (Protsessing Markazi - PM)

  1. Mijoz mahsulot/xizmatni tanlaydi;
  2. Savatchada «To'lash» tugmasini bosadi;
  3. Hamkor tranzaksiyani prepare_payment metodi orqali ishga tushiradi;
  4. Bizning Back-end (BE) Front-end (FE) uchun to'lov havolasini yuboradi;
  5. Hamkor mijozni bizning FE'ga yo'naltiradi;
  6. Mijoz to'lov usulini tanlaydi;
  7. Bizning FE bank kartasi ma'lumotlarini kiritish uchun forma yuboradi;
  8. Mijoz bank kartasi ma'lumotlarini to'ldiradi va yuboradi;
  9. BE mablag'ni hollash uchun PM'ga set_accept so'rovini yuboradi;
  10. PM OTP kod kiritish formasining havolasini yuboradi;
  11. BE mijozni OTP kod kiritish formasiga yo'naltiradi;
  12. PM OTP kod yuboradi;
  13. Mijoz OTP kodni yuboradi;
  14. PM mablag'ni hollashni tasdiqlash yoki rad etish haqida xabar yuboradi;
  15. BE hollash muvaffaqiyati yoki muvaffaqiyatsizligi haqida Hamkorga xabar beradi;
  16. Summani tasdiqlash so'rovini callback ko'rinishida yuboramiz;
  17. Hamkor to'lovning to'liq summasini tasdiqlaydi;
  18. Summa o'zgarmaganligini tasdiqlaymiz;
  19. Summani PM'ga tasdiqlaymiz;
  20. PM'dan tasdiqni olamiz;
  21. Summani tasdiqlash javobini yuboramiz;
  22. Mijozni Hamkor saytiga qaytaramiz.

Logotip


Qisman summani tasdiqlashda, Visa/MC (Protsessing Markazi - PM)

  1. Mijoz mahsulot/xizmatni tanlaydi;
  2. Savatchada «To'lash» tugmasini bosadi;
  3. Hamkor tranzaksiyani prepare_payment metodi orqali ishga tushiradi;
  4. Bizning Back-end (BE) Front-end (FE) uchun to'lov havolasini yuboradi;
  5. Hamkor mijozni bizning FE'ga yo'naltiradi;
  6. Mijoz to'lov usulini tanlaydi;
  7. Bizning FE bank kartasi ma'lumotlarini kiritish uchun forma yuboradi;
  8. Mijoz bank kartasi ma'lumotlarini to'ldiradi va yuboradi;
  9. BE mablag'ni hollash uchun PM'ga set_accept so'rovini yuboradi;
  10. PM OTP kod kiritish formasining havolasini yuboradi;
  11. BE mijozni OTP kod kiritish formasiga yo'naltiradi;
  12. PM OTP kod yuboradi;
  13. Mijoz OTP kodni yuboradi;
  14. PM mablag'ni hollashni tasdiqlash yoki rad etish haqida xabar yuboradi;
  15. BE hollash muvaffaqiyati yoki muvaffaqiyatsizligi haqida Hamkorga xabar beradi;
  16. Summani tasdiqlash so'rovini callback ko'rinishida yuboramiz;
  17. Hamkor to'lovning bir qismini tasdiqlaydi;
  18. Boshlang'ich summadan kam bo'lgan miqdorni olamiz;
  19. Tranzaksiya summasini to'g'rilaymiz;
  20. PM'dan tasdiqni olamiz;
  21. Summani tasdiqlash javobini yuboramiz;
  22. Mijozni Hamkor saytiga qaytaramiz;
  23. PM qolgan mablag'ni mijozga qaytaradi.

Logotip

Metodlar

prepare_payment

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

Test operatsiyalari

Test operatsiyasini o'tkazish uchun prepare_payment usulini ishga tushirish kerak test parametrini so'rov tanasida true qiymati bilan belgilang. Ushbu parametr ixtiyoriy. Agar u ko'rsatilmagan bo'lsa, haqiqiy tranzaksiya yaratiladi.

Sinov operatsiyasini o'tkazish uchun belgilang - test: true

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

So‘rov namuna

Muhim!

Bir bosqichli to'lov - auto_capture: true

Ikki bosqichli to'lov - 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, 
    "test": false,
    "init_time": "2024-05-02 09:17:00",
    "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 har doim to'liq bo'lishi kerak),
    "notify_url": "https://notify-url.uz",
    "language": "uz",
    "ttl": 15
}

So‘rov parametrlari

ParametrTuriMajburiylikTavsif
octo_shop_idIntegerHaDo‘konning noyob identifikatori (do‘konning Shaxsiy kabinetida mavjud).
octo_secretStringHaDo‘konning Shaxsiy kabinetida yaratiladigan shaxsiy maxfiy kalit. Saytning xavfsiz hududida saqlanishi kerak.
shop_transaction_idStringHaDo‘kon tomonidagi tranzaksiya uchun noyob identifikator. Takroriy tranzaksiyalarni oldini olish uchun ishlatiladi.
auto_captureBoolHatrue bo‘lsa, Octo avtomatik ravishda xaridor hisobidan mablag‘ni chiqarishni tasdiqlaydi. false bo‘lsa, qo‘shimcha tasdiq talab etiladi.
testBoolHaTest rejimi to‘lovi yoki yo‘qligini bildiradi.
init_timeDatetimeHaTo‘lov yaratilgan vaqt (yyyy-MM-dd HH:mm:ss formatida).
user_dataObjectYo‘qXaridor haqidagi ma’lumotlar.
user_data.user_idStringHaDo‘kon ma’lumotlar bazasidagi foydalanuvchi identifikatori.
user_data.phoneStringHaXaridor telefon raqami.
user_data.emailStringHaXaridor elektron pochtasi.
total_sumDoubleHaTo‘lovning yakuniy miqdori.
currencyStringHaValyuta: USD, UZS, RUB.
descriptionStringHaMahsulot yoki xizmat tavsifi.
basketArrayHaSavat haqidagi ma’lumotlar.
basket.position_descStringHaPozitsiya nomi.
basket.countIntHaPozitsiya soni.
basket.priceDoubleHaPozitsiya narxi.
basket.spicStringYo‘qPozitsiya haqidagi qo‘shimcha ma’lumotlar.
payment_methodsArrayYo‘qTo‘lov usullari (bank_card, uzcard, humo).
payment_methods.methodStringHaTo‘lov usuli nomi.
tsp_idIntYo‘qSavdo va xizmat ko‘rsatish korxonasi identifikatori.
return_urlStringHaXaridor to‘lov tugagandan so‘ng yo‘naltiriladigan URL. URL noyob identifikatorni o‘z ichiga olishi kerak.
notify_urlStringYo‘qOcto serveri tomonidan yuboriladigan bildirishnomalar uchun URL. Agar belgilangan bo‘lmasa, umumiy URL ishlatiladi.
languageStringHaTo‘lov sahifasi tili (oz - lotincha o‘zbek, uz - kirill o‘zbek, en - ingliz, ru - rus).
ttlIntYo‘qTo‘lov amal qilish muddati (daqiqalarda).

Muvaffaqiyatli javob namuna

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
}

Muvaffaqiyatli javob parametrlari

ParametrTuriMajburiyligiTavsif
errorintHa (agar error=0 bo'lsa)Xatolik kodi (0 — xatolik yo'q).
dataobjectHa (agar error=0 bo'lsa)To'lov haqidagi ma'lumotlarni o'z ichiga olgan asosiy obyekt.
data.shop_transaction_idstringHa (agar error=0 bo'lsa)Do'kon tomonidan berilgan tranzaksiyaning unikallik identifikatori.
data.octo_payment_UUIDstringHa (agar error=0 bo'lsa)Octo tizimidagi to'lovning unikallik identifikatori.
data.statusstringHa (agar error=0 bo'lsa)To'lov holati.
data.octo_pay_urlstringHa (agar error=0 bo'lsa)Octo tizimida to'lovga o'tish uchun URL.
data.refunded_sumdoubleYo'qQaytarilgan summa (agar qaytim bo'lsa).
data.total_sumdoubleHa (agar error=0 bo'lsa)To'lovning umumiy summasi.
apiMessageForDevelopersstringYo'qAPI tomonidan taqdim etilgan dasturchilar uchun xabar (muvaffaqiyatli holatda bo'sh bo'ladi).
shop_transaction_idstringHa (agar error=0 bo'lsa)data obyektidagi shop_transaction_id ning dublikati.
octo_payment_UUIDstringHa (agar error=0 bo'lsa)data obyektidagi octo_payment_UUID ning dublikati.
statusstringHa (agar error=0 bo'lsa)data obyektidagi status ning dublikati.
octo_pay_urlstringHa (agar error=0 bo'lsa)data obyektidagi octo_pay_url ning dublikati.
refunded_sumdoubleHa (agar error=0 bo'lsa)data obyektidagi refunded_sum ning dublikati.
total_sumdoubleHa (agar error=0 bo'lsa)data obyektidagi total_sum ning dublikati.

Muvaffaqiyatsiz javob namuna

json
{
    "error": 2,
    "errMessage": "Wrong secret",
    "data": null,
    "errorMessage": "Wrong secret",
    "apiMessageForDevelopers": "Maydon errorMessage eskirgan, iltimos, javoblarni unifikatsiyalash uchun errMessage ga o'ting. Shuningdek, kelajakda error va errMessage dan tashqari barcha maydonlar data ichida uzatiladi. Batafsil ma'lumot uchun xizmat texnik yordami bilan bog'laning."
}

Muvaffaqiyatsiz javob namuna

ParametrTuriMajburiyligiTavsif
errorintHaXatolik kodi (0 xatolik yo'qligini bildiradi).
errMessagestringHaXatolik haqida xabar (agar xatolik sodir bo'lgan bo'lsa).
dataobjectYo'qTranzaksiyaning asosiy ma'lumotlari (xatolik yuz berganda null bo'lishi mumkin).
errorMessagestringHaXatolik haqida xabar (agar xatolik sodir bo'lgan bo'lsa).
apiMessageForDevelopersstringYo'qTexnik xabar (qo'shimcha ma'lumot uchun maydon).

Muhim!

errorMessage maydoni eskirgan, javoblarni unifikatsiya qilish uchun errMessage-ga o'tishni so'raymiz. Iltimos, shuni yodda tutingki, kelajakda error va errMessage-dan tashqari barcha maydonlar data-ga yuboriladi. Agar javoblar tuzilmasi haqida savollaringiz bo‘lsa, Octo texnik yordam xizmatiga murojaat qiling.



set_accept

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

Eslatma!

set_accept metodi prepare_payment metodi bilan to‘lov muvaffaqiyatli boshlanganidan keyin chaqirilishi kerak. Integratsiya bo‘yicha savollaringiz bo‘lsa, texnik yordam xizmatiga murojaat qiling.

So'rovnoma

json
{
    "octo_shop_id": "{merchant_id}",
    "octo_secret": "{{merchant_secret}}",
    "octo_payment_UUID": "{{octo_payment_UUID}}",
    "accept_status": "capture", // "cancel"
    "final_amount": 10.00
}

Parametrlar tavsifi

ParametrTuriMajburiylikTavsif
octo_shop_idintHaDo'konning Shaxsiy kabinetida mavjud do'konning noyob identifikatori.
octo_secretstringHaDo'konning maxfiy kaliti.
octo_payment_UUIDstringHaOCTO tizimi tomonidan yaratilgan to'lovning noyob identifikatori.
accept_statusstringHaOperatsiyani tasdiqlash holati: capture yoki cancel.
final_amountdecimalHaTo'lovning yakuniy miqdori.

Muvaffaqiyatli javob

json
{
    "error": 0,
    "data": {
        "shop_transaction_id": "6354c573-040a-490f-8d1f-2bb5c89b6d9d",
        "octo_payment_UUID": "6b6b4477-ab8b-49dc-97eb-638b15b9b3e9",
        "status": "succeeded",
        "octo_pay_url": "https://dev-pay.octo.uz/pay/6b6b4477-ab8b-49dc-97eb-638b15b9b3e9?language=uz",
        "transfer_sum": 980.00,
        "refunded_sum": 0.00,
        "total_sum": 1000.00,
        "payed_time": "2024-12-18 16:15:34"
    },
    "apiMessageForDevelopers": "errorMessage maydoni eskirgan, javoblarni unifikatsiya qilish uchun errMessage-ga o'tishni so'raymiz.",
    "shop_transaction_id": "6354c573-040a-490f-8d1f-2bb5c89b6d9d",
    "octo_payment_UUID": "6b6b4477-ab8b-49dc-97eb-638b15b9b3e9",
    "status": "succeeded",
    "octo_pay_url": "https://dev-pay.octo.uz/pay/6b6b4477-ab8b-49dc-97eb-638b15b9b3e9?language=uz",
    "transfer_sum": 980.00,
    "refunded_sum": 0.00,
    "total_sum": 1000.00,
    "payed_time": "2024-12-18 16:15:34"
}

Parametrlar tavsifi

ParametrTuriMajburiylikTavsif
errorintHaXato kodi. 0 qiymati muvaffaqiyatli so'rovni anglatadi.
dataobjectHaTo'lov haqida batafsil ma'lumotga ega ob'ekt.
data.shop_transaction_idstringHaOperatsiyaning do'kondagi noyob identifikatori.
data.octo_payment_UUIDstringHaTo'lovning Octo tizimidagi noyob identifikatori.
data.statusstringHaTo'lov holati (succeeded, failed, pending).
data.octo_pay_urlstringHaTo'lovga yoki to'lov holatini ko'rish uchun URL.
data.transfer_sumfloatHaChegirmalar hisobga olingan o'tkazilgan pul miqdori.
data.refunded_sumfloatYo'qQaytarilgan pul miqdori. Agar qaytarish bo'lmasa, qiymat 0.
data.total_sumfloatHaDastlab so'ralgan to'lov miqdori.
data.payed_timestringYo'qYYYY-MM-DD HH:MM:SS formatida to'lovni muvaffaqiyatli yakunlash vaqti.
apiMessageForDevelopersstringYo'qAPI holati yoki o'zgarishlar haqida ishlab chiquvchilarga xabar.

Muvaffaqiyatsiz javob

json
{
    "error": 2,
    "errMessage": "Wrong secret",
    "data": null,
    "errorMessage": "Wrong secret",
    "apiMessageForDevelopers": "errorMessage maydoni eskirgan, javoblarni unifikatsiya qilish uchun errMessage-ga o'tishni so'raymiz."
}

Parametrlar tavsifi

ParametrTuriMajburiylikTavsif
errorintHaXato kodi.
errMessagestringHaXato haqida xabar.
dataobjectYo'qOperatsiya haqida asosiy ma'lumot.
errorMessagestringHaXato haqida xabar.
apiMessageForDevelopersstringYo'qIshlab chiquvchilar uchun xabar.

callback

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

Callback tasdiqlash summasi:

json
{
  "octo_secret":"***",
  "octo_payment_UUID":"0800a75f-1f50-4da8-9225-ae43028cbad1",
  "accept_status":"capture",
  "final_amount":437278.66
}
ParametrTuriMajburiyTavsif
octo_secretStringHaDo‘konning shaxsiy maxfiy kaliti, do‘kon kabinetida generatsiya qilinadi. Xavfsiz hududda saqlanishi kerak
octo_payment_UUIDStringHa (error=0
bo‘lsa)
Octo tizimidagi noyob to‘lov identifikatori
accept_statusStringHaTasdiqlash holati, waiting_for_capture holatidagi tranzaksiyalar uchun majburiy
Qiymatlar:
capture – to‘lovni tasdiqlash
cancel – to‘lovni bekor qilish
final_amountDecimalYo‘qTasdiqlangan to‘lov summasi

Callback javob strukturası:

json
{
  "accept_status": "capture",
  "final_amount": 1000.00
}
ParametrTuriMajburiyTavsif
accept_statusStringHaTasdiqlash holati, waiting_for_capture holatidagi tranzaksiyalar uchun majburiy
Qiymatlar:
capture – to‘lovni tasdiqlash
cancel – to‘lovni bekor qilish
final_amountDecimalYo‘qTasdiqlangan to‘lov summasi

Ogohlantirish

Octo do‘konlarning maxfiy kalitlarini ochiq shaklda saqlamaydi va bildirishnomalarni imzolash uchun ishlatmaydi. Shuning uchun, Octo dan kelgan xabarnomaga asoslanib holatni o‘zgartirishdan oldin, joriy holatni qo‘shimcha so‘rov bilan tasdiqlash tavsiya etiladi. Bunday so‘rov do‘konning maxfiy kaliti bilan imzolanadi va shifrlanadi, bu uning haqiqiyligini kafolatlaydi.