Skip to content

To'lov oqimi

Payme to'lov tizimi bilan to'lov jarayonini tushunib oling.

To'lov jarayoniining umumiy ko'rinishi

To'lov jarayoni bir necha qadamlardan iborat:

  1. CheckPerformTransaction (ixtiyoriy, lekin tavsiya etiladi) - Buyurtmani tekshirish
  2. CreateTransaction - Buyurtma summasini qulflash
  3. PerformTransaction - To'lovni yakunlash
  4. CheckTransaction - Yakuniy holatni tekshirish

Tranzaktsiya Oqimi Ketma-ketligi

1-qadam: CheckPerformTransaction

Birinchi qadamda Payme to'lov mumkinligini tekshiradi.

SDKda

typescript
import { PaymeMerchant } from '@joyida/payme';

const payme = new PaymeMerchant({
  secretKey: 'your_secret_key'
});

const check = await payme.checkPerformTransaction({
  amount: 500000, // 5000 so'm
  account: { order_id: 'ORD-123' }
});

if (check.allow) {
  console.log('To\'lov mumkin');
} else {
  console.log('To\'lov mumkin emas');
}

Server tomon talablar

Sizning serveringiz:

  • Buyurtma/hisob mavjudligini tekshiring
  • Summa to'g'ri ekanligini tasdiqlang
  • Kerakli barcha tizimlar tayyorligini tekshiring

Xatolar:

  • -31001: Noto'g'ri summa
  • -31050 dan -31099 gacha: Hisob xatolari (masalan, hisob topilmadi)

2-qadam: CreateTransaction

To'lov tasdiqlangandan so'ng, Payme tranzaksiyani yaratadi.

SDKda

typescript
const created = await payme.createTransaction({
  id: '5305e3bab097f420a62ced0b', // Payme tranzaksiya ID
  time: Date.now(),                      // Unix vaqt (millisekundlarda)
  amount: 500000,                       // 5000 so'm
  account: { order_id: 'ORD-123' }
});

console.log('Tranzaksiya holati:', created.state); // 1 = yaratilgan
console.log('Ichki tranzaksiya ID:', created.transaction);

Server tomon talablar

