createPaymentLink method

Future<String> createPaymentLink(
  1. Map<String, dynamic> productDetails, {
  2. String successCallbackUrl = 'confirmation',
  3. String failureCallbackUrl = 'cancelled',
})

Méthode d'instance qui peut être testée

Implementation

Future<String> createPaymentLink(
  Map<String, dynamic> productDetails, {
  String successCallbackUrl = 'confirmation',
  String failureCallbackUrl = 'cancelled',
}) async {
  // Vérifier si productDetails contient les informations nécessaires
  if (productDetails.isEmpty) {
    throw StripeException('Product details cannot be empty');
  }

  // Vérifier les champs requis (ajustez selon vos besoins)
  final requiredFields = [
    'product_name',
    'unit_amount',
    'currency',
    'period',
    'payment_id',
  ];
  for (final field in requiredFields) {
    if (!productDetails.containsKey(field) || productDetails[field] == null) {
      throw StripeException('Missing required field: $field');
    }
  }

  if (productDetails['unit_amount'] <= 0) {
    throw StripeException('unit_amount must be a positive number');
  }

  if (productDetails.containsKey('trial_period_days')) {
    final trialPeriodDays = productDetails['trial_period_days'];
    if (trialPeriodDays != null && trialPeriodDays <= 0) {
      throw StripeException('trial_period_days must be a positive number');
    }
  }

  if (successCallbackUrl.startsWith('/')) {
    successCallbackUrl = successCallbackUrl.substring(1);
  }

  if (failureCallbackUrl.startsWith('/')) {
    failureCallbackUrl = failureCallbackUrl.substring(1);
  }

  if (successCallbackUrl.isEmpty) {
    throw StripeException('successCallbackUrl cannot be empty');
  }

  if (failureCallbackUrl.isEmpty) {
    throw StripeException('failureCallbackUrl cannot be empty');
  }

  try {
    final response = await _functionsService
        .callFunction('createStripePaymentLink', {
          ...productDetails,
          'from_url': getLocalhostUrl(),
          'success_callback_url': successCallbackUrl,
          'failure_callback_url': failureCallbackUrl,
        });

    // Vérifier si la réponse contient un lien de paiement
    if (response.data == null ||
        !response.data.containsKey('paymentLink') ||
        response.data['paymentLink'] == null) {
      throw StripeException(
        'Invalid response from Stripe service',
        response.data,
      );
    }

    return response.data['paymentLink'];
  } on FirebaseFunctionsException catch (e) {
    throw StripeException('Firebase function error: ${e.message}', {
      'code': e.code,
      'details': e.details,
    });
  } catch (e) {
    throw StripeException('Failed to create payment link', e);
  }
}