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();

  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;
  }
}