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:
- CheckPerformTransaction (ixtiyoriy, lekin tavsiya etiladi) - Buyurtmani tekshirish
- CreateTransaction - Buyurtma summasini qulflash
- PerformTransaction - To'lovni yakunlash
- CheckTransaction - Yakuniy holatni tekshirish
Tranzaktsiya Oqimi Ketma-ketligi
1-qadam: CheckPerformTransaction
Birinchi qadamda Payme to'lov mumkinligini tekshiradi.
SDKda
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-31050dan-31099gacha: Hisob xatolari (masalan, hisob topilmadi)
2-qadam: CreateTransaction
To'lov tasdiqlangandan so'ng, Payme tranzaksiyani yaratadi.
SDKda
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-31050dan-31099gacha: Hisob xatolari-32400: Tizim xatosi
3-qadam: PerformTransaction
Tranzaksiya yaratilgandan so'ng, to'lov amalga oshiriladi.
SDKda
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)-31050dan-31099gacha: Hisob xatolari
4-qadam: CheckTransaction (ixtiyoriy)
Tranzaksiya holatini tekshirishingiz mumkin.
SDKda
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
| Holat | Qiymat | Tushuntirish |
|---|---|---|
| Yaratilgan | 1 | To'lov kutilmoqda |
| Tugallangan | 2 | To'lov amalga oshirildi |
| Bekor qilingan (avval) | -1 | To'lovdan oldin bekor qilindi |
| Bekor qilingan (keyin) | -2 | To'lovdan keyin bekor qilindi (qaytarildi) |
5-qadam: CancelTransaction (ixtiyoriy)
Agar kerak bo'lsa, tranzaksiyani bekor qilishingiz mumkin.
SDKda
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
| Sabab | Qiymat | Tushuntirish |
|---|---|---|
| Qabul qiluvchi topilmadi | 1 | Oluvchi topilmadi |
| Debet xatosi | 2 | Debet xatosi |
| Ijro xatosi | 3 | Ijro xatosi |
| Vaqt tugadi | 4 | Vaqt tugadi |
| Qaytarish | 5 | Qaytarish so'raldi |
| Noma'lum | 10 | Noma'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
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_timebo'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.
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
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