Skip to content

Bank kartalarini tokenlashtirish

Tokenlashtirish - bu Hamkor uchun foydalanuvchidan karta ma'lumotlarini bir marta so'rashga va keyin ushbu ma'lumotlarni OCTO-ning xavfsiz manbalarda saqlashga imkon beradigan mexanizmdir va bu ma'lumotlar noyob kalitga - tokenga almashtiriladi. Ushbu token Savdogar serverlarida saqlanishi mumkin va keyingi xaridlarni boshlash uchun xaridorning hisobiga ulanishi mumkin, bunda OCTO-ga faqat Token uzatiladi va foydalanuvchidan karta ma'lumotlari qayta so'ralmaydi, faqat kartaning orqa tomonidagi uch qiymatli CVV2/CVC2 xavfsizlik kodi so'raladi.

Muhim!

Karta tokenizatsiyasining yakuniy holati haqida bildirishnoma yuborish OCTO PS tomonidan (callback) hamkor tomonidan bind_notify_url parametrida ko'rsatilgan manzilga bind_card usuli yordamida POST so'rovi orqali amalga oshiriladi.

Karta tokenini bloklash.

Bank kartasi chiqarilgan tokenini bloklash uchun hamkor serveridan /block_card_token so'rov yuborilishi kerak.

Humo/Uzcard tokenlashtirish algoritmi:

  1. Mijoz kartani tokenlashtirishni boshlaydi.
  2. Hamkor kartalarni bog'lash usulini chaqiradi bind_card.
  3. Bizning backend Humo/Uzcard-ga karta ma'lumotlarini tekshirish uchun so'rovnoma yuboradi.
  4. Humo/Uzcard tasdiqlaydi.
  5. Bizning backend Hamkor uchun buni tasdiqlaydi.
  6. Hamkor OTP verificationInfo amal qilish muddatini olish usulini chaqiradi.
  7. Bizning backend Hamkor uchun buni tasdiqlaydi.
  8. Humo/Uzcard OTP kodini mijozga yuboradi.
  9. Mijoz OTP kodini Hamkorga yuboradi.
  10. Hamkor kodni tekshirish usulini chaqiradi /bind_card/check_sms.
  11. Bizning backend kodni Humo/Uzcard-ga yuboradi.
  12. Humo/Uzcard hisobdan chiqarishni tasdiqlaydi.
  13. Bizning backend Hamkorga xabarnoma yuboradi.
  14. Bizning backend Humo/Uzcard-ga mablag'ni qaytarish so'rovnomasini yuboradi.
  15. Humo/Uzcard mablag' hisobga kiritilganini tasdiqlaydi.
  16. Bizning BE hamkorni callback orqali holatdan xabardor qiladi.
  17. Bizning backend Hamkorga token yuboradi.
  18. Hamkor qabul qilinganligini tasdiqlaydi.

Eslatma

Agar Hamkor qabul qilinganligini tasdiqlamasa, bizning backend yana uchta takroriy so'rovnoma yuboradi. Agar barcha so'rovnomalardan keyin tasdiqlanmasa, token bekor qilinadi.


Логотип

Tokenizatsiya Humo/Uzcard

Visa/MC Tokenizatsiya Algoritmi

  1. Mijoz karta tokenizatsiyasini boshlaydi.
  2. Hamkor kartani bog‘lash metodini chaqiradi bind_card.
  3. Bizning backend (BE) Visa/MC’ga karta ma'lumotlarini tekshirish va test tranzaksiyasini amalga oshirish uchun so‘rov yuboradi.
  4. Visa/MC ma'lumotlarni tasdiqlaydi va OTP kodini kiritish formasi havolasini taqdim etadi.
  5. Visa/MC mijozga OTP kodini yuboradi.
  6. Mijoz OTP kodini kiritadi.
  7. Visa/MC tranzaksiyani tasdiqlaydi.
  8. Bizning BE hamkorni xabardor qiladi.
  9. Bizning BE Visa/MC’ga qaytarish so‘rovini yuboradi.
  10. Visa/MC qaytarishni tasdiqlaydi.
  11. Bizning BE hamkorga holat bo‘yicha callback yuboradi.
  12. Bizning BE hamkorga token yuboradi.
  13. Hamkor qabul qilinganligini tasdiqlaydi.

