Un guide pratique pour automatiser la gestion de vos paiements en ligne avec le ERP open‑source Dolibarr.
1️⃣ Contexte & Objectifs (Jour 1)
| Objectif | Pourquoi ? |
|---|---|
| Connecter Dolibarr à PayPal | Permettre la saisie automatique des paiements reçus (ou effectues) via PayPal, éviter la saisie manuelle et garantir la conciliation comptable. |
| Créer un processus en 30 jours | Structurer le projet en itérations de 7 jours (planification, mise en œuvre, tests, validation) pour livrer rapidement un module fonctionnel. |
| Documenter le workflow | Faciliter la maintenance et le transfert à l’équipe support. |
2️⃣ Architecture Globale (Jour 1‑2)
- Dolibarr (v9.x ou +) – ERP/CRM installé sur votre serveur (LAMP/LEMP).
- Extension “PayPal SDK” – Bibliothèque PHP officielle (
paypal/rest-api-sdk-php). - Webhook PayPal – Endpoint qui recevra les notifications d’évènements (payment.authorized, capture.completed, dispute.created, …).
- Base de données – Ajout de tables de liaison (si besoin) ou utilisation des objets existants (Invoices, Payments).
Schéma simplifié
Front‑office (site client) → PayPal Checkout → Webhook → Dolibarr (Webservice) → Paiement intégré
3️⃣ Jour 1‑3 – Phase de Recherche & Test de l’API PayPal
| Action | Détails |
|---|---|
| Créer un compte PayPal Business (ou Sandbox) | Vous obtiendrez Client‑ID et Secret et le mode de paiement : REST. |
| Configurer un App dans le Dashboard PayPal | Activer les scopes Payments, Invoices, Webhooks. |
| Lire la documentation officielle | https://developer.paypal.com/docs/api/ – Sections Orders API (création, capture) Invoices API (si vous utilisez les factures automatisées). |
| Installer le SDK | composer require paypal/rest-api-sdk-php. |
Test local d’une création d’« Order */ Intent: AUTHORIZE** |
Exemple minimal : payment->create($request); → redirection URL vers PayPal. |
Livrable : Script
paypal_test.phpqui crée une commande test, redirige et renvoie le statut de capture.
4️⃣ Jour 4‑7 – Conception du Webhook dans Dolibarr
| Étape | Implémentation |
|---|---|
| URL du webhook | /paypal/webhook (ex. yourhost.com/dolibarr/paypal/webhook.php). |
| Enregistrement du endpoint | Route ajoutée via .htaccess + script PHP. |
| Signature de vérif | Utiliser hash_hmac('sha256', $rawBody, $pp_secret) pour valider que la requête vient réellement de PayPal. |
| Gestion des événements | – PAYMENT.CAPTURE.COMPLETED → paiement final.– PAYMENT.SALE (direct) → mode Sale.– INVOICE.PAYMENT.COMPLETED (si vous utilisez les factures). |
| Mise à jour du paiement Dolibarr | – Identifier la facture client (facture.id).– Créer un paiement via Core\Payment::addPayment($amount, $method='PayPal', $label='PayPal', $ref='TxnId=xxxx');– Marquer la facture comme paid ou partially paid. |
| Journalisation | Sauvegarder json_decode(file_get_contents('php://input'), true) et loguer des détails (payment_status, txn_id, amount). |
Livrable :
paypal_webhook.phpfonctionnel en sandbox, avec métriques de logs accessibles.
5️⃣ Jour 8‑12 – Développement du Module « PayPal » pour Dolibarr
Dolibarr possède un framework d’extensions (modules) qui s’appuie sur htdocs/core/modules. Nous allons créer un module paypal :
| Fichier | Contenu principal |
|---|---|
mod_paypal/function.php |
Wrapper autour de l’API PayPal (création de commande, capture, vérif). |
mod_paypal/submit.php |
UI qui injecte un bouton “Pay with PayPal” dans le formulaire de devis/facture. |
mod_paypal/config.php |
Interface d’administration : champs Client ID, Secret, Mode (Sandbox / Production). |
mod_paypal/icon.png |
Icône du module dans la liste des modules. |
mod_paypal/receipts.php |
Affiche le reçu PayPal directement depuis la fiche paiement. |
Code compact (exemple pour création d’une commande)
require_once '$_SERVER[DOL_HOME]/core/modules/mod_paypal/function.php';
$order = Dolibarr::createOrderLine([
'label' => 'Abonnement mensuel',
'price' => $amount,
'quantity' => 1,
'currency' => $conf->currency->i,
'payment_method' => 'paypal',
]);
$order->paypal_create_order(); // utilise le SDK sous‑couche
6️⃣ Jour 13‑15 – Intégration UI & Tests Fonctionnels
- Bouton de paiement
- Dans
customers,pro-forms,invoices, afficher le bouton « Arrêter paiement PayPal » intégré via le SDK Smart Payment Buttons ou le mini‑checkout REST.
- Dans
- Redirection
- Après création de l’Order, PayPal redirige vers
return_url(ex./paypal/return.php?token=XYZ).
- Après création de l’Order, PayPal redirige vers
- Gestion du retour
- Le script de retour capture le token et l’appel au capture.
- Tests fonctionnels
- Scenarios : paiement complet, paiement annulé, paiement partiel, paiement échoué.
- Utilisation du mode Sandbox pour toutes les réponses.
- Vérifier que le statut de la facture dans Dolibarr passe à Paid et que le champ
paide/payment_refest mis à jour.
7️⃣ Jour 16‑20 – Sécurisation & Conformité
| Action | Pourquoi |
|---|---|
| Chiffrement SSL | L’API PayPal exige TLS 1.2+. Activez SSL sur votre serveur (openssl min_proto_version 1.2). |
| Limitation des scopes | Ne demandez que les scopes strictement nécessaires (payment, invoice). |
| Double‑validation du webhook | Toujours vérifier la signature et le PAYPAL-TRANSMISSION-ID. |
| Sauvegarde du token PayPal | Stockez un client_id chiffré en base (crypt() ou openssl_encrypt) pour éviter les fuites. |
| Gestion des erreurs | Retourner HTTP 500 avec message détaillé uniquement en environnement de dev ; en prod, renvoyer une réponse générique et logger. |
| Conformité PCI‑DSS | En mode Hosted Checkout, le paiement se fait directement sur les pages PayPal → vous êtes hors du scope. En mode Direct API, vous devez vous conformer (non requis dans notre implémentation via webhook). |
8️⃣ Jour 21‑25 – Optimisations & Documentation
| Point | Détails |
|---|---|
| Mode “Capture automatique” | Décider si la capture doit être immédiate (capture) ou différée (ex. paiement en plusieurs fois). |
| Gestion des remboursements | Ajout d’un endpoint /paypal/refund qui utilise le SDK refund et crée un return dans Dolibarr. |
| Mise à jour du journal de paiement | Ajout de champs paypal_txn_id, paypal_status. |
| Documentation interne | Créer un README.md avec : |
- Installation du module
- Paramètres de configuration
- Guide de test sandbox
- Guide de migration vers production
- FAQ (erreurs courantes)
| Mise à jour de la matrice de suivi | Importer le projet dans Trello/Asana et fermer les tickets traversés. |
9️⃣ Jour 26‑30 – Validation & Déploiement en Production
- Passage en production
- Changer le mode dans le module (
sandbox→production). - Mettre à jour les credentials avec ceux du compte Business réel.
- Changer le mode dans le module (
- Tests de charge
- Simuler 100 requêtes simultanées (via
abouk6) pour vérifier que les appels PayPal respectent les limites de taux.
- Simuler 100 requêtes simultanées (via
- Formation de l’équipe support
- Walker them through le module, expliquer où trouver le log, comment activer/désactiver le webhook, comment réinitialiser les clés.
- Plan de rollback
- Conserver les fichiers avant modification (
cp -r mod_paypal mod_paypal.bak). - Si une anomalie critique, désactiver le webhook dans l’admin.
- Conserver les fichiers avant modification (
- Mise en production
- Déployer via Git (
git push→ compressage) → Purger le cache (php -r "require_once DOL_STARTUP; dolibarr_clear_cache();"). - Vérifier le tableau de bord PayPal → Webhooks pour confirmer la réception du statut
webhook_id.
- Déployer via Git (
Livrable final : Module PayPal fonctionnel avec interface d’administration, traitement des paiements, webhook sécurisé, documentation complète et guide de migration.
📌 Points Clés à Ne Pas Manquer
| Thème | Astuce |
|---|---|
| Webhook | PayPal envoie le même event_id une seule fois – assurez‑vous de le stocker pour éviter les duplications. |
| Idempotence | Utilisez l’ID de transaction (paypal_txn_id) comme clé unique pour éviter les doubles captures. |
| Retours d’erreur | PayPal renvoie parfois des erreurs temporaires (429, 502). Implémentez une logique de retry exponentiel. |
| Contrôle de la devise | Le montant PayPal est arroundé au centième le plus proche – alignez avec la devise de Dolibarr. |
| Événements de dispute | Lancez des alertes si un désaccord apparaît (dispute.created) – utile pour le service client. |
🎉 Conclusion
En suivant ce framework en 30 jours, vous passez de la découverte de l’API PayPal à une intégration native dans Dolibarr : création de commande, capture, webhook sécurisé, UI client‑friendly et documentation interne. Vous avez ainsi :
- ✅ Automatisation de la conciliation des paiements,
- ✅ Visibilité du flux d’argent en temps réel,
- ✅ Conformité PCI‑DSS (via Checkout hébergé) et sécurité des webhooks,
- ✅ Processus reproductible pour les projets futurs (intégrations supplémentaires telles que Stripe, Adyen, …).
Bon développement ! Si vous avez besoin d’exemples de code plus détaillés ou d’un audit de config, n’hésitez pas à me le demander. 🚀