Intégration · Paiement en ligne

Brancher PayPal sur votre logiciel : commandes, captures et litiges

PayPal se connecte à un logiciel métier par des API REST authentifiées en OAuth 2.0 : commandes (Orders v2), captures et remboursements (Payments v2), abonnements, factures, recherche de transactions et litiges. Des webhooks signés préviennent le logiciel de chaque événement, et la documentation PayPal décrit deux façons d'en vérifier la signature avant d'agir.

L'essentiel

  • Chaque appel aux API REST de PayPal porte un jeton OAuth 2.0, obtenu en échangeant l'identifiant client et le secret de l'application sur /v1/oauth2/token.
  • PayPal renvoie un webhook jusqu'à 25 fois sur 3 jours tant que le serveur destinataire ne répond pas par un code 2xx.
  • Un paiement PayPal autorisé bénéficie d'une période de garantie de 3 jours et peut être réautorisé pendant une période d'autorisation de 29 jours.
  • PayPal ne publie pas de limites d'appels chiffrées et recommande les webhooks plutôt que l'interrogation répétée, ainsi que la réutilisation du jeton jusqu'à son expiration.

Que faut-il avant la première ligne de code ?

Il faut un compte développeur PayPal, une application REST et, pour la production, un compte PayPal Business.

  1. Créer l'application dans le tableau de bord développeur, rubrique Apps & Credentials : PayPal fournit un identifiant client (client ID) et un secret, à garder confidentiel.
  2. Obtenir un jeton : le logiciel envoie l'identifiant et le secret à /v1/oauth2/token avec grant_type=client_credentials, et reçoit un jeton Bearer dont la durée de validité, en secondes, figure dans la réponse.
  3. Tester dans le bac à sable : l'adresse https://api-m.sandbox.paypal.com remplace https://api-m.paypal.com, et deux comptes fictifs sont fournis par défaut, un acheteur et un vendeur.
  4. Passer en production avec les identifiants de l'application live.

PayPal recommande de garder le jeton en cache et de le réutiliser jusqu'à son expiration, au lieu d'en demander un nouveau à chaque requête.

Quelle API PayPal pour quel besoin de gestion ?

PayPal découpe son offre en plusieurs API REST. Celles qui intéressent un logiciel de gestion, d'après la documentation consultée en octobre 2026 :

API PayPalCe qu'elle faitExemple d'usage
Orders v2 (/v2/checkout/orders)Créer une commande, la consulter, la modifier tant qu'elle est CREATED ou APPROVED, autoriser ou capturer le paiement, ajouter un suivi de colisEncaisser une commande validée dans le logiciel
Payments v2 (/v2/payments)Consulter, capturer, réautoriser ou annuler une autorisation ; rembourser une captureCapturer à l'expédition, rembourser un retour
Subscriptions v1 (/v1/billing)Plans à prix fixe, au volume ou par paliers ; abonnements créés, suspendus, annulés, révisésAbonnement mensuel à un service
InvoicingCréer, modifier, envoyer et gérer des factures, avec relances automatiques et paiements partielsFacture partagée par lien, e-mail ou code QR
Transaction Search (/v1/reporting/transactions)Historique des transactions des trois dernières annéesRapprochement comptable
Disputes (/v1/customer/disputes)Lister les litiges, fournir des preuves, accepter, proposer une offreDéfendre une réclamation client
Payment Method Tokens (/v3/vault)Enregistrer une carte ou un compte PayPal pour un paiement ultérieurPaiement déclenché sans le client

Autoriser, capturer, rembourser : les délais imposés par PayPal

Une commande PayPal peut être capturée tout de suite ou seulement autorisée, la capture venant plus tard. L'API Payments v2 encadre l'autorisation par des délais précis :

  • une période de garantie (honor period) de 3 jours suit l'autorisation ; la réautorisation, qui vérifie que les fonds sont toujours disponibles, n'est possible qu'après cette période ;
  • la réautorisation se fait dans la période d'autorisation de 29 jours, du 4e au 29e jour après l'autorisation d'origine ; la référence de l'API est ambiguë sur le nombre de réautorisations admises, un point à tester dans le bac à sable ;
  • passé 30 jours après l'autorisation d'origine, il faut créer un nouveau paiement autorisé, et l'événement PAYMENT.AUTHORIZATION.VOIDED signale l'autorisation expirée ;
  • une autorisation entièrement capturée ne peut plus être annulée.

Pour les remboursements, un corps de requête vide rembourse toute la capture et un objet amount en rembourse une partie. Le montant ne peut pas dépasser ce qui reste à rembourser (erreur REFUND_AMOUNT_EXCEEDED), et PayPal applique une limite de temps dont la référence ne donne pas la durée (erreur REFUND_TIME_LIMIT_EXCEEDED). Un logiciel de service après-vente affiche ces refus à l'opérateur au lieu de les laisser dormir dans un journal.