Eslatma

Agar hamkor qabul qilinganligini tasdiqlamasa, bizning BE so‘rovni uch marta qayta yuboradi. Agar javob bo‘lmasa, token bekor qilinadi.

*BE - Back End

Logotip

Visa/MC tokenizatsiyasi

Metodlar

bind_card

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

So'rovnoma

json
{
    "octo_shop_id": "{{merchant_id}}",
    "octo_secret": "{{merchant_secret}}",
    "shop_transaction_id": "{{$randomUUID}}",
    "pan": "9860240101226506",
    "exp": "2805",
    "phone": "998901234567",
    "cardHolderName": "Card Holder Name",
    "cvc2": "",
    "method": "humo",
    "return_url": "https://notify-url.uz",
    "notify_url": "https://notify-url.uz",
    "bind_notify_url": "https://notify-url.uz"
}

Parametrlar tavsifi

ParametrTuriMajburiylikTavsif
octo_shop_idIntegerHaDo'konning noyob identifikatori (do'konning Shaxsiy kabinetida mavjud).
octo_secretStringHaDo'konning maxfiy kaliti. Himoyalangan hududda saqlanishi kerak.
shop_transaction_idStringHaOperatsiyaning do'kon tarafidagi noyob identifikatori.
panStringHaOperatsiyani amalga oshirish uchun mijozning karta raqami.
expStringHayyyy-MM formatidagi kartaning amal qilish muddati.
phoneStringHaMijozning kartaga bog'langan telefon raqami.
cardHolderNameStringHaKarta egasining ismi (kartada ko'rsatilganidek).
cvc2StringYo'qKarta xavfsizlik kodi.
methodStringHaOperatsiya uchun to'lov usuli: humo, uzcard, bank_card.
return_urlStringHaFoydalanuvchi yo'naltiriladigan URL.
notify_urlStringYo'qTo'lov holati haqida xabarnomalar yuboriladigan URL.
bind_notify_urlStringYo'qMuvaffaqiyatli operatsiyalarda xabar yuboriladigan URL.

Muvaffaqiyatli javob

json
{
    "error": 0,
    "data": {
        "shop_transaction_id": "123431321323334132333",
        "octo_payment_UUID": "06000144-db56-47b6-9eba-021ad4ff246b",
        "status": "created",
        "octo_pay_url": "https://pay-dev.octo.uz/uzcard/sms/06000144-db56-47b6-9eba-021ad4ff246b",
        "refunded_sum": 0,
        "total_sum": 1000
    },
    "apiMessageForDevelopers": "errorMessage maydoni eskirgan, javoblarni unifikatsiya qilish uchun errMessage-ga o'tishni so'raymiz. Iltimos, shuni yodda tutingki, kelajakda error и errMessage-dan tashqari barcha maydonlar data-ga yuboriladi. Batafsil ma'lumot olish uchun xizmatning texnik yordamiga murojaat qiling",
    "shop_transaction_id": "123431321323334132333",
    "octo_payment_UUID": "06000144-db56-47b6-9eba-021ad4ff246b",
    "status": "created",
    "octo_pay_url": "https://pay-dev.octo.uz/uzcard/sms/06000144-db56-47b6-9eba-021ad4ff246b",
    "refunded_sum": 0,
    "total_sum": 1000
}

Javob parametrlarining tavsifi

ParametrTuriMajburiylikTavsif
errorIntegerHaXato kodi. 0 qiymati muvaffaqiyatli operatsiyani anglatadi.
dataObjectHaOperatsiya haqida batafsil ma'lumotga ega ob'ekt.
shop_transaction_idStringHaOperatsiyaning do'kon tarafidagi noyob identifikatori.
octo_payment_UUIDStringHaOCTO tizimi tomonidan yaratilgan noyob to'lov identifikatori.
statusStringHaTo'lov holati: created, succeeded, failed va boshqalar.
octo_pay_urlStringHaTo'lovni amalga oshirish uchun URL.
refunded_sumNumberHaQaytarma miqdori. Agar qaytarish amalga oshirilmagan bo'lsa, 0.
total_sumNumberHaOperatsiyaning umumiy miqdori.
apiMessageForDevelopersStringYo'qAPI-dagi mumkin bo'lgan o'zgarishlar haqida ishlab chiquvchilarga xabar.

Muvaffaqiyatsiz javob

json
{
    "error": 20,
    "errMessage": "Active or pending token already exists",
    "data": null,
    "errorMessage": "Active or pending token already exists",
    "apiMessageForDevelopers": "errorMessage maydoni eskirgan, javoblarni unifikatsiya qilish uchun errMessage-ga o'tishni so'raymiz. Iltimos, shuni yodda tutingki, kelajakda error и errMessage-dan tashqari barcha maydonlar data-ga yuboriladi. Batafsil ma'lumot olish uchun xizmatning texnik yordamiga murojaat qiling"
}

verificationInfo

  • URL: https://secure.octo.uz/verificationInfo/{octo_payment_UUID}
  • Method: POST
  • Content-type: application/json

So'rovnoma

Muhim!

Faqat octo_payment_UUID jo'natiladi.

Muvaffaqiyatli javob

json
{
  "error": 0,             // Xato kodi: 0 xatolar yo'qligini anglatadi.
  "errMessage": "",      // Xato haqida xabar, agar xato bo'lmasa, bo'sh qoladi.
  "data": {
    "verifyId": 819,      // Verifikatsiya jarayonining noyob identifikatori.
    "phone": "+998** *****33",  // Verifikatsiya bog'langan telefon raqami (xavfsizlik uchun qisman yashiringan).
    "secondsLeft": 221     // Verifikatsiya amal qilish muddati tugashigacha qolgan vaqt (soniyalarda)
  }
}

Parametrlar tavsifi

ParametrTuriMajburiylikTavsif
errorintHaXato kodi: 0 xatolar yo'qligini anglatadi.
errMessagestringYo'qXato haqida xabar, agar xato bo'lmasa, bo'sh qoladi.
dataobjectHaVerifikatsiya jarayonining tafsilotlariga ega ob'ekt.
verifyIdintHaVerifikatsiya jarayonining noyob identifikatori.
phonestringHaVerifikatsiya bog'langan telefon raqami.
secondsLeftintHaVerifikatsiya amal qilish muddati tugashigacha qolgan vaqt (soniyalarda).

Muvaffaqiyatsiz javob

json
{
  "error": 0,             // Xato kodi: 0 xatolar yo'qligini anglatadi.
  "errMessage": "",      // Xato haqida xabar, agar xato bo'lmasa, bo'sh qoladi.
  "data": {
    "verifyId": 819,      // Verifikatsiya jarayonining noyob identifikatori.
    "phone": "+998** *****33",  // Verifikatsiya bog'langan telefon raqami (xavfsizlik uchun qisman yashiringan).
    "secondsLeft": 0       // Verifikatsiya amal qilish muddati tugashigacha qolgan vaqt (soniyalarda). Muvaffaqiyatsiz javob bo'lsa, u 0 qiymati bilan qolaveradi.
  }
}

Muhim!

verificationInfo muvaffaqiyatsiz javobini bersa, siz muvaffaqiyatli javobdagidek javob olasiz, ammo secondsLeft parametrida 0 bo'ladi.

Parametrlar tavsifi

ParametrTuriMajburiylikTavsif
errorintHaXato kodi (0 xatolar mavjud emasligini bildiradi).
errMessagestringYo'qXato haqida xabar (xato sodir bo'lganda).
dataobjectHaVerifikatsiya jarayonining tafsilotlariga ega ob'ekt.
verifyIdintHaVerifikatsiya jarayonining noyob identifikatori.
phonestringHaVerifikatsiya bog'langan telefon raqami.
secondsLeftintHaVerifikatsiya amal qilish muddati tugashigacha qolgan vaqt (soniyalarda).

