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();
if (phoneNumber.isEmpty) {
throw ArgumentError('Phone number is required for mobile money payments');
}
if (!ValidationUtils.isValidPhoneNumber(phoneNumber)) {
throw ArgumentError(
'Phone number must be in E.164 format (e.g., +1234567890) and be valid',
);
}
// Validate provider-specific requirements
switch (provider) {
case MobileMoneyProvider.mpesa:
// M-Pesa is primarily for Kenya, so check for Kenyan numbers
if (!phoneNumber.startsWith('+254')) {
throw ArgumentError(
'M-Pesa payments require a Kenyan phone number (+254)',
);
}
break;
case MobileMoneyProvider.airtel:
case MobileMoneyProvider.vodafone:
case MobileMoneyProvider.tigo:
// These are primarily for Ghana, so check for Ghanaian numbers
if (!phoneNumber.startsWith('+233')) {
throw ArgumentError(
'${provider.name} payments require a Ghanaian phone number (+233)',
);
}
break;
}
}