validate method
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
- ArgumentError if any validation fails
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');
}
}