Muhim!

Agar secondsLeft=0 bo‘lsa, demak, tekshirish vaqti tugagan yoki tekshirish jarayoni faol emas. Integratsiya bo‘yicha savollaringiz bo‘lsa, Octo xizmatining texnik qo‘llab-quvvatlashiga murojaat qiling.


bind_card/check_sms_key

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

So'rovnoma

json
{
    "octo_shop_id": "{{merchant_id}}",                 // Do'konning noyob identifikatori (Savdogarning Shaxsiy kabinetida mavjud).
    "octo_secret": "{{merchant_secret}}",         // Savdogarning Shaxsiy kabinetida yaratiladigan do'konning shaxsiy maxfiy kaliti. Do'kon veb-saytining xavfsiz, kirish mumkin bo'lmagan hududida saqlanishi kerak.  
    "smsKey": "61135",                            // Kartaga bog'langan telefon raqamiga yuboriladigan SMS-kod.
    "paymentUUID": "{{bind_octo_payment_UUID}}",  // Karta bog'lash operatsiyasinig noyob identifikatori.
    "verifyId": "{{bind_verifyId}}"                 // Karta bog'langanligini tasdiqlash uchun identifikator.
}

Parametrlar tavsifi

ParametrTuriMajburiylikTavsif
octo_shop_idIntegerHaDo'konning noyob identifikatori (Savdogarning Shaxsiy kabinetida mavjud).
octo_secretStringHaSavdogarning Shaxsiy kabinetida yaratiladigan do'konning shaxsiy maxfiy kaliti. Himoyalangan bo'lishi kerak.
smsKeyStringHaOperatsiyani tasdiqlash uchun karta bilan bog'langan telefonga yuborilgan SMS-kod.
paymentUUIDStringHaKarta bog'lash operatsiyasining noyob identifikatori.
verifyIdIntegerHaKarta bog'langanligini tasdiqlash uchun identifikator.