Webhooks PayPal : abonnement, signature et réessais

Une application PayPal peut abonner jusqu'à 10 adresses de webhook, chacune à une liste d'événements ou à tous. Pour un logiciel de gestion, les événements de paiement les plus utiles sont les suivants.

Événement PayPalSignification
PAYMENT.CAPTURE.COMPLETEDCapture terminée : la commande peut passer en payée
PAYMENT.CAPTURE.PENDINGCapture en attente
PAYMENT.CAPTURE.DECLINEDCapture refusée
PAYMENT.CAPTURE.REFUNDEDRemboursement effectué par le marchand
PAYMENT.CAPTURE.REVERSEDCapture annulée par PayPal

Pour s'assurer qu'un message vient bien de PayPal, la documentation propose deux méthodes : calculer le CRC32 du message et vérifier sa signature localement, ou renvoyer le message, l'identifiant du webhook et les en-têtes PAYPAL-TRANSMISSION-ID, PAYPAL-TRANSMISSION-TIME, PAYPAL-TRANSMISSION-SIG, PAYPAL-CERT-URL et PAYPAL-AUTH-ALGO à l'endpoint /v1/notifications/verify-webhook-signature, qui répond SUCCESS ou FAILURE.

Tant que le serveur ne répond pas par un code 2xx, PayPal réessaie jusqu'à 25 fois sur 3 jours. Au-delà, la livraison est marquée Failed et ne repart que sur demande : depuis le tableau de bord des événements de webhook, ou par l'endpoint de l'API Webhooks qui renvoie une notification à partir de son identifiant. Une relecture planifiée des commandes reste donc indispensable.

Quatre usages de PayPal dans un logiciel de gestion

  • La commande payée qui crée la facture. Le logiciel crée une commande Orders v2 avec son propre numéro de facture ; le client approuve, le logiciel capture, puis PAYMENT.CAPTURE.COMPLETED déclenche la facture et la préparation. Si le compte exige un numéro de facture unique, une seconde commande portant le même numéro est refusée (DUPLICATE_INVOICE_ID), ce qui bloque un double encaissement.
  • Le matériel expédié plus tard. Pour une fabrication à la commande, le logiciel autorise à la commande et capture à l'expédition, dans les délais décrits plus haut, puis ajoute le numéro de suivi à la commande PayPal.
  • Le litige client. L'API Disputes liste les litiges et leur échéance de réponse (seller_response_due_date). Le logiciel joint la preuve d'expédition (PROOF_OF_FULFILLMENT, avec le suivi du colis) ou celle d'un remboursement déjà fait. Selon PayPal, la phase d'enquête dure jusqu'à 20 jours, sauf si le litige passe au stade de la réclamation.
  • La clôture mensuelle. La recherche de transactions couvre les trois dernières années, mais une transaction peut mettre jusqu'à trois heures à y apparaître : le rapprochement nocturne porte donc sur la veille.

Pour un client facturé chaque mois, deux voies existent : l'API Subscriptions, où PayPal génère les échéances d'un plan, ou l'enregistrement du moyen de paiement par l'API Payment Method Tokens, que PayPal présente pour la facturation d'abonnements, l'essai gratuit et l'accélération des paiements suivants. Ce second service est ouvert dans 35 pays, dont la France ; pour les cartes, il suppose une intégration Expanded Checkout et une conformité PCI SAQ D.

Erreurs, limites et doublons : ce que PayPal laisse à votre charge

PayPal ne publie pas de limites d'appels chiffrées, car elles varient selon l'API, l'environnement et le contexte. Un dépassement renvoie une erreur 429 ; la documentation conseille d'espacer les nouvelles tentatives de façon croissante, de regrouper les requêtes et de préférer les webhooks à l'interrogation en boucle.

Pour rejouer un POST sans risque après une coupure réseau ou une erreur 500, le logiciel envoie un identifiant unique dans l'en-tête PayPal-Request-Id : tant que PayPal conserve cet identifiant, la requête répétée ne crée pas d'opération en double. Pour la recette, l'en-tête PayPal-Mock-Response simule des erreurs précises, ce qui évite d'attendre qu'un cas rare se produise.

Les données d'acheteurs que le logiciel conserve à partir des réponses PayPal entrent dans votre registre de traitements : notre guide RGPD et logiciel métier rappelle les obligations, et notre guide sécuriser une application métier traite de la garde du secret de l'application.

Bouton PayPal de votre plateforme ou intégration développée ?

Si votre site tourne sur une plateforme e-commerce qui propose déjà PayPal, commencez par activer ce moyen de paiement : l'encaissement en ligne est alors couvert sans développement. Une intégration développée se justifie quand PayPal doit dialoguer avec un logiciel de gestion : capture pilotée par l'expédition, litiges traités depuis le service client, rapprochement automatique, abonnements dont les règles vivent dans votre outil. Pour comparer les prestataires, nos pages intégration Stripe et intégration Mollie posent les mêmes questions.

