Colas Mérand
25/01/2025
Laravel
API
Recharge Airtime
5 minutes
Dans un monde de plus en plus connecté, les services de recharge téléphonique en ligne (Airtime) sont devenus essentiels pour de nombreux utilisateurs. Que ce soit pour recharger son propre téléphone ou celui d'un proche à l'étranger, ces plateformes répondent à un besoin concret et croissant. Chez Platane, nous avons accompagné plusieurs entreprises dans la mise en place de telles solutions, et nous souhaitons partager notre expertise sur l'intégration d'API de recharge Airtime dans un environnement Laravel.
Les services de recharge Airtime permettent aux utilisateurs de recharger facilement le crédit téléphonique de n'importe quel numéro dans le monde. Cette fonctionnalité présente plusieurs avantages :
Après avoir testé plusieurs solutions sur le marché, voici notre analyse des API les plus performantes pour une intégration avec Laravel :
Reloadly s'est imposé comme l'un des leaders du marché des API de recharge Airtime. Cette solution offre :
Bien que Stripe ne propose pas directement de service de recharge Airtime, sa robustesse pour la gestion des paiements en fait un excellent choix en combinaison avec une API spécialisée :
D'autres solutions méritent également votre attention :
Fort de notre expérience sur des projets comme Dealt (marketplace avec intégration de paiements) et Easop (plateforme financière utilisant Stripe), nous recommandons l'architecture suivante pour une intégration optimale :
┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐
│ │ │ │ │ │
│ Interface │────▶│ Middleware │────▶│ API Airtime │
│ utilisateur │ │ Laravel │ │ (Reloadly) │
│ │ │ │ │ │
└─────────────────┘ └─────────────────┘ └─────────────────┘
│
▼
┌─────────────────┐
│ │
│ API Paiement │
│ (Stripe) │
│ │
└─────────────────┘
La sécurité est primordiale pour ce type de service. Nous recommandons :
// Exemple d'intégration Stripe avec Laravel
public function processPayment(Request $request)
{
try {
$stripe = new \Stripe\StripeClient(config('services.stripe.secret'));
$paymentIntent = $stripe->paymentIntents->create([
'amount' => $request->amount * 100, // Conversion en centimes
'currency' => 'eur',
'payment_method_types' => ['card'],
'metadata' => [
'user_id' => auth()->id(),
'phone_number' => $request->phone_number
]
]);
return response()->json([
'clientSecret' => $paymentIntent->client_secret
]);
} catch (\Exception $e) {
return response()->json(['error' => $e->getMessage()], 500);
}
}
// Exemple d'intégration Reloadly avec Laravel
public function topupAirtime(Request $request)
{
try {
// Authentification à l'API Reloadly
$token = $this->getReloadlyToken();
// Préparation de la requête
$response = Http::withToken($token)
->post('https://topups.reloadly.com/topups', [
'recipientPhone' => [
'countryCode' => $request->country_code,
'number' => $request->phone_number
],
'operatorId' => $request->operator_id,
'amount' => $request->amount,
'useLocalAmount' => true
]);
if ($response->successful()) {
// Enregistrement de la transaction
Transaction::create([
'user_id' => auth()->id(),
'amount' => $request->amount,
'phone_number' => $request->phone_number,
'status' => 'completed',
'transaction_id' => $response->json()['transactionId']
]);
return response()->json([
'success' => true,
'transaction' => $response->json()
]);
}
return response()->json([
'success' => false,
'message' => $response->json()['message'] ?? 'Une erreur est survenue'
], 400);
} catch (\Exception $e) {
return response()->json(['error' => $e->getMessage()], 500);
}
}
Pour garantir la fiabilité des transactions, il est essentiel d'implémenter des webhooks :
// Exemple de webhook Stripe
public function handleStripeWebhook(Request $request)
{
$payload = $request->getContent();
$sig_header = $request->header('Stripe-Signature');
$endpoint_secret = config('services.stripe.webhook_secret');
try {
$event = \Stripe\Webhook::constructEvent(
$payload, $sig_header, $endpoint_secret
);
if ($event->type === 'payment_intent.succeeded') {
$paymentIntent = $event->data->object;
// Déclencher la recharge Airtime
$this->processAirtimeTopup($paymentIntent);
}
return response()->json(['status' => 'success']);
} catch (\Exception $e) {
return response()->json(['error' => $e->getMessage()], 400);
}
}
Sur la base de notre expérience avec des projets comme Epictory et Dealt, nous recommandons ces bonnes pratiques :
// Récupération des opérateurs avec mise en cache
public function getOperators($countryCode)
{
return Cache::remember('operators_'.$countryCode, 86400, function () use ($countryCode) {
$token = $this->getReloadlyToken();
$response = Http::withToken($token)
->get('https://topups.reloadly.com/operators/countries/'.$countryCode);
return $response->json();
});
}
Pour améliorer l'expérience utilisateur, traitez les transactions de manière asynchrone :
// Utilisation des jobs Laravel pour le traitement asynchrone
public function topupAirtime(Request $request)
{
// Validation et traitement initial...
ProcessAirtimeTopup::dispatch([
'user_id' => auth()->id(),
'phone_number' => $request->phone_number,
'amount' => $request->amount,
'operator_id' => $request->operator_id
]);
return response()->json([
'success' => true,
'message' => 'Votre demande de recharge est en cours de traitement'
]);
}
Mettez en place un système de monitoring pour détecter rapidement les problèmes :
// Exemple de monitoring avec Laravel Telescope
public function topupAirtime(Request $request)
{
try {
// Code d'intégration...
Telescope::recordException(new \Exception('Échec de la recharge Airtime'), [
'user_id' => auth()->id(),
'phone_number' => $request->phone_number,
'amount' => $request->amount
]);
// Notification à l'équipe technique
Notification::route('slack', config('services.slack.webhook'))
->notify(new AirtimeTopupFailedNotification($request->all()));
} catch (\Exception $e) {
// Gestion des erreurs...
}
}
La gestion des devises peut être complexe, surtout pour les recharges internationales. Nous recommandons :
Les services financiers sont soumis à des réglementations strictes :
Mettez en place un système robuste de gestion des erreurs :
Chez Platane, nous avons accompagné plusieurs entreprises dans l'intégration de solutions de paiement et d'API tierces. Par exemple :
Pour Dealt, nous avons développé une marketplace complète intégrant plusieurs API de paiement, avec une architecture similaire à celle nécessaire pour un service de recharge Airtime.
Sur Easop, nous avons mis en place une intégration Stripe complexe pour gérer des transactions financières sensibles, démontrant notre expertise dans la sécurisation des flux financiers.
Pour Epictory, nous avons créé un système de paiement robuste avec Stripe, illustrant notre capacité à développer des solutions de commerce électronique fiables.
L'intégration d'une API de recharge Airtime dans une application Laravel représente un défi technique intéressant, mais parfaitement réalisable avec les bonnes pratiques et une architecture solide. Cette fonctionnalité peut considérablement enrichir votre plateforme et offrir une réelle valeur ajoutée à vos utilisateurs.
Chez Platane, nous combinons expertise technique et créativité pour développer des solutions sur mesure qui répondent précisément aux besoins de nos clients. Notre approche intègre les technologies les plus récentes, comme l'intelligence artificielle générative, tout en maintenant une attention particulière à la sécurité et à la performance.
Vous avez un projet d'intégration d'API ou de développement d'une plateforme Laravel ? N'hésitez pas à prendre rendez-vous via notre formulaire de contact. Nos experts se feront un plaisir d'échanger avec vous sur votre projet et de vous proposer des solutions adaptées à vos objectifs. Collaborer avec Platane, c'est s'assurer d'un développement de qualité, respectant les délais et les budgets, tout en bénéficiant d'une expertise technique de pointe.
Vous préférez discuter de vive voix ? Nous aussi et c'est évidemment sans engagement !
Une question, un besoin de renseignements ? N'hésitez pas à nous contacter.