Xato Kodlari Foydalanish Misollari
Payme xato kodi konstantalaridan foydalanish bo'yicha to'liq qo'llanma.
Umumiy Ko'rinish
Kutubxona barcha Payme API xatoliklari uchun keng qamrovli xato kodi konstantalarini taqdim etadi. Bu xato ishlashni o'qilishi va saqlanishi osonroq qiladi.
Xato Kodlarini Import Qilish
typescript
import {
PAYME_ERROR_CODES,
ERROR_MESSAGES,
getErrorMessage,
PaymeError
} from '@joyida/payme';Xato Kodlaridan Foydalanish
Asosiy Xato Ishlash
typescript
import { PaymeMerchant, PaymeError, PAYME_ERROR_CODES } from '@joyida/payme';
const payme = new PaymeMerchant({
merchantId: process.env.PAYME_MERCHANT_ID!,
secretKey: process.env.PAYME_SECRET_KEY!
});
try {
await payme.createTransaction(params);
} catch (error) {
if (error instanceof PaymeError) {
switch (error.code) {
case PAYME_ERROR_CODES.FORBIDDEN:
console.error('Noto\'g\'ri maxfiy ma\'lumotlar');
break;
case PAYME_ERROR_CODES.INVALID_AMOUNT:
console.error('Noto\'g\'ri to\'lov summasi');
break;
case PAYME_ERROR_CODES.TRANSACTION_NOT_FOUND:
console.error('Tranzaktsiya topilmadi');
break;
case PAYME_ERROR_CODES.ACCOUNT_NOT_FOUND:
console.error('Buyurtma topilmadi');
break;
case PAYME_ERROR_CODES.ORDER_ALREADY_PAID:
console.error('Buyurtma allaqachon to\'langan');
break;
case PAYME_ERROR_CODES.CANNOT_CANCEL:
console.error('Bekor qilib bo\'lmaydi - buyurtma bajarilgan');
break;
default:
console.error(`Payme xatosi: ${error.message}`);
}
}
}Merchant API Xato Kodlaridan Foydalanish
typescript
import { PaymeMerchant, PaymeError, PAYME_ERROR_CODES } from '@joyida/payme';
const payme = new PaymeMerchant({
merchantId: process.env.PAYME_MERCHANT_ID!,
secretKey: process.env.PAYME_SECRET_KEY!
});
try {
await payme.performTransaction({ id: paymeId });
} catch (error) {
if (error instanceof PaymeError) {
switch (error.code) {
case PAYME_ERROR_CODES.TRANSACTION_NOT_FOUND:
console.error('Tranzaktsiya topilmadi');
break;
case PAYME_ERROR_CODES.INVALID_STATE:
console.error('Noto\'g\'ri tranzaktsiya holati');
break;
case PAYME_ERROR_CODES.CANNOT_PERFORM:
console.error('Tranzaktsiyani bajarib bo\'lmaydi');
break;
case PAYME_ERROR_CODES.ALREADY_DONE:
console.error('Tranzaktsiya allaqachon yakunlangan');
break;
default:
console.error(`Xato: ${error.message}`);
}
}
}Subscribe API Xato Kodlaridan Foydalanish
typescript
import { PaymeSubscribe, PaymeError, PAYME_ERROR_CODES } from '@joyida/payme';
const subscribe = new PaymeSubscribe({
merchantId: process.env.PAYME_MERCHANT_ID!,
password: process.env.PAYME_PASSWORD!
}, 'server');
try {
await subscribe.receiptsPay({
id: receiptId,
token: cardToken
});
} catch (error) {
if (error instanceof PaymeError) {
switch (error.code) {
case PAYME_ERROR_CODES.CARD_NOT_FOUND:
console.error('Karta topilmadi');
break;
case PAYME_ERROR_CODES.CARD_EXPIRED:
console.error('Karta muddati o\'tgan');
break;
case PAYME_ERROR_CODES.CARD_BLOCKED:
console.error('Karta bloklangan');
break;
case PAYME_ERROR_CODES.INSUFFICIENT_FUNDS:
console.error('Mablag\' yetarli emas');
break;
case PAYME_ERROR_CODES.CARD_VERIFICATION_FAILED:
console.error('Karta tasdiqlash muvaffaqiyatsiz');
break;
case PAYME_ERROR_CODES.RECEIPT_NOT_FOUND:
console.error('Chek topilmadi');
break;
case PAYME_ERROR_CODES.RECEIPT_ALREADY_PAID:
console.error('Chek allaqachon to\'langan');
break;
default:
console.error(`Xato: ${error.message}`);
}
}
}Xato Xabarlarini Olish
ERROR_MESSAGES dan Foydalanish
typescript
import { ERROR_MESSAGES, PAYME_ERROR_CODES } from '@joyida/payme';
const errorCode = PAYME_ERROR_CODES.INVALID_AMOUNT;
const message = ERROR_MESSAGES[errorCode];
console.log(message); // "Invalid amount"getErrorMessage Yordamchisidan Foydalanish
typescript
import { getErrorMessage, PAYME_ERROR_CODES } from '@joyida/payme';
const message1 = getErrorMessage(PAYME_ERROR_CODES.FORBIDDEN);
console.log(message1); // "Forbidden - Invalid credentials"
const message2 = getErrorMessage(PAYME_ERROR_CODES.CARD_EXPIRED);
console.log(message2); // "Card has expired"
const message3 = getErrorMessage(-99999);
console.log(message3); // "Unknown error (code: -99999)"To'liq Xato Ishlash Misoli
typescript
import {
PaymeMerchant,
PaymeError,
PAYME_ERROR_CODES,
getErrorMessage
} from '@joyida/payme';
const payme = new PaymeMerchant({
merchantId: process.env.PAYME_MERCHANT_ID!,
secretKey: process.env.PAYME_SECRET_KEY!
});
async function processPayment(orderId: string, amount: number) {
try {
const paymeId = generatePaymeId();
const created = await payme.createTransaction({
id: paymeId,
time: Date.now(),
amount,
account: { order_id: orderId }
});
const performed = await payme.performTransaction({
id: paymeId
});
return {
success: true,
transactionId: performed.transaction
};
} catch (error) {
if (error instanceof PaymeError) {
// Xatoni kod va xabar bilan jurnalga yozish
console.error({
code: error.code,
message: error.message,
description: getErrorMessage(error.code)
});
// Muayyan xatolarni ishlash
switch (error.code) {
case PAYME_ERROR_CODES.FORBIDDEN:
throw new Error('To\'lov tizimi sozlamalari xatosi');
case PAYME_ERROR_CODES.INVALID_AMOUNT:
throw new Error('Noto\'g\'ri to\'lov summasi');
case PAYME_ERROR_CODES.ACCOUNT_NOT_FOUND:
throw new Error('Buyurtma topilmadi');
case PAYME_ERROR_CODES.ORDER_ALREADY_PAID:
throw new Error('Buyurtma allaqachon to\'langan');
case PAYME_ERROR_CODES.ORDER_CANCELLED:
throw new Error('Buyurtma bekor qilingan');
case PAYME_ERROR_CODES.ORDER_EXPIRED:
throw new Error('Buyurtma muddati o\'tgan');
case PAYME_ERROR_CODES.TRANSACTION_NOT_FOUND:
throw new Error('Tranzaktsiya topilmadi');
case PAYME_ERROR_CODES.CANNOT_PERFORM:
throw new Error('To\'lovni yakunlab bo\'lmaydi');
case PAYME_ERROR_CODES.TRANSPORT_ERROR:
throw new Error('To\'lov tizimi vaqtinchalik mavjud emas');
default:
throw new Error(`To'lov xatosi: ${error.message}`);
}
}
throw error;
}
}Xato Kod Kategoriyalari
JSON-RPC Protokol Xatoliklari
typescript
import { PAYME_ERROR_CODES } from '@joyida/payme';
// Protokol xatoliklari
PAYM E_ERROR_CODES.PARSE_ERROR // -32700
PAYM E_ERROR_CODES.INVALID_REQUEST // -32600
PAYM E_ERROR_CODES.METHOD_NOT_FOUND // -32601
PAYM E_ERROR_CODES.INVALID_PARAMS // -32602
PAYM E_ERROR_CODES.INTERNAL_ERROR // -32603
PAYM E_ERROR_CODES.TRANSPORT_ERROR // -32400
PAYM E_ERROR_CODES.METHOD_NOT_POST // -32300
PAYM E_ERROR_CODES.FORBIDDEN // -32504Tranzaktsiya Xatoliklari
typescript
// Tranzaktsiya xatoliklari
PAYM E_ERROR_CODES.INVALID_AMOUNT // -31001
PAYM E_ERROR_CODES.INVALID_ACCOUNT // -31002
PAYM E_ERROR_CODES.TRANSACTION_NOT_FOUND // -31003
PAYM E_ERROR_CODES.INVALID_STATE // -31004
PAYM E_ERROR_CODES.TRANSACTION_CANCELLED // -31005
PAYM E_ERROR_CODES.TRANSACTION_EXISTS // -31006
PAYM E_ERROR_CODES.CANNOT_CANCEL // -31007
PAYM E_ERROR_CODES.CANNOT_PERFORM // -31008Akkaunt Xatoliklari
typescript
// Akkaunt xatoliklari (diapazon: -31050 dan -31099 gacha)
PAYM E_ERROR_CODES.ACCOUNT_NOT_FOUND // -31050
PAYM E_ERROR_CODES.ACCOUNT_BLOCKED // -31051
PAYM E_ERROR_CODES.ACCOUNT_INACTIVE // -31052
PAYM E_ERROR_CODES.INSUFFICIENT_PRIVILEGES // -31053
PAYM E_ERROR_CODES.ACCOUNT_LIMIT_EXCEEDED // -31054
PAYM E_ERROR_CODES.ORDER_ALREADY_PAID // -31055
PAYM E_ERROR_CODES.ORDER_CANCELLED // -31056
PAYM E_ERROR_CODES.ORDER_NOT_AVAILABLE // -31057
PAYM E_ERROR_CODES.INVALID_ORDER_AMOUNT // -31058
PAYM E_ERROR_CODES.ORDER_EXPIRED // -31059
PAYM E_ERROR_CODES.ALREADY_DONE // -31060
PAYM E_ERROR_CODES.PENDING_TRANSACTION // -31099Karta Xatoliklari
typescript
// Karta xatoliklari (diapazon: -31300 dan -31310 gacha)
PAYM E_ERROR_CODES.CARD_NOT_FOUND // -31300
PAYM E_ERROR_CODES.CARD_EXPIRED // -31301
PAYM E_ERROR_CODES.CARD_BLOCKED // -31302
PAYM E_ERROR_CODES.INSUFFICIENT_FUNDS // -31303
PAYM E_ERROR_CODES.CARD_VERIFICATION_FAILED // -31304
PAYM E_ERROR_CODES.INVALID_CARD_NUMBER // -31305
PAYM E_ERROR_CODES.INVALID_CARD_EXPIRY // -31306
PAYM E_ERROR_CODES.CARD_NOT_SUPPORTED // -31307
PAYM E_ERROR_CODES.CARD_LIMIT_EXCEEDED // -31308
PAYM E_ERROR_CODES.TOO_MANY_ATTEMPTS // -31309
PAYM E_ERROR_CODES.CARD_ALREADY_EXISTS // -31310Chek Xatoliklari
typescript
// Chek xatoliklari (diapazon: -31400 dan -31405 gacha)
PAYM E_ERROR_CODES.RECEIPT_NOT_FOUND // -31400
PAYM E_ERROR_CODES.RECEIPT_ALREADY_PAID // -31401
PAYM E_ERROR_CODES.RECEIPT_CANCELLED // -31402
PAYM E_ERROR_CODES.INVALID_RECEIPT_STATE // -31403
PAYM E_ERROR_CODES.RECEIPT_EXPIRED // -31404
PAYM E_ERROR_CODES.INVALID_RECEIPT_AMOUNT // -31405Fiskal Xatoliklari
typescript
// Fiskal xatoliklari
PAYM E_ERROR_CODES.FISCAL_CHECK_NOT_FOUND // -32001
PAYM E_ERROR_CODES.FISCAL_MODULE_ERROR // -32002
PAYM E_ERROR_CODES.FISCAL_DATA_INVALID // -32003Xato Jurnalini Yuritish
Structured Xato Jurnali
typescript
import { PaymeError, PAYME_ERROR_CODES, getErrorMessage } from '@joyida/payme';
function logPaymeError(error: PaymeError, context: Record<string, unknown>) {
const logEntry = {
timestamp: new Date().toISOString(),
errorCode: error.code,
errorMessage: error.message,
errorDescription: getErrorMessage(error.code),
context,
isRetryable: isRetryableError(error.code)
};
console.error(JSON.stringify(logEntry));
}
function isRetryableError(code: number): boolean {
// Tarmoq va vaqtinchalik xatoliklar qayta urinish mumkin
return [
PAYME_ERROR_CODES.TRANSPORT_ERROR,
PAYME_ERROR_CODES.INTERNAL_ERROR
].includes(code);
}
// Foydalanish
try {
await payme.createTransaction(params);
} catch (error) {
if (error instanceof PaymeError) {
logPaymeError(error, {
operation: 'createTransaction',
orderId: params.account.order_id,
amount: params.amount
});
}
}Eng Yaxshi Amaliyotlar
✅ Kerakli ishlar
Sehrli raqamlar o'rniga konstantalardan foydalaning
typescript// ✅ YAXSHI if (error.code === PAYME_ERROR_CODES.FORBIDDEN) { console.error('Noto\'g\'ri maxfiy ma\'lumotlar'); } // ❌ YOMON if (error.code === -32504) { console.error('Noto\'g\'ri maxfiy ma\'lumotlar'); }Foydalanuvchiga qulay xabarlar uchun getErrorMessage dan foydalaning
typescript// ✅ YAXSHI const message = getErrorMessage(error.code); showErrorToUser(message);Muayyan xatolarni ishlang
typescript// ✅ YAXSHI switch (error.code) { case PAYME_ERROR_CODES.CARD_EXPIRED: return 'Iltimos, kartangizni yangilang'; case PAYME_ERROR_CODES.INSUFFICIENT_FUNDS: return 'Mablag\' yetarli emas'; }Debugging uchun xato kodlarini jurnalga yozing
typescript// ✅ YAXSHI console.error({ code: error.code, message: getErrorMessage(error.code), context: { orderId, amount } });
❌ Kerakli emaslar
- Sehrli raqamlardan foydalanmang
- Xato kodlarini e'tiborsiz qoldirmang
- Foydalanuvchilarga texnik xatolarni ko'rsatmang
- Qayta urinib bo'ladigan xatolarda qayta urinmang
Keyingi Qadamlar
- Xatolarni Ishlash haqida bilib oling
- Merchant API Hujjatlari ni tekshiring
- Subscribe API Hujjatlari ni o'rganing
- Oddiy To'lov Misolini ko'ring