Chek boshqaruvi
Subscribe API orqali cheklarni boshqarishni o'rganing.
Subscribe API chek usullari
1. receipts.create
Chek yaratish uchun ishlatiladi.
import { PaymeSubscribe } from '@joyida/payme';
const subscribeServer = new PaymeSubscribe({
merchantId: 'your_merchant_id',
password: 'your_password'
}, 'server');
const receipt = await subscribeServer.receiptsCreate({
amount: 500000, // 5000 so'm
account: { user_id: 'user_123' }
});
console.log('Chek ID:', receipt.receipt._id);
console.log('Yaratilgan vaqti:', receipt.receipt.create_time);
console.log('Holati:', receipt.receipt.state); // 0 = kutmoqdaParametrlar:
amount: Chek summasi (tiyinda)account: Hisob ma'lumotlaridescription: Ixtiyoriy tavsifdetail: Ixtiyoriy batafsil ma'lumotlar
2. receipts.pay
Chekni token bilan to'lash uchun ishlatiladi.
const paid = await subscribeServer.receiptsPay({
id: receipt.receipt._id,
token: 'saved_card_token'
});
console.log('Chek holati:', paid.receipt.state); // 1 = to'langanParametrlar:
id: Chek IDtoken: Karta tokeni
3. receipts.send
Chek invitisini SMS orqali yuborish uchun ishlatiladi.
const sent = await subscribeServer.receiptsSend({
id: receipt.receipt._id,
phone: '998901234567'
});
console.log('SMS yuborildi:', sent.success);Parametrlar:
id: Chek IDphone: Telefon raqami (998XXXXXXXXX formati)
4. receipts.cancel
Chekni bekor qilish uchun ishlatiladi.
const cancelled = await subscribeServer.receiptsCancel({
id: receipt.receipt._id
});
console.log('Bekor qilingan vaqti:', cancelled.receipt.cancel_time);
console.log('Holati:', cancelled.receipt.state); // 2 = bekor qilinganParametrlar:
id: Chek ID
5. receipts.check
Chek holatini tekshirish uchun ishlatiladi.
const status = await subscribeServer.receiptsCheck({
id: receipt.receipt._id
});
console.log('Chek holati:', status.state);Chek holatlari:
| Holat | Qiymat | Tushuntirish |
|---|---|---|
| Kutmoqda | 0 | To'lov kutilmoqda |
| To'langan | 1 | To'lov amalga oshirildi |
| Bekor qilingan | 2 | Chek bekor qilindi |
| To'lovdan keyin bekor qilingan | 3 | To'lovdan keyin bekor qilindi (qaytarildi) |
6. receipts.get
Chek to'liq ma'lumotlarini olish uchun ishlatiladi.
const receiptDetails = await subscribeServer.receiptsGet({
id: receipt.receipt._id
});
console.log('Summa:', receiptDetails.receipt.amount);
console.log('Karta:', receiptDetails.receipt.card);
console.log('Tavsif:', receiptDetails.receipt.description);
console.log('Savdogar:', receiptDetails.receipt.merchant);7. receipts.get_all
Vaqt orqali barcha cheklarni olish uchun ishlatiladi.
const receipts = await subscribeServer.receiptsGetAll({
from: Date.now() - 86400000, // 24 soat oldin
to: Date.now(), // Hozir
limit: 50 // Maksimum 50 ta
});
console.log('Cheklar soni:', receipts.receipts.length);
receipts.receipts.forEach(receipt => {
console.log('ID:', receipt._id);
console.log('Summa:', receipt.amount);
console.log('Holati:', receipt.state);
});Parametrlar:
from: Boshlang'ich vaqt (Unix vaqt, millisekundlarda)to: Tugash vaqt (Unix vaqt, millisekundlarda)offset: Sahifalash ofseti (ixtiyoriy)limit: Maksimal cheklar soni (ixtiyoriy)
Chek batafsil ma'lumotlari
Chek batafsil ma'lumotlarini detail parametri orqali qo'shishingiz mumkin.
const receipt = await subscribeServer.receiptsCreate({
amount: 500000,
account: { order_id: 'ORD-123' },
detail: {
receipt_type: 1,
shipping: {
title: 'Yetkazib berish',
price: 50000
},
items: [
{
title: 'Mahsulot 1',
price: 225000,
count: 1,
code: 'PROD001',
units: 1,
vat_percent: 12,
package_code: 'PKG001'
},
{
title: 'Mahsulot 2',
price: 225000,
count: 1,
code: 'PROD002',
units: 1,
vat_percent: 12,
package_code: 'PKG002'
}
]
}
});Detail tuzilmasi:
receipt_type: Chek turishipping: Yetkazib berish ma'lumotlari (ixtiyoriy)items: Mahsulotlar ro'yxati
Item tuzilmasi:
title: Mahsulot nomiprice: Narxi (tiyinda)count: Sonicode: Mahsulot kodiunits: Birliklar (ixtiyoriy)vat_percent: QQS foizipackage_code: Paket kodi
To'liq chek oqimi
import { PaymeSubscribe } from '@joyida/payme';
const subscribeServer = new PaymeSubscribe({
merchantId: process.env.PAYME_MERCHANT_ID!,
password: process.env.PAYME_PASSWORD!
}, 'server');
// 1. Chek yaratish
const receipt = await subscribeServer.receiptsCreate({
amount: 500000,
account: { user_id: 'user_123' },
description: 'Buyurtma #123'
});
console.log('Chek yaratildi:', receipt.receipt._id);
// 2. Chek holatini tekshirish
const status = await subscribeServer.receiptsCheck({
id: receipt.receipt._id
});
console.log('Chek holati:', status.state); // 0 = kutmoqda
// 3. Chekni token bilan to'lash
const paid = await subscribeServer.receiptsPay({
id: receipt.receipt._id,
token: 'saved_card_token'
});
console.log('To\'lov amalga oshirildi:', paid.receipt.state); // 1 = to'langan
// 4. Chek tafsilotlarini olish
const details = await subscribeServer.receiptsGet({
id: receipt.receipt._id
});
console.log('To\'liq chek ma\'lumotlari:', details.receipt);
// 5. Chek invitisini SMS yuborish (ixtiyoriy)
const sent = await subscribeServer.receiptsSend({
id: receipt.receipt._id,
phone: '998901234567'
});
console.log('SMS yuborildi:', sent.success);Umumiy xatolar
Chek topilmadi (-31400)
Bu xato chek ID bilan chek topilmaganini bildiradi.
Yechim: Chek ID ni tekshiring.
try {
const receipt = await subscribeServer.receiptsGet({
id: receiptId
});
} catch (error) {
if (error instanceof PaymeError && error.code === -31400) {
console.log('Chek topilmadi');
// Chek ID ni tekshiring
}
}Chek allaqachon to'langan (-31401)
Bu xato chek allaqachon to'langanini bildiradi.
Yechim: Chek holatini tekshiring.
const status = await subscribeServer.receiptsCheck({
id: receipt.receipt._id
});
if (status.state === 1) {
console.log('Chek allaqachon to\'langan');
return;
}Chek allaqachon bekor qilingan (-31402)
Bu xato chek allaqachon bekor qilinganini bildiradi.
Yechim: Yangi chek yarating.
try {
const paid = await subscribeServer.receiptsPay({
id: receipt.receipt._id,
token: token
});
} catch (error) {
if (error instanceof PaymeError && error.code === -31402) {
console.log('Chek allaqachon bekor qilingan');
// Yangi chek yarating
}
}Noto'g'ri chek holati (-31403)
Bu xato chek holati berilgan amaliyot uchun yaroqsiz ekanligini bildiradi.
Yechim: Chek holatini tekshiring va to'g'ri amaliyotni bajaring.
const status = await subscribeServer.receiptsCheck({
id: receipt.receipt._id
});
console.log('Hozirgi holat:', status.state);
if (status.state === 0) {
// Chekni to'lash mumkin
await subscribeServer.receiptsPay({ id, token });
} else if (status.state === 2) {
// Chek bekor qilingan, yangi yarating
console.log('Chek bekor qilingan');
}Chek muddati o'tgan (-31404)
Bu xato chek muddati o'tganini bildiradi.
Yechim: Yangi chek yarating.
Chekni bekor qilish
Chekni bekor qilish uchun:
async function cancelReceipt(receiptId: string) {
try {
const cancelled = await subscribeServer.receiptsCancel({
id: receiptId
});
console.log('Chek bekor qilindi');
console.log('Bekor qilingan vaqti:', cancelled.receipt.cancel_time);
// Mahsulot zaxirasini tiklang
await restoreInventory(receiptId);
} catch (error) {
if (error instanceof PaymeError) {
switch (error.code) {
case -31400:
console.log('Chek topilmadi');
break;
case -31402:
console.log('Chek allaqachon bekor qilingan');
break;
default:
console.log('Xato:', error.message);
}
}
}
}Cheklar hisoboti
Vaqt orqali cheklar hisobotini olish:
async function getReceiptsReport(
startDate: Date,
endDate: Date
) {
const receipts = await subscribeServer.receiptsGetAll({
from: startDate.getTime(),
to: endDate.getTime(),
limit: 100
});
const totalAmount = receipts.receipts.reduce((sum, receipt) => {
return sum + receipt.amount;
}, 0);
console.log('Cheklar soni:', receipts.receipts.length);
console.log('Umumiy summa:', totalAmount / 100, 'so\'m');
return receipts;
}
// Ishlatish
const report = await getReceiptsReport(
new Date('2024-01-01'),
new Date('2024-01-31')
);To'liq misol
import { PaymeSubscribe, PaymeError } from '@joyida/payme';
const subscribeServer = new PaymeSubscribe({
merchantId: process.env.PAYME_MERCHANT_ID!,
password: process.env.PAYME_PASSWORD!
}, 'server');
// Chek yaratish va to'lash
async function createAndPayReceipt(
userId: string,
amount: number,
description: string
) {
try {
// 1. Chek yaratish
const receipt = await subscribeServer.receiptsCreate({
amount: amount,
account: { user_id: userId },
description: description
});
console.log('Chek yaratildi:', receipt.receipt._id);
// 2. Mijozning saqlangan kartasini olish
const savedToken = await getUserToken(userId);
if (!savedToken) {
throw new Error('Mijozda saqlangan karta yo\'q');
}
// 3. Chekni to'lash
const paid = await subscribeServer.receiptsPay({
id: receipt.receipt._id,
token: savedToken
});
console.log('To\'lov muvaffaqiyatli:', paid.receipt.state);
// 4. Chek invitisini SMS yuborish
const sent = await subscribeServer.receiptsSend({
id: receipt.receipt._id,
phone: await getUserPhone(userId)
});
console.log('SMS yuborildi:', sent.success);
return paid.receipt;
} catch (error) {
if (error instanceof PaymeError) {
switch (error.code) {
case -31400:
console.log('Chek topilmadi');
break;
case -31401:
console.log('Chek allaqachon to\'langan');
break;
case -31402:
console.log('Chek allaqachon bekor qilingan');
break;
case -31404:
console.log('Chek muddati o\'tgan');
break;
default:
console.log('Xato:', error.message);
}
}
throw error;
}
}
// Ishlatish
const receipt = await createAndPayReceipt(
'user_123',
500000,
'Buyurtma #123'
);