Muvaffaqiyatli javob

json
{
    "error": 0,
    "data": {
        "shop_transaction_id": "123431321323334132333",
        "octo_payment_UUID": "06000144-db56-47b6-9eba-021ad4ff246b",
        "status": "succeeded",
        "octo_pay_url": "https://pay-dev.octo.uz/status/06000144-db56-47b6-9eba-021ad4ff246b",
        "processor_key": "023205044087",
        "processing_reference": "1735210612392_71229",
        "transfer_sum": 980.0000,
        "refunded_sum": 1000.00,
        "total_sum": 1000.00,
        "payed_time": "2024-12-26 15:56:52",
        "first6": "860050",
        "last4": "2744"
    },
    "apiMessageForDevelopers": "errorMessage maydoni eskirgan, javoblarni unifikatsiya qilish uchun errMessage-ga o'tishni so'raymiz. Iltimos, shuni yodda tutingki, kelajakda error и errMessage-dan tashqari barcha maydonlar data-ga yuboriladi. Batafsil ma'lumot olish uchun xizmatning texnik yordamiga murojaat qiling",
    "shop_transaction_id": "123431321323334132333",
    "octo_payment_UUID": "06000144-db56-47b6-9eba-021ad4ff246b",
    "status": "succeeded",
    "octo_pay_url": "https://pay-dev.octo.uz/status/06000144-db56-47b6-9eba-021ad4ff246b",
    "processor_key": "023205044087",
    "processing_reference": "1735210612392_71229",
    "transfer_sum": 980.0000,
    "refunded_sum": 1000.00,
    "total_sum": 1000.00,
    "payed_time": "2024-12-26 15:56:52"
}

Javob parametrlari tavsifi

ParametrTuriMajburiylikTavsif
errorIntegerHaXato kodi. 0 qiymati operatsiyaning muvaffaqiyatli bajarilganligini anglatadi.
dataObjectHaTo'lov tafsilotlarini o'z ichiga olgan javob ma'lumotlari.
shop_transaction_idStringHaDo'kon tarafidagi tranzaksiyaning noyob identifikatori.
octo_payment_UUIDStringHaOCTO tizimi tomonidan yaratilgan noyob to'lov identifikatori.
statusStringHaTo'lovning joriy holati (succeeded, failed, created va hokazo).
octo_pay_urlStringHaTo'lov holatini tekshirish yoki olish uchun URL.
processor_keyStringYo'qOperatsiyani identifikatsiya qilish uchun noyob protsessor kaliti.
processing_referenceStringYo'qTo'lovlarga qayta ishlash tizimidagi operatsiyaga havola.
transfer_sumDecimalYo'qKomissiyalar chegirib tashlanganidan keyin oluvchiga o'tkazilgan qiymat.
refunded_sumDecimalYo'qQaytarish natijasida foydalanuvchiga qaytarilgan qiymat.
total_sumDecimalHaOperatsiyaning to'liq qiymati.
payed_timeStringYo'qYYYY-MM-DD HH:MM:SS formatida to'lovni yakunlash sanasi va vaqti.
first6StringYo'qTo'lov uchun ishlatilgan karta raqamining dastlabki 6 raqami.
last4StringYo'qTo'lov uchun ishlatilgan karta raqamining oxirgi 4 raqami.
apiMessageForDevelopersStringYo'qO'z ichiga kelajakda API o'zgarishi haqida qo'shimcha tafsilotlar yoki bildirishlarni olgan ishlab chiquvchilar uchun xabar.

