Envoyer un message WhatsApp en PHP (et Laravel)
PHP reste roi côté e-commerce (WooCommerce, PrestaShop) et applications métier. Bonne nouvelle : envoyer un WhatsApp depuis PHP ne demande qu'un appel HTTP — sans plugin imposant le Cloud API de Meta. Ce guide couvre Laravel et PHP pur.
Ce qu'il vous faut
- Un compte SenWaAPI et une clé d'API (
snw_). - Une session WhatsApp liée (scan du QR code).
- PHP 8+ (cURL est inclus) ou Laravel 10/11.
Version Laravel — Http::post()
Le client HTTP de Laravel rend l'appel trivial :
use Illuminate\Support\Facades\Http;
$response = Http::withToken('snw_votre_cle_api')
->post('https://senwaapi.com/api/send-message', [
'to' => '+221771234567',
'text' => 'Bonjour depuis Laravel 👋',
]);
$response->throw(); // lève une exception si HTTP 4xx/5xx
return $response->json();
withToken() pose l'en-tête Authorization: Bearer .... Le numéro est au format
international.
Version PHP pur — cURL
Sans framework, l'extension cURL fait le travail :
$ch = curl_init('https://senwaapi.com/api/send-message');
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_POST => true,
CURLOPT_HTTPHEADER => [
'Authorization: Bearer snw_votre_cle_api',
'Content-Type: application/json',
],
CURLOPT_POSTFIELDS => json_encode([
'to' => '+221771234567',
'text' => 'Bonjour depuis PHP 👋',
]),
]);
$body = curl_exec($ch);
$code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
Gérer les erreurs
Ne supposez jamais qu'un envoi réussit — vérifiez le code HTTP. Les deux cas
fréquents : clé invalide (401) et session non liée.
if ($code !== 200) {
// Journalisez côté serveur, jamais affiché au client.
$erreur = json_decode($body, true);
Log::error('Échec WhatsApp', ['status' => $code, 'code' => $erreur['code'] ?? null]);
}
En Laravel, $response->throw() (ci-dessus) lève une RequestException que vous
attrapez dans un try/catch.
Envoyer un média
L'endpoint /api/send-media prend une URL publique et un type :
Http::withToken('snw_votre_cle_api')
->post('https://senwaapi.com/api/send-media', [
'to' => '+221771234567',
'url' => 'https://exemple.com/facture.pdf',
'type' => 'document', // image | video | audio | document
'caption' => 'Votre facture',
]);
Cas d'usage Laravel : un canal de notification
Idéal pour les notifications de commande d'une boutique : encapsulez l'appel
dans un canal de notification Laravel custom, et déclenchez-le sur l'événement
OrderShipped. Le client reçoit son suivi sur WhatsApp, lu en quelques secondes.
Rate limit
Chaque session impose un délai minimal entre deux envois. Pour une liste, ne
bouclez pas en rafale : passez par une queue Laravel (ShouldQueue +
->delay()) plutôt que d'envoyer tout d'un coup, sous peine de faire bannir
votre numéro.
Aller plus loin
Le même flux existe en Node.js et en Python. Pour le panorama complet de l'API WhatsApp (familles, concepts, choix d'un fournisseur), voyez le guide complet.
Détail des endpoints dans la documentation ; l'essai gratuit de 15 jours (sans carte) vous donne une clé d'API tout de suite.