Sizning serveringiz:

  • Tranzaksiyani doimiy xotirada saqlang
  • Buyurtma/hisob mavjudligini tekshiring
  • Summa to'g'ri ekanligini tasdiqlang
  • Buyurtmani qulflang (mijoz o'zgartira olmaydi)
  • Buyurtma holatini "to'lov kutmoqda" deb belgilang

Tranzaksiya holatlari:

  • 1: Yaratilgan (to'lov kutilmoqda)

Xatolar:

  • -31003: Tranzaksiya topilmadi
  • -31050 dan -31099 gacha: Hisob xatolari
  • -32400: Tizim xatosi

3-qadam: PerformTransaction

Tranzaksiya yaratilgandan so'ng, to'lov amalga oshiriladi.

SDKda

typescript
const performed = await payme.performTransaction({
  id: '5305e3bab097f420a62ced0b' // Payme tranzaksiya ID
});

console.log('Tranzaksiya holati:', performed.state); // 2 = tugallangan
console.log('Amalga oshirish vaqti:', performed.perform_time);

Server tomon talablar

Sizning serveringiz:

  • Pulni savdochi hisobiga o'tkazing
  • Buyurtmani "to'langan" deb belgilang
  • Tovar/xizmatlarni mijozga etkazib bering

Tranzaksiya holatlari:

  • 2: Tugallangan (to'langan)

Xatolar:

  • -31003: Tranzaksiya topilmadi
  • -31008: Amalga oshirib bo'lmaydi (noto'g'ri holat)
  • -31050 dan -31099 gacha: Hisob xatolari

4-qadam: CheckTransaction (ixtiyoriy)

Tranzaksiya holatini tekshirishingiz mumkin.

SDKda

typescript
const status = await payme.checkTransaction({
  id: '5305e3bab097f420a62ced0b'
});

console.log('Yaratilgan vaqti:', status.create_time);
console.log('Amalga oshirilgan vaqti:', status.perform_time);
console.log('Bekor qilingan vaqti:', status.cancel_time);
console.log('Holati:', status.state);
console.log('Sababi:', status.reason);

Tranzaksiya holatlari

HolatQiymatTushuntirish
Yaratilgan1To'lov kutilmoqda
Tugallangan2To'lov amalga oshirildi
Bekor qilingan (avval)-1To'lovdan oldin bekor qilindi
Bekor qilingan (keyin)-2To'lovdan keyin bekor qilindi (qaytarildi)

5-qadam: CancelTransaction (ixtiyoriy)

Agar kerak bo'lsa, tranzaksiyani bekor qilishingiz mumkin.

SDKda

typescript
const cancelled = await payme.cancelTransaction({
  id: '5305e3bab097f420a62ced0b',
  reason: 4 // Vaqt tugadi
});

console.log('Tranzaksiya holati:', cancelled.state);
console.log('Bekor qilingan vaqti:', cancelled.cancel_time);

Bekor qilish sabablari

SababQiymatTushuntirish
Qabul qiluvchi topilmadi1Oluvchi topilmadi
Debet xatosi2Debet xatosi
Ijro xatosi3Ijro xatosi
Vaqt tugadi4Vaqt tugadi
Qaytarish5Qaytarish so'raldi
Noma'lum10Noma'lum sabab

Server tomon talablar

Sizning serveringiz:

  • Buyurtma zaxirasini bekor qiling
  • Inventarni tiklang
  • Agar holat 2 (tugallangan) bo'lsa, qaytarish jarayonini boshlang
  • Tovar/xizmatlar allaqachon etkazib berilgan bo'lsa, bekor qilmaslik (xato -31007)

GetStatement (majburiy)

GetStatement usuli savdogar va Payme o'rtasida hisoblash uchun majburiy.

SDKda

typescript
const statement = await payme.getStatement({
  from: Date.now() - 86400000, // 24 soat oldin
  to: Date.now()                // Hozir
});

console.log('Tranzaksiyalar soni:', statement.transactions.length);

statement.transactions.forEach(tx => {
  console.log('ID:', tx.id);
  console.log('Summa:', tx.amount);
  console.log('Holat:', tx.state);
});

Server tomon talablar

Sizning serveringiz:

  • Tranzaksiyalarni Paymedagi yaratilish vaqti bo'yicha qidiring (CreateTransaction)
  • Faqat CreateTransaction muvaffaqiyatli bo'lgan tranzaksiyalarni qo'shing
  • from <= time <= to (shu jumladan) tranzaksiyalarni qo'shing
  • Tranzaksiyalarni create_time bo'yicha o'sish tartibida saralang
  • Agar tranzaksiya topilmasa, bo'sh massivni qaytaring

Xatolarni hal qilish

Tranzaksiya allaqachon mavjud (-31006)

Bu xato ikki marotaba bir xil tranzaksiya ID bilan CreateTransaction chaqirilganda sodir bo'ladi.

Yechim: Tranzaksiya allaqachon yaratilgan bo'lsa, mavjud tranzaksiyani qaytaring.

Buyurtma allaqachon to'langan (-31055)

Bu xato allaqachon to'langan buyurtma uchun to'lovni qayta ishlashga urinishda sodir bo'ladi.

Yechim: Avval CheckTransaction bilan holatni tekshiring.

typescript
const status = await payme.checkTransaction({
  id: '5305e3bab097f420a62ced0b'
});

if (status.state === 2) {
  console.log('Allaqachon to\'langan');
  return;
}

Buyurtma topilmadi (-31050)

Bu xato buyurtma/hisob tizimingizda topilmaganini bildiradi.

Yechim: Hisobni tekshiring va to'g'ri hisob parametrlarini taqdim eting.

To'liq misol

typescript
import { PaymeMerchant } from '@joyida/payme';

const payme = new PaymeMerchant({
  secretKey: process.env.PAYME_SECRET_KEY!
});

// 1-qadam: To'lov mumkinligini tekshirish
const check = await payme.checkPerformTransaction({
  amount: 500000,
  account: { order_id: 'ORD-123' }
});

if (!check.allow) {
  console.log('To\'lov mumkin emas');
  return;
}

// 2-qadam: Tranzaksiya yaratish
const created = await payme.createTransaction({
  id: '5305e3bab097f420a62ced0b',
  time: Date.now(),
  amount: 500000,
  account: { order_id: 'ORD-123' }
});

console.log('Tranzaksiya yaratildi:', created.transaction);

// 3-qadam: Tranzaksiyani amalga oshirish
const performed = await payme.performTransaction({
  id: '5305e3bab097f420a62ced0b'
});

console.log('To\'lov amalga oshirildi:', performed.perform_time);

// 4-qadam: Tranzaksiya holatini tekshirish (ixtiyoriy)
const status = await payme.checkTransaction({
  id: '5305e3bab097f420a62ced0b'
});

console.log('Tranzaksiya holati:', status.state); // 2 = tugallangan

MIT Lizenziyasi ostida chiqarilgan.