Muvaffaqiyatsiz javob

json
{
    "title": "Serverning ichki xatosi",
    "status": 500,
    "detail": "Cannot invoke \"com.octo.uzcard.dto.CardInfo.getCardtype()\" because the return value of \"com.octo.uzcard.dto.CardNewVerifyResponse.getResult()\" is null"
}

callback

So'rovnoma

json
{
    "shop_transaction_id": "d87f4hd8d76f4h58d",
    "pan": "4276380012341025",
    "exp": "2006",
    "cardHolderName": "BOB MARLEY",
    "card_token": "sdf9g87sd6f9g876sdf9g876sdf98g",
    "status": "active"
}

So'rov Parametrlari

ParametrTurMajburiylikTavsif
shop_transaction_idStringHaDo'kondagi tranzaksiyaning noyob identifikatori.
panStringHaAsl PAN (karta raqami).
expStringHaKartaning amal qilish muddati YYMM formatida.
cardHolderNameStringHaKarta egasining ismi.
card_tokenStringHaKarta bog'langandan so'ng olingan token.
statusStringHaKartaning holati: active (muvaffaqiyatli bog'langan) yoki failed (bog'lanish muvaffaqiyatsiz).

Kutilgan Javob - HTTP Status: 200

Muhim!

  • Agar javob muvaffaqiyatli bo'lsa, OCTO tizimi so'rovni qayta ishlangan deb hisoblaydi.
  • Agar javob muvaffaqiyatsiz bo'lsa, OCTO tizimi so'rovni uch marta takrorlaydi.
  • Uch marta urinishdan keyin muvaffaqiyatli javob olinmasa, OCTO so'rov yuborishni to'xtatadi va tokenni bekor qiladi.

Muvaffaqiyatli javob - HTTP Status: 200

json
{
    "status": "success",
    "message": "Callback processed successfully"
}

Muvaffaqiyatsiz javob - HTTP Status: 400 va yuqori

json
{
    "status": "error",
    "message": "Invalid shop_transaction_id"
}

block_card_token

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

So'rovnoma

json
{
    "octo_shop_id": 242,
    "octo_secret": "1d45df74-bb95-47cf-a616-8d6dcee2e10d",
    "card_token": "sdf9g87sd6f9g876sdf9g876sdf98g"
}

So'rovning parametrlari tavsifi

ParametrTurMajburiylikTavsif
octo_shop_idIntegerHaOcto tizimidagi do'konning noyob identifikatori.
octo_secretStringHaSo'rovlarni autentifikatsiya qilish uchun maxfiy kalit.
card_tokenStringHaTo'lovni amalga oshirish uchun ishlatiladigan karta tokeni.

Muvaffaqiyatli javob

json
{
    "error": 0,
    "errMessage": null,
    "status": "blocked"
}

Javob parametrlari

ParametrTurMajburiylikTavsif
errorIntegerHaXato kodi. 0 xatolik yo'qligini bildiradi.
errMessageStringYo'qXato haqida xabar, agar mavjud bo'lsa.
statusStringHaOperatsiya holati. Masalan, blocked.

Xato Kodlari

KodTavsif
0Xatolik yo'q.
1Ma'lumotlar formati xatosi.
2Autentifikatsiya xatosi.
4Xizmatning ichki xatosi.
5Token topilmadi.
6Token active holatda emas edi.

Token Holatlari

HolatTavsif
activeTo'lov uchun tayyor.
blockedBloklangan.
initKarta autentifikatsiya jarayonida.
failedAutentifikatsiya muvaffaqiyatsiz tugadi.