Chez YMHB Web, le cadrage fixe d'abord les API utilisées, les événements écoutés, les statuts correspondants dans votre logiciel et le traitement des litiges ; le chiffrage suit. L'intégration est développée dans le bac à sable PayPal avec l'application de votre compte, puis basculée en production. Vous recevez :

  • un point de réception qui vérifie chaque signature de webhook avant d'agir ;
  • un PayPal-Request-Id sur chaque création et une relecture planifiée des commandes restées sans réponse ;
  • un journal des échanges et un écran des opérations en anomalie ;
  • le code, déposé chez vous et documenté, et des identifiants qui restent au nom de votre entreprise.

Le principe général est décrit sur notre page connecter ses logiciels par API.

Questions fréquentes

PayPal propose-t-il un bac à sable pour tester une intégration ?

Oui, PayPal fournit un bac à sable accessible à l'adresse api-m.sandbox.paypal.com, avec par défaut deux comptes fictifs : un compte personnel pour acheter et un compte professionnel pour vendre. Ils se gèrent dans la rubrique Sandbox Accounts du tableau de bord développeur. Un compte PayPal Business est ensuite nécessaire pour passer en production.

Comment s'authentifier auprès de l'API PayPal ?

L'API REST de PayPal utilise OAuth 2.0. Le logiciel envoie l'identifiant client et le secret de son application à l'endpoint /v1/oauth2/token, avec grant_type=client_credentials, et reçoit un jeton d'accès à placer dans l'en-tête Authorization en mode Bearer. La durée de validité figure en secondes dans la réponse, et PayPal recommande de réutiliser le jeton jusqu'à son expiration.

Combien de fois PayPal renvoie-t-il un webhook ?

PayPal renvoie un webhook jusqu'à 25 fois sur 3 jours tant que le serveur destinataire ne répond pas par un code 2xx. Au-delà, la livraison est marquée Failed et ne repart que sur demande, depuis le tableau de bord des événements ou par l'endpoint de renvoi de l'API Webhooks de PayPal. Une intégration fiable complète donc les webhooks PayPal par une relecture planifiée des commandes.

Combien de temps peut-on attendre avant de capturer un paiement PayPal autorisé ?

Un paiement PayPal autorisé bénéficie d'une période de garantie de 3 jours, puis peut être réautorisé pendant une période d'autorisation de 29 jours. Au-delà de 30 jours après l'autorisation d'origine, PayPal demande de créer un nouveau paiement autorisé au lieu de réautoriser. Ces délais conviennent à une expédition différée de quelques jours ou semaines, pas à une fabrication de plusieurs mois.

Peut-on gérer les litiges PayPal depuis son propre logiciel ?

Oui, l'API Disputes de PayPal permet de lister les litiges, d'en lire l'échéance de réponse, d'envoyer des messages, de fournir des preuves comme un suivi d'expédition ou un remboursement déjà effectué, d'accepter la réclamation ou de proposer un remboursement ou un remplacement. Le logiciel peut aussi s'abonner aux événements de litige par webhook pour alerter le service client sans attendre.

À lire aussi

Sources

  1. PayPal Developer, Get started with PayPal REST APIs (Apps & Credentials, OAuth 2.0, durée du jeton, deux comptes de bac à sable, compte Business)
  2. PayPal Developer, REST requests (URL de base, PayPal-Request-Id, PayPal-Mock-Response)
  3. PayPal Developer, Webhooks (10 adresses par application, vérification CRC32 ou par l'API, 25 réessais sur 3 jours, statut Failed)
  4. PayPal Developer, Orders v2 API reference
  5. PayPal Developer, Orders v2 error messages
  6. PayPal Developer, Payments v2 API reference (autorisations, captures, remboursements)
  7. PayPal Developer, Subscriptions v1 API reference
  8. PayPal, Rate limiting
  9. PayPal, Payments v2 webhook events
  10. PayPal, Verify webhook signature
  11. PayPal, Transaction Search API (reporting)
  12. PayPal, Use the Disputes API
  13. PayPal, Vault API integration (Payment Method Tokens)
  14. PayPal, Invoicing overview
  15. PayPal Developer, Orders v2, Create order (en-têtes PayPal-Request-Id et Authorization, champ invoice_id)
  16. PayPal Developer, Webhooks Management API v1 (renvoi d'une notification)
  17. PayPal, Refund captured payment (remboursement total ou partiel)
  18. PayPal, Void authorized payment

Prêt à démarrer ?

Décrivez-nous votre situation, pas une liste de fonctionnalités.

Réponse sous un jour ouvré, en général par téléphone. Si un outil du marché suffit, nous vous le dirons.

Premier échange sans engagementCadrage avant chiffrage

AppelerDécrire mon problème