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)
- Mijoz mahsulot/xizmatni tanlaydi;
- Savatchada «To'lash» tugmasini bosadi;
- Hamkor tranzaksiyani
prepare_payment
metodi orqali ishga tushiradi; - Bizning Back-end (BE) Front-end (FE) uchun to'lov havolasini yuboradi;
- Hamkor mijozni bizning FE'ga yo'naltiradi;
- Mijoz to'lov usulini tanlaydi;
- Bizning FE bank kartasi ma'lumotlarini kiritish uchun forma yuboradi;
- Mijoz bank kartasi ma'lumotlarini to'ldiradi va yuboradi;
- Bizning FE OTP kod kiritish formasiga yo'naltiradi;
- Protsessing Markazi (PM) OTP kod yuboradi;
- Mijoz OTP kodni yuboradi*;
- Tekshiruvlardan so'ng, bizning BE PM'ga mablag'ni hollash uchun
set_accept
so'rovini yuboradi; - PM mablag'ni hollashni tasdiqlaydi yoki rad etadi;
- Biz Hamkorga hollash muvaffaqiyati yoki muvaffaqiyatsizligi haqida xabar beramiz;
- Summani tasdiqlash so'rovini
callback
ko'rinishida yuboramiz; - Hamkor to'lovning to'liq summasini tasdiqlaydi;
- Summa o'zgarmaganligini tasdiqlaymiz;
- Summani PM'ga tasdiqlaymiz;
- PM'dan tasdiqni olamiz;
- Summani tasdiqlash javobini yuboramiz;
- Mijozni Hamkor saytiga qaytaramiz.
Qisman summani tasdiqlashda, Humo/Uzcard (Protsessing Markazi - PM)
- Mijoz mahsulot/xizmatni tanlaydi;
- Savatchada «To'lash» tugmasini bosadi;
- Hamkor tranzaksiyani
prepare_payment
metodi orqali ishga tushiradi; - Bizning Back-end (BE) Front-end (FE) uchun to'lov havolasini yuboradi;
- Hamkor mijozni bizning FE'ga yo'naltiradi;
- Mijoz to'lov usulini tanlaydi;
- Bizning FE bank kartasi ma'lumotlarini kiritish uchun forma yuboradi;
- Mijoz bank kartasi ma'lumotlarini to'ldiradi va yuboradi;
- Bizning FE OTP kod kiritish formasiga yo'naltiradi;
- Protsessing Markazi (PM) OTP kod yuboradi;
- Mijoz OTP kodni yuboradi*;
- Tekshiruvlardan so'ng, bizning BE PM'ga mablag'ni hollash uchun
set_accept
so'rovini yuboradi; - PM mablag'ni hollashni tasdiqlaydi yoki rad etadi;
- Biz Hamkorga hollash muvaffaqiyati yoki muvaffaqiyatsizligi haqida xabar beramiz;
- Summani tasdiqlash so'rovini
callback
ko'rinishida yuboramiz; - Hamkor to'lovning bir qismini tasdiqlaydi;
- Boshlang'ich summadan kam bo'lgan miqdorni olamiz;
- Tranzaksiya summasini to'g'rilaymiz;
- PM'dan tasdiqni olamiz;
- Summani tasdiqlash javobini yuboramiz;
- Mijozni Hamkor saytiga qaytaramiz;
- PM qolgan mablag'ni mijozga qaytaradi.
To'liq summani tasdiqlashda, Visa/MC (Protsessing Markazi - PM)
- Mijoz mahsulot/xizmatni tanlaydi;
- Savatchada «To'lash» tugmasini bosadi;
- Hamkor tranzaksiyani
prepare_payment
metodi orqali ishga tushiradi; - Bizning Back-end (BE) Front-end (FE) uchun to'lov havolasini yuboradi;
- Hamkor mijozni bizning FE'ga yo'naltiradi;
- Mijoz to'lov usulini tanlaydi;
- Bizning FE bank kartasi ma'lumotlarini kiritish uchun forma yuboradi;
- Mijoz bank kartasi ma'lumotlarini to'ldiradi va yuboradi;
- BE mablag'ni hollash uchun PM'ga
set_accept
so'rovini yuboradi; - PM OTP kod kiritish formasining havolasini yuboradi;
- BE mijozni OTP kod kiritish formasiga yo'naltiradi;
- PM OTP kod yuboradi;
- Mijoz OTP kodni yuboradi;
- PM mablag'ni hollashni tasdiqlash yoki rad etish haqida xabar yuboradi;
- BE hollash muvaffaqiyati yoki muvaffaqiyatsizligi haqida Hamkorga xabar beradi;
- Summani tasdiqlash so'rovini
callback
ko'rinishida yuboramiz; - Hamkor to'lovning to'liq summasini tasdiqlaydi;
- Summa o'zgarmaganligini tasdiqlaymiz;
- Summani PM'ga tasdiqlaymiz;
- PM'dan tasdiqni olamiz;
- Summani tasdiqlash javobini yuboramiz;
- Mijozni Hamkor saytiga qaytaramiz.
Qisman summani tasdiqlashda, Visa/MC (Protsessing Markazi - PM)
- Mijoz mahsulot/xizmatni tanlaydi;
- Savatchada «To'lash» tugmasini bosadi;
- Hamkor tranzaksiyani
prepare_payment
metodi orqali ishga tushiradi; - Bizning Back-end (BE) Front-end (FE) uchun to'lov havolasini yuboradi;
- Hamkor mijozni bizning FE'ga yo'naltiradi;
- Mijoz to'lov usulini tanlaydi;
- Bizning FE bank kartasi ma'lumotlarini kiritish uchun forma yuboradi;
- Mijoz bank kartasi ma'lumotlarini to'ldiradi va yuboradi;
- BE mablag'ni hollash uchun PM'ga
set_accept
so'rovini yuboradi; - PM OTP kod kiritish formasining havolasini yuboradi;
- BE mijozni OTP kod kiritish formasiga yo'naltiradi;
- PM OTP kod yuboradi;
- Mijoz OTP kodni yuboradi;
- PM mablag'ni hollashni tasdiqlash yoki rad etish haqida xabar yuboradi;
- BE hollash muvaffaqiyati yoki muvaffaqiyatsizligi haqida Hamkorga xabar beradi;
- Summani tasdiqlash so'rovini
callback
ko'rinishida yuboramiz; - Hamkor to'lovning bir qismini tasdiqlaydi;
- Boshlang'ich summadan kam bo'lgan miqdorni olamiz;
- Tranzaksiya summasini to'g'rilaymiz;
- PM'dan tasdiqni olamiz;
- Summani tasdiqlash javobini yuboramiz;
- Mijozni Hamkor saytiga qaytaramiz;
- PM qolgan mablag'ni mijozga qaytaradi.
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
{
"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
{
"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
Parametr | Turi | Majburiylik | Tavsif |
---|---|---|---|
octo_shop_id | Integer | Ha | Do‘konning noyob identifikatori (do‘konning Shaxsiy kabinetida mavjud). |
octo_secret | String | Ha | Do‘konning Shaxsiy kabinetida yaratiladigan shaxsiy maxfiy kalit. Saytning xavfsiz hududida saqlanishi kerak. |
shop_transaction_id | String | Ha | Do‘kon tomonidagi tranzaksiya uchun noyob identifikator. Takroriy tranzaksiyalarni oldini olish uchun ishlatiladi. |
auto_capture | Bool | Ha | true bo‘lsa, Octo avtomatik ravishda xaridor hisobidan mablag‘ni chiqarishni tasdiqlaydi. false bo‘lsa, qo‘shimcha tasdiq talab etiladi. |
test | Bool | Ha | Test rejimi to‘lovi yoki yo‘qligini bildiradi. |
init_time | Datetime | Ha | To‘lov yaratilgan vaqt (yyyy-MM-dd HH:mm:ss formatida). |
user_data | Object | Yo‘q | Xaridor haqidagi ma’lumotlar. |
user_data.user_id | String | Ha | Do‘kon ma’lumotlar bazasidagi foydalanuvchi identifikatori. |
user_data.phone | String | Ha | Xaridor telefon raqami. |
user_data.email | String | Ha | Xaridor elektron pochtasi. |
total_sum | Double | Ha | To‘lovning yakuniy miqdori. |
currency | String | Ha | Valyuta: USD, UZS, RUB. |
description | String | Ha | Mahsulot yoki xizmat tavsifi. |
basket | Array | Ha | Savat haqidagi ma’lumotlar. |
basket.position_desc | String | Ha | Pozitsiya nomi. |
basket.count | Int | Ha | Pozitsiya soni. |
basket.price | Double | Ha | Pozitsiya narxi. |
basket.spic | String | Yo‘q | Pozitsiya haqidagi qo‘shimcha ma’lumotlar. |
payment_methods | Array | Yo‘q | To‘lov usullari (bank_card, uzcard, humo). |
payment_methods.method | String | Ha | To‘lov usuli nomi. |
tsp_id | Int | Yo‘q | Savdo va xizmat ko‘rsatish korxonasi identifikatori. |
return_url | String | Ha | Xaridor to‘lov tugagandan so‘ng yo‘naltiriladigan URL. URL noyob identifikatorni o‘z ichiga olishi kerak. |
notify_url | String | Yo‘q | Octo serveri tomonidan yuboriladigan bildirishnomalar uchun URL. Agar belgilangan bo‘lmasa, umumiy URL ishlatiladi. |
language | String | Ha | To‘lov sahifasi tili (oz - lotincha o‘zbek, uz - kirill o‘zbek, en - ingliz, ru - rus). |
ttl | Int | Yo‘q | To‘lov amal qilish muddati (daqiqalarda). |
Muvaffaqiyatli javob namuna
{
"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
Parametr | Turi | Majburiyligi | Tavsif |
---|---|---|---|
error | int | Ha (agar error=0 bo'lsa) | Xatolik kodi (0 — xatolik yo'q). |
data | object | Ha (agar error=0 bo'lsa) | To'lov haqidagi ma'lumotlarni o'z ichiga olgan asosiy obyekt. |
data.shop_transaction_id | string | Ha (agar error=0 bo'lsa) | Do'kon tomonidan berilgan tranzaksiyaning unikallik identifikatori. |
data.octo_payment_UUID | string | Ha (agar error=0 bo'lsa) | Octo tizimidagi to'lovning unikallik identifikatori. |
data.status | string | Ha (agar error=0 bo'lsa) | To'lov holati. |
data.octo_pay_url | string | Ha (agar error=0 bo'lsa) | Octo tizimida to'lovga o'tish uchun URL. |
data.refunded_sum | double | Yo'q | Qaytarilgan summa (agar qaytim bo'lsa). |
data.total_sum | double | Ha (agar error=0 bo'lsa) | To'lovning umumiy summasi. |
apiMessageForDevelopers | string | Yo'q | API tomonidan taqdim etilgan dasturchilar uchun xabar (muvaffaqiyatli holatda bo'sh bo'ladi). |
shop_transaction_id | string | Ha (agar error=0 bo'lsa) | data obyektidagi shop_transaction_id ning dublikati. |
octo_payment_UUID | string | Ha (agar error=0 bo'lsa) | data obyektidagi octo_payment_UUID ning dublikati. |
status | string | Ha (agar error=0 bo'lsa) | data obyektidagi status ning dublikati. |
octo_pay_url | string | Ha (agar error=0 bo'lsa) | data obyektidagi octo_pay_url ning dublikati. |
refunded_sum | double | Ha (agar error=0 bo'lsa) | data obyektidagi refunded_sum ning dublikati. |
total_sum | double | Ha (agar error=0 bo'lsa) | data obyektidagi total_sum ning dublikati. |
Muvaffaqiyatsiz javob namuna
{
"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
Parametr | Turi | Majburiyligi | Tavsif |
---|---|---|---|
error | int | Ha | Xatolik kodi (0 xatolik yo'qligini bildiradi). |
errMessage | string | Ha | Xatolik haqida xabar (agar xatolik sodir bo'lgan bo'lsa). |
data | object | Yo'q | Tranzaksiyaning asosiy ma'lumotlari (xatolik yuz berganda null bo'lishi mumkin). |
errorMessage | string | Ha | Xatolik haqida xabar (agar xatolik sodir bo'lgan bo'lsa). |
apiMessageForDevelopers | string | Yo'q | Texnik 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
{
"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
Parametr | Turi | Majburiylik | Tavsif |
---|---|---|---|
octo_shop_id | int | Ha | Do'konning Shaxsiy kabinetida mavjud do'konning noyob identifikatori. |
octo_secret | string | Ha | Do'konning maxfiy kaliti. |
octo_payment_UUID | string | Ha | OCTO tizimi tomonidan yaratilgan to'lovning noyob identifikatori. |
accept_status | string | Ha | Operatsiyani tasdiqlash holati: capture yoki cancel . |
final_amount | decimal | Ha | To'lovning yakuniy miqdori. |
Muvaffaqiyatli javob
{
"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
Parametr | Turi | Majburiylik | Tavsif |
---|---|---|---|
error | int | Ha | Xato kodi. 0 qiymati muvaffaqiyatli so'rovni anglatadi. |
data | object | Ha | To'lov haqida batafsil ma'lumotga ega ob'ekt. |
data.shop_transaction_id | string | Ha | Operatsiyaning do'kondagi noyob identifikatori. |
data.octo_payment_UUID | string | Ha | To'lovning Octo tizimidagi noyob identifikatori. |
data.status | string | Ha | To'lov holati (succeeded , failed , pending ). |
data.octo_pay_url | string | Ha | To'lovga yoki to'lov holatini ko'rish uchun URL. |
data.transfer_sum | float | Ha | Chegirmalar hisobga olingan o'tkazilgan pul miqdori. |
data.refunded_sum | float | Yo'q | Qaytarilgan pul miqdori. Agar qaytarish bo'lmasa, qiymat 0. |
data.total_sum | float | Ha | Dastlab so'ralgan to'lov miqdori. |
data.payed_time | string | Yo'q | YYYY-MM-DD HH:MM:SS formatida to'lovni muvaffaqiyatli yakunlash vaqti. |
apiMessageForDevelopers | string | Yo'q | API holati yoki o'zgarishlar haqida ishlab chiquvchilarga xabar. |
Muvaffaqiyatsiz javob
{
"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
Parametr | Turi | Majburiylik | Tavsif |
---|---|---|---|
error | int | Ha | Xato kodi. |
errMessage | string | Ha | Xato haqida xabar. |
data | object | Yo'q | Operatsiya haqida asosiy ma'lumot. |
errorMessage | string | Ha | Xato haqida xabar. |
apiMessageForDevelopers | string | Yo'q | Ishlab chiquvchilar uchun xabar. |
callback
- URL:
https://secure.octo.uz/callback
- Method:
POST
- Content-type:
application/json
Callback tasdiqlash summasi:
{
"octo_secret":"***",
"octo_payment_UUID":"0800a75f-1f50-4da8-9225-ae43028cbad1",
"accept_status":"capture",
"final_amount":437278.66
}
Parametr | Turi | Majburiy | Tavsif |
---|---|---|---|
octo_secret | String | Ha | Do‘konning shaxsiy maxfiy kaliti, do‘kon kabinetida generatsiya qilinadi. Xavfsiz hududda saqlanishi kerak |
octo_payment_UUID | String | Ha (error=0 bo‘lsa) | Octo tizimidagi noyob to‘lov identifikatori |
accept_status | String | Ha | Tasdiqlash holati, waiting_for_capture holatidagi tranzaksiyalar uchun majburiyQiymatlar: capture – to‘lovni tasdiqlashcancel – to‘lovni bekor qilish |
final_amount | Decimal | Yo‘q | Tasdiqlangan to‘lov summasi |
Callback javob strukturası:
{
"accept_status": "capture",
"final_amount": 1000.00
}
Parametr | Turi | Majburiy | Tavsif |
---|---|---|---|
accept_status | String | Ha | Tasdiqlash holati, waiting_for_capture holatidagi tranzaksiyalar uchun majburiyQiymatlar: capture – to‘lovni tasdiqlashcancel – to‘lovni bekor qilish |
final_amount | Decimal | Yo‘q | Tasdiqlangan 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.