createPaymentLink method
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);
}
}