Validatsiya Hujjatlari
@joyida/payme da kiritma validatsiyasi uchun to'liq havola.
Yangi API: Nomdosh Funksiyalar
Validatsiya funksiyalarini ishlatishning tavsiya etilgan usuli:
import { validateAmount, validateCardNumber, ValidationError } from '@joyida/payme';
// API chaqiruvdan oldin tekshirish
try {
validateAmount(500000);
validateCardNumber('8600069195406311');
} catch (error) {
if (error instanceof ValidationError) {
console.error('Validatsiya xatosi:', error.message);
}
}Mavjud Validatsiya Funksiyalari
| Funksiya | Maqsad |
|---|---|
validateAmount(amount) | To'lov summasini tekshirish (tiyinda musbat butun son) |
validateCardNumber(number) | Karta raqamini tekshirish (13-19 raqam) |
validateCardExpiry(expire) | Karta muddatini tekshirish (MMYY formati) |
validatePhone(phone) | O'zbekiston telefonini tekshirish (998XXXXXXXXX) |
validatePaymeId(id) | Payme tranzaksiya ID sini tekshirish (24 belgi) |
validateTimestamp(timestamp) | Unix vaqt belgisini tekshirish (13 raqamli ms) |
validateAccount(account) | Akkaunt obyektini tekshirish (bo'sh bo'lmasligi kerak) |
validateToken(token) | Karta tokenini tekshirish (bo'sh bo'lmasligi kerak) |
Eskirgan: Validator Klass
Eskirgan Bildirishnoma
Validator klassi eskirgan va 0.5.0 versiyasida olib tashlanadi. Iltimos, nomdosh validatsiya funksiyalarini ishlating.
Ko'chirish:
// ❌ Eski (eskirgan)
import { Validator } from '@joyida/payme';
Validator.validateAmount(500000);
// ✅ Yangi (tavsiya etilgan)
import { validateAmount } from '@joyida/payme';
validateAmount(500000);Validator klassi API chaqiruvlaridan oldin kiritmalarni tekshirish uchun statik metodlarni taqdim etadi.
import { Validator, ValidationError } from '@joyida/payme';Metodlar
validateAmount
To'lov summasini tekshirish (tiyinda musbat butun son bo'lishi kerak).
static validateAmount(amount: number): voidQoidalar:
- Son bo'lishi kerak
- Musbat bo'lishi kerak (> 0)
- Butun son bo'lishi kerak (o'nlik emas)
- Tiyinda summani ifodalaydi (1 so'm = 100 tiyin)
Misol:
// ✅ To'g'ri summalar
Validator.validateAmount(500000); // 5000 so'm
Validator.validateAmount(100); // 1 so'm
Validator.validateAmount(1); // 0.01 so'm
// ❌ Noto'g'ri summalar
Validator.validateAmount(-100); // Tashlaydi: manfiy
Validator.validateAmount(0); // Tashlaydi: nol
Validator.validateAmount(100.5); // Tashlaydi: o'nlik
Validator.validateAmount('100'); // Tashlaydi: son emasXato Xabari:
"Amount must be a positive integer"validateCardNumber
Karta raqamini tekshirish (13-19 raqam).
static validateCardNumber(cardNumber: string): voidQoidalar:
- String bo'lishi kerak
- 13-19 raqamdan iborat bo'lishi kerak
- Probellarga ruxsat beriladi va ular olib tashlanadi
- Faqat raqamlar va probellarga ruxsat beriladi
Misol:
// ✅ To'g'ri karta raqamlari
Validator.validateCardNumber('8600069195406311');
Validator.validateCardNumber('8600 0691 9540 6311');
Validator.validateCardNumber('4111111111111111');
// ❌ Noto'g'ri karta raqamlari
Validator.validateCardNumber('123'); // Tashlaydi: juda qisqa
Validator.validateCardNumber('12345678901234567890'); // Tashlaydi: juda uzun
Validator.validateCardNumber('abcd1234'); // Tashlaydi: hariflar bor
Validator.validateCardNumber(''); // Tashlaydi: bo'shXato Xabari:
"Card number must be 13-19 digits"validateCardExpiry
Karta amal qilish muddatini tekshirish (MMYY formati).
static validateCardExpiry(expire: string): voidQoidalar:
- String bo'lishi kerak
- Aniq 4 belgidan iborat bo'lishi kerak
- Format: MMYY (masalan, "0399" = 2099-yil mart)
- Oy 01-12 bo'lishi kerak
- Muddati o'tmagan bo'lishi kerak
Misol:
// ✅ To'g'ri amal qilish muddatlari
Validator.validateCardExpiry('0399'); // 2099-yil mart
Validator.validateCardExpiry('1225'); // 2025-yil dekabr
Validator.validateCardExpiry('0126'); // 2026-yil yanvar
// ❌ Noto'g'ri amal qilish muddatlari
Validator.validateCardExpiry('1323'); // Tashlaydi: noto'g'ri oy (13)
Validator.validateCardExpiry('0020'); // Tashlaydi: muddati o'tgan
Validator.validateCardExpiry('03/99'); // Tashlaydi: noto'g'ri format
Validator.validateCardExpiry('399'); // Tashlaydi: noto'g'ri uzunlikXato Xabarlari:
"Invalid card expiry format. Expected MMYY (e.g., 0399)"
"Invalid month in card expiry"
"Card has expired"validatePhone
Telefon raqamini tekshirish (O'zbekiston formati).
static validatePhone(phone: string): voidQoidalar:
- String bo'lishi kerak
- "998" bilan boshlanishi kerak
- Aniq 12 raqamdan iborat bo'lishi kerak
- Format: 998XXXXXXXXX
Misol:
// ✅ To'g'ri telefon raqamlari
Validator.validatePhone('998901234567');
Validator.validatePhone('998971234567');
Validator.validatePhone('998331234567');
// ❌ Noto'g'ri telefon raqamlari
Validator.validatePhone('901234567'); // Tashlaydi: davlat kodi yo'q
Validator.validatePhone('998901234'); // Tashlaydi: juda qisqa
Validator.validatePhone('+998901234567'); // Tashlaydi: + bor
Validator.validatePhone('998 90 123 45 67'); // Tashlaydi: proellar borXato Xabari:
"Invalid phone number format. Expected 998XXXXXXXXX"validatePaymeId
Payme tranzaktsiya ID sini tekshirish (24 belgi).
static validatePaymeId(id: string): voidQoidalar:
- String bo'lishi kerak
- Aniq 24 belgidan iborat bo'lishi kerak
- Odatda o'n oltilik (0-9, a-f)
Misol:
// ✅ To'g'ri Payme IDlar
Validator.validatePaymeId('5305e3bab097f420a62ced0b');
Validator.validatePaymeId('61396aaed8b87a4c215ae556');
// ❌ Noto'g'ri Payme IDlar
Validator.validatePaymeId('5305e3ba'); // Tashlaydi: juda qisqa
Validator.validatePaymeId('5305e3bab097f420a62ced0b123'); // Tashlaydi: juda uzun
Validator.validatePaymeId(''); // Tashlaydi: bo'shXato Xabari:
"Payme ID must be 24 characters"validateTimestamp
Unix timestamp ni tekshirish (13 raqam, millisekundlar).
static validateTimestamp(timestamp: number): voidQoidalar:
- Son bo'lishi kerak
- Aniq 13 raqamdan iborat bo'lishi kerak
- Millisekundlarda Unix timestamp ni ifodalaydi
Misol:
// ✅ To'g'ri timestamplar
Validator.validateTimestamp(Date.now());
Validator.validateTimestamp(1399114284039);
Validator.validateTimestamp(1700000000000);
// ❌ Noto'g'ri timestamplar
Validator.validateTimestamp(1399114284); // Tashlaydi: 10 raqam (soniyalar)
Validator.validateTimestamp(139911428403); // Tashlaydi: 12 raqam
Validator.validateTimestamp('1399114284039'); // Tashlaydi: son emasXato Xabari:
"Timestamp must be 13 digits (Unix timestamp in milliseconds)"validateAccount
Akkaunt obyektini tekshirish.
static validateAccount(account: Record<string, string | number>): voidQoidalar:
- Obyekt bo'lishi kerak
- Bo'sh bo'lmasligi kerak
- Kalitlar string bo'lishi kerak
- Qiymatlar string yoki son bo'lishi kerak
Misol:
// ✅ To'g'ri akkauntlar
Validator.validateAccount({ order_id: 'ORD-123' });
Validator.validateAccount({ user_id: 12345 });
Validator.validateAccount({ order_id: 'ORD-123', user_id: 12345 });
// ❌ Noto'g'ri akkauntlar
Validator.validateAccount({}); // Tashlaydi: bo'sh
Validator.validateAccount(null); // Tashlaydi: obyekt emas
Validator.validateAccount('order_id'); // Tashlaydi: obyekt emas
Validator.validateAccount({ order_id: [] }); // Tashlaydi: noto'g'ri qiymat turiXato Xabari:
"Account must be a non-empty object"validateToken
Karta tokenini tekshirish.
static validateToken(token: string): voidQoidalar:
- String bo'lishi kerak
- Bo'sh bo'lmasligi kerak
Misol:
// ✅ To'g'ri tokenlar
Validator.validateToken('card_token_here');
Validator.validateToken('abc123xyz');
// ❌ Noto'g'ri tokenlar
Validator.validateToken(''); // Tashlaydi: bo'sh
Validator.validateToken(null); // Tashlaydi: string emasXato Xabari:
"Token must be a non-empty string"Foydalanish Misollari
API Chaqiruvidan Oldin Tekshirish
import { Validator, ValidationError } from '@joyida/payme';
async function createTransaction(params) {
try {
// Barcha kiritmalarni tekshirish
Validator.validatePaymeId(params.id);
Validator.validateTimestamp(params.time);
Validator.validateAmount(params.amount);
Validator.validateAccount(params.account);
// Hammasi to'g'ri, API chaqiruvi bilan davom etish
return await payme.createTransaction(params);
} catch (error) {
if (error instanceof ValidationError) {
console.error('Tekshirish muvaffaqiyatsiz:', error.message);
throw error;
}
}
}Foydalanuvchi Kiritmasini Tekshirish
import { Validator, ValidationError } from '@joyida/payme';
function validateCardForm(cardNumber: string, cardExpiry: string) {
const errors: string[] = [];
try {
Validator.validateCardNumber(cardNumber);
} catch (error) {
if (error instanceof ValidationError) {
errors.push(error.message);
}
}
try {
Validator.validateCardExpiry(cardExpiry);
} catch (error) {
if (error instanceof ValidationError) {
errors.push(error.message);
}
}
return {
valid: errors.length === 0,
errors
};
}
// Foydalanish
const result = validateCardForm('8600069195406311', '0399');
if (!result.valid) {
console.error('Tekshirish xatolari:', result.errors);
}Maxsus Xabarlar bilan Tekshirish
import { Validator, ValidationError } from '@joyida/payme';
function validateAmount(amount: number, fieldName: string = 'Amount') {
try {
Validator.validateAmount(amount);
} catch (error) {
if (error instanceof ValidationError) {
throw new Error(`${fieldName}: ${error.message}`);
}
}
}
// Foydalanish
try {
validateAmount(-100, 'To\'lov summasi');
} catch (error) {
console.error(error.message); // "To'lov summasi: Amount must be a positive integer"
}Partiyali Validatsiya
import { Validator, ValidationError } from '@joyida/payme';
function validatePaymentData(data: {
amount: number;
cardNumber: string;
cardExpiry: string;
phone: string;
}) {
const errors: Record<string, string> = {};
// Summani tekshirish
try {
Validator.validateAmount(data.amount);
} catch (error) {
if (error instanceof ValidationError) {
errors.amount = error.message;
}
}
// Karta raqamini tekshirish
try {
Validator.validateCardNumber(data.cardNumber);
} catch (error) {
if (error instanceof ValidationError) {
errors.cardNumber = error.message;
}
}
// Karta amal qilish muddatini tekshirish
try {
Validator.validateCardExpiry(data.cardExpiry);
} catch (error) {
if (error instanceof ValidationError) {
errors.cardExpiry = error.message;
}
}
// Telefonni tekshirish
try {
Validator.validatePhone(data.phone);
} catch (error) {
if (error instanceof ValidationError) {
errors.phone = error.message;
}
}
return {
valid: Object.keys(errors).length === 0,
errors
};
}
// Foydalanish
const result = validatePaymentData({
amount: 500000,
cardNumber: '8600069195406311',
cardExpiry: '0399',
phone: '998901234567'
});
if (!result.valid) {
console.error('Tekshirish xatolari:', result.errors);
}Avtomatik Validatsiya
Kutubxona API chaqiruvlaridan oldin kiritmalarni avtomatik ravishda tekshiradi:
// Bu avtomatik ravishda summa va akkauntni tekshiradi
await payme.checkPerformTransaction({
amount: 500000,
account: { order_id: 'ORD-123' }
});
// Bu avtomatik ravishda karta raqami va muddatini tekshiradi
await subscribe.cardsCreate({
card: {
number: '8600069195406311',
expire: '0399'
},
save: true
});Eng Yaxshi Amaliyotlar
✅ Kerakli ishlar
Erta tekshiring
typescript// Foydalanuvchi kiritmasini qayta ishlashdan oldin tekshiring Validator.validateAmount(userInput.amount);Foydalanuvchiga qulay xabarlar taqdim eting
typescripttry { Validator.validateCardNumber(cardNumber); } catch (error) { if (error instanceof ValidationError) { showError('Iltimos, to\'g\'ri karta raqamini kiriting'); } }Barcha kiritmalarni tekshiring
typescript// API chaqiruvidan oldin barcha maydonlarni tekshiring Validator.validateAmount(amount); Validator.validateAccount(account); Validator.validatePaymeId(id);
❌ Kerakli emaslar
Validatsiyani o'tkazib yubormang
typescript// ❌ YOMON - Tekshirish yo'q await payme.createTransaction(params); // ✅ YAXSHI - Avval tekshiring Validator.validateAmount(params.amount); await payme.createTransaction(params);Validatsiya xatolarini e'tiborsiz qoldirmang
typescript// ❌ YOMON - Xatolarni e'tiborsiz qoldirish try { Validator.validateAmount(amount); } catch (error) { // E'tiborsiz qoldirish } // ✅ YAXSHI - Xatolarni ishlash try { Validator.validateAmount(amount); } catch (error) { if (error instanceof ValidationError) { console.error(error.message); throw error; } }
Keyingi Qadamlar
- Xatolarni Ishlash haqida bilib oling
- Merchant API Hujjatlari ni tekshiring
- Subscribe API Hujjatlari ni o'rganing
- To'liq Misollarni ko'ring