Skip to content

Validatsiya Hujjatlari

@joyida/payme da kiritma validatsiyasi uchun to'liq havola.

Yangi API: Nomdosh Funksiyalar

Validatsiya funksiyalarini ishlatishning tavsiya etilgan usuli:

typescript
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

FunksiyaMaqsad
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:

typescript
// ❌ 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.

typescript
import { Validator, ValidationError } from '@joyida/payme';

Metodlar

validateAmount

To'lov summasini tekshirish (tiyinda musbat butun son bo'lishi kerak).

typescript
static validateAmount(amount: number): void

Qoidalar:

  • 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:

typescript
// ✅ 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 emas

Xato Xabari:

"Amount must be a positive integer"

validateCardNumber

Karta raqamini tekshirish (13-19 raqam).

typescript
static validateCardNumber(cardNumber: string): void

Qoidalar:

  • 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:

typescript
// ✅ 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'sh

Xato Xabari:

"Card number must be 13-19 digits"

validateCardExpiry

Karta amal qilish muddatini tekshirish (MMYY formati).

typescript
static validateCardExpiry(expire: string): void

Qoidalar:

  • 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:

typescript
// ✅ 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 uzunlik

Xato 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).

typescript
static validatePhone(phone: string): void

Qoidalar:

  • String bo'lishi kerak
  • "998" bilan boshlanishi kerak
  • Aniq 12 raqamdan iborat bo'lishi kerak
  • Format: 998XXXXXXXXX

Misol:

typescript
// ✅ 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 bor

Xato Xabari:

"Invalid phone number format. Expected 998XXXXXXXXX"

validatePaymeId

Payme tranzaktsiya ID sini tekshirish (24 belgi).

typescript
static validatePaymeId(id: string): void

Qoidalar:

  • String bo'lishi kerak
  • Aniq 24 belgidan iborat bo'lishi kerak
  • Odatda o'n oltilik (0-9, a-f)

Misol:

typescript
// ✅ 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'sh

Xato Xabari:

"Payme ID must be 24 characters"

validateTimestamp

Unix timestamp ni tekshirish (13 raqam, millisekundlar).

typescript
static validateTimestamp(timestamp: number): void

Qoidalar:

  • Son bo'lishi kerak
  • Aniq 13 raqamdan iborat bo'lishi kerak
  • Millisekundlarda Unix timestamp ni ifodalaydi

Misol:

typescript
// ✅ 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 emas

Xato Xabari:

"Timestamp must be 13 digits (Unix timestamp in milliseconds)"

validateAccount

Akkaunt obyektini tekshirish.

typescript
static validateAccount(account: Record<string, string | number>): void

Qoidalar:

  • Obyekt bo'lishi kerak
  • Bo'sh bo'lmasligi kerak
  • Kalitlar string bo'lishi kerak
  • Qiymatlar string yoki son bo'lishi kerak

Misol:

typescript
// ✅ 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 turi

Xato Xabari:

"Account must be a non-empty object"

validateToken

Karta tokenini tekshirish.

typescript
static validateToken(token: string): void

Qoidalar:

  • String bo'lishi kerak
  • Bo'sh bo'lmasligi kerak

Misol:

typescript
// ✅ 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 emas

Xato Xabari:

"Token must be a non-empty string"

Foydalanish Misollari

API Chaqiruvidan Oldin Tekshirish

typescript
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

typescript
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

typescript
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

typescript
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:

typescript
// 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

  1. Erta tekshiring

    typescript
    // Foydalanuvchi kiritmasini qayta ishlashdan oldin tekshiring
    Validator.validateAmount(userInput.amount);
  2. Foydalanuvchiga qulay xabarlar taqdim eting

    typescript
    try {
      Validator.validateCardNumber(cardNumber);
    } catch (error) {
      if (error instanceof ValidationError) {
        showError('Iltimos, to\'g\'ri karta raqamini kiriting');
      }
    }
  3. Barcha kiritmalarni tekshiring

    typescript
    // API chaqiruvidan oldin barcha maydonlarni tekshiring
    Validator.validateAmount(amount);
    Validator.validateAccount(account);
    Validator.validatePaymeId(id);

❌ Kerakli emaslar

  1. Validatsiyani o'tkazib yubormang

    typescript
    // ❌ YOMON - Tekshirish yo'q
    await payme.createTransaction(params);
    
    // ✅ YAXSHI - Avval tekshiring
    Validator.validateAmount(params.amount);
    await payme.createTransaction(params);
  2. 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

MIT Lizenziyasi ostida chiqarilgan.