validate method

  1. @override
void validate()
override

Validate the request data.

Performs comprehensive validation on the payment request including:

  • Amount validation (positive, within currency limits)
  • Email format validation
  • Reference format validation (if provided)
  • Callback URL validation (if provided)

Throws

Implementation

@override
void validate() {
  super.validate();

  // Validate card number
  if (cardNumber.isEmpty) {
    throw ArgumentError('Card number is required');
  }
  if (!ValidationUtils.isValidCardNumber(cardNumber)) {
    throw ArgumentError('Invalid card number format or checksum');
  }

  // Validate expiry date
  if (!ValidationUtils.isValidExpiryDate(expiryMonth, expiryYear)) {
    throw ArgumentError('Invalid or expired card expiry date');
  }

  // Validate CVV
  if (!ValidationUtils.isValidCvv(cvv)) {
    throw ArgumentError('CVV must be 3 or 4 digits');
  }

  // Validate card holder name
  if (cardHolderName.isEmpty || cardHolderName.length < 2) {
    throw ArgumentError(
      'Card holder name must be at least 2 characters long',
    );
  }

  // Validate PIN if provided
  if (pin != null &&
      (pin!.isEmpty ||
          pin!.length != 4 ||
          !RegExp(r'^\d{4}$').hasMatch(pin!))) {
    throw ArgumentError('PIN must be exactly 4 digits if provided');
  }
}