Accepter un paiement PayPal
Comment accepter les paiements PayPal, un portefeuille électronique populaire auprès des entreprises européennes.
Configurer StripeCôté serveur
Pour commencer, vous devez créer un compte Stripe. Inscrivez-vous maintenant.
Utilisez nos bibliothèques officielles pour accéder à l’API Stripe depuis votre application :
Créer un PaymentIntentCôté serveur
Stripe utilise un objet de paiement, appelé PaymentIntent, pour suivre et gérer tous les états du paiement jusqu’à sa finalisation. Créez un PaymentIntent
sur votre serveur, en spécifiant le montant à collecter et la devise. Si vous avez déjà créé une intégration à l’aide de l’API Payment Intents, ajoutez paypal
à la liste des types de moyens de paiement de votre PaymentIntent.
Le PaymentIntent renvoyé contient la clé secrète du client, qui est utilisée pour finaliser le paiement de manière sécurisée au lieu de transmettre la totalité de l’objet PaymentIntent. Renvoyez la clé secrète au client pour pouvoir l’utiliser ultérieurement.
Inclure une description personnalisée
Par défaut, les détails de la commande sur la page d’activité d’achat des utilisateurs PayPal affichent le montant de la commande. Vous pouvez modifier cette configuration en saisissant une description personnalisée dans la propriété description
.
Personnaliser la langue préférée
Par défaut, la page d’autorisation PayPal est localisée en fonction de variables telles que le pays du marchand. Vous pouvez définir la langue préférée de votre client à l’aide de la propriété preferred_
. La valeur doit être un code de langue à deux caractères en minuscules, suivi d’un trait d’union (-
), suivi d’un code de pays à deux caractères en majuscules. Par exemple, la valeur pour un utilisateur de langue française en Belgique serait fr-BE
.
Vous pouvez définir la page d’autorisation PayPal en fonction des paramètres locaux préférés de votre client grâce à la propriété preferred_locale. Consultez le tableau suivant pour connaître les paramètres locaux pris en charge :
Valeur | Région | Pays |
---|---|---|
cs-CZ | Tchèque | République tchèque |
da-DK | Danois | Danemark |
de-AT | Allemand | Autriche |
de-DE | Allemand | Allemagne |
de-LU | Allemand | Luxembourg |
el-GR | Grec | Grèce |
en-GB | Anglais | Royaume-Uni |
fr-FR | Anglais | États-Unis d’Amérique |
es-ES | Espagnol | Espagne |
fi-FI | Finnois | Finlande |
fr-BE | Français | Belgique |
fr-FR | Français | France |
fr-LU | Français | Luxembourg |
hu-HU | Hongrois | Hongrie |
it-IT | Italien | Italie |
nl-BE | Néerlandais | Belgique |
nl-NL | Néerlandais | Pays-Bas |
pl-PL | Polonais | Pologne |
pt-PT | Portugais | Portugal |
sk-SK | Slovaque | Slovaquie |
sv-SE | Suédois | Suède |
Libellés de relevé bancaire avec PayPal
Le libellé qui apparaît sur le relevé bancaire de l’acheteur est défini par PayPal et est par défaut PAYPAL *YOUR_
. Si vous définissez le champ statement_
lors de la création du PaymentIntent
, sa valeur est ajoutée à celle définie par PayPal, dans la limite de 22 caractères.
Par exemple, si le nom de votre entreprise dans PayPal est BUSINESS
et que vous configurez statement_
sur order_
, la mention PAYPAL *BUSINESS order
apparaîtra sur le relevé de compte bancaire de vos clients.
Soumettre le paiement à StripeCôté client
Lorsqu’un client clique pour payer avec PayPal, utilisez Stripe.js pour soumettre le paiement à Stripe. Stripe.js est la bibliothèque JavaScript de base pour créer les tunnels de paiement : elle gère automatiquement les opérations complexes telles que la redirection décrite ci-dessous, et facilite l’extension de votre intégration à d’autres moyens de paiement. Incluez le script Stripe.js sur votre page de paiement en l’ajoutant à la section head
de votre fichier HTML.
<head> <title>Checkout</title> <script src="https://js.stripe.com/clover/stripe.js"></script> </head>
Créez une instance de Stripe.js avec le code JavaScript suivant sur votre page de paiement.
// Set your publishable key. Remember to change this to your live publishable key in production! // See your keys here: https://dashboard.stripe.com/apikeys const stripe = Stripe(
);'pk_test_TYooMQauvdEDq54NiTphI7jx'
Pour créer un paiement côté client, transmettez la clé secrète du client de l’objet PaymentIntent
créé à l’étape 2. La clé secrète du client est distincte des clés API authentifiant vos requêtes à l’API Stripe. Elle doit être utilisée avec prudence, car elle peut servir à réaliser le paiement. Ne l’enregistrez pas, ne l’intégrez pas dans des URL et ne la dévoilez à personne d’autre que votre client.
Confirmer le paiement PayPal
Appelez stripe.confirmPayPalPayment pour rediriger votre client vers PayPal pour finaliser le paiement. Ajoutez une URL return_
pour indiquer la page vers laquelle Stripe doit rediriger votre client une fois le paiement effectué. Vous pouvez également ajouter le paramètre return_
pour les nouveaux moyens de paiement PayPal, mais ce n’est pas obligatoire lorsque vous utilisez un moyen de paiement PayPal préalablement configuré avec un SetupIntent ou un PaymentIntent qui inclut setup_
.
// Redirects away from the client const {error} = await stripe.confirmPayPalPayment( '{{PAYMENT_INTENT_CLIENT_SECRET}}', { return_url: 'https://example.com/checkout/complete', } ); if (error) { // Inform the customer that there was an error. }
Si vous versez vos fonds PayPal à l’aide de PayPal, le montant de l’opération sur solde associée au paiement sera égal à zéro quel que soit le montant du paiement, car l’opération représente l’argent transféré vers et depuis votre solde Stripe. En revanche, pour PayPal, les fonds sont versés sur votre solde PayPal et aucun montant n’est versé sur votre solde Stripe. Dans ce cas, l’opération sur solde inclut également les frais qui lui sont associés. En savoir plus sur la préférence de versement.
Effectuer la redirection
Les paramètres de requête d’URL suivants sont fournis lorsque Stripe redirige le client vers l’URL return_
.
Paramètre | Description |
---|---|
payment_ | L’identifiant unique du PaymentIntent . |
payment_ | La clé secrète du client de l’objet PaymentIntent . |
Vous pouvez également ajouter vos propres paramètres de requête lorsque vous fournissez l’url de retour return_
. Ceux-ci resteront activés pendant toute la durée du processus de redirection. Le paramètre return_
doit correspondre à une page de votre site Web sur laquelle l’état du paiement est fourni. Vous devez vérifier l’état du PaymentIntent
lors de l’affichage de la page de retour. Vous pouvez le faire en utilisant la fonction retrievePaymentIntent
de Stripe.js et en transmettant payment_
.
(async () => { const url = new URL(window.location); const clientSecret = url.searchParams.get('payment_intent_client_secret'); const {paymentIntent, error} = await stripe.retrievePaymentIntent(clientSecret); if (error) { // Handle error } else if (paymentIntent && paymentIntent.status === 'succeeded') { // Handle successful payment } })();
Vous trouverez le nom, l’adresse e-mail, l’ID du payeur et l’ID de la transaction du payeur dans la propriété payment_method_details.
Champ | Valeur |
---|---|
payer_ | L’adresse e-mail du payeur sur son compte PayPal. |
payer_ | Le nom du payeur sur son compte PayPal. |
payer_ | L’identifiant unique du compte PayPal du payeur. |
transaction_ | Un ID de transaction unique généré par PayPal. |
{ "charges": { "data": [ { "payment_method_details": { "paypal": { "payer_id": "H54KFE9XXVVYJ", "payer_email": "jenny@example.com", "payer_name": "Jenny Rosen", "transaction_id": "89W40396MK104212M" }, "type": "paypal" }, "id": "src_16xhynE8WzK49JbAs9M21jaR", "object": "source", "amount": 1099, "client_secret": "src_client_secret_UfwvW2WHpZ0s3QEn9g5x7waU", "created": 1445277809, "currency": "eur", "flow": "redirect",
FacultatifGérer les événements post-paiement
Stripe envoie un événement payment_intent.succeeded à l’issue du paiement. Utilisez le Dashboard, un webhook personnalisé ou une solution partenaire pour recevoir ces événements et exécuter des actions, comme envoyer une confirmation de commande par e-mail à votre client, enregistrer la vente dans une base de données ou lancer un workflow de livraison.
Plutôt que d’attendre un rappel de votre client, écoutez ces événements. En effet, côté client, l’acheteur pourrait fermer la fenêtre de son navigateur ou quitter l’application avant l’exécution du rappel. Des personnes malveillantes peuvent en profiter pour manipuler la réponse. Si vous configurez votre intégration de manière à écouter les événements asynchrones, cela vous permettra également d’accepter de nouveaux moyens de paiement plus facilement à l’avenir. Apprenez-en davantage sur les différences entre les différents moyens de paiement pris en charge.
Recevoir des événements et exécuter des actions métier
Plusieurs options s’offrent à vous pour recevoir et exécuter des actions métier.
Manuellement
Utilisez le Dashboard pour consulter tous vos paiements Stripe, envoyer des reçus par e-mail, gérer les virements et relancer les paiements ayant échoué.
Code personnalisé
Créez un gestionnaire de webhooks pour écouter des événements et créer des tunnels de paiement asynchrones personnalisés. Testez et déboguez votre intégration de webhooks en local, grâce à la CLI Stripe.
Applications préconfigurées
Intégrez une application partenaire pour gérer les événements métier courants, comme l’automatisation, le marketing ou les ventes.
FacultatifGérer la redirection PayPal manuellement
Stripe.js vous aide à ajouter d’autres moyens de paiement à votre intégration. Cependant, vous pouvez rediriger vos clients manuellement vers votre serveur.
- Créez et confirmez un PaymentIntent de type
paypal
. En spécifiantpayment_
, vous créez un PaymentMethod qui est utilisé immédiatement avec ce PaymentIntent.method_ data
Vous devez également fournir dans le champ return_
l’URL vers laquelle le client est redirigé une fois qu’il a finalisé son paiement. Vous pouvez fournir vos propres paramètres de requête dans cette URL. Ces paramètres seront inclus dans l’URL finale à l’issue du flux de redirection.
- Vérifiez que le
PaymentIntent
a l’étatrequires_
et que le type deaction next_
estaction redirect_
.to_ url
{ "status": "requires_action", "next_action": { "type": "redirect_to_url", "redirect_to_url": { "url": "https://hooks.stripe.com/...", "return_url": "https://example.com/checkout/complete" } }, "id": "pi_1G1sgdKi6xqXeNtkldRRE6HT", "object": "payment_intent", ... }
- Redirigez le client vers l’URL fournie dans la propriété
next_
. Cet exemple de code fourni ici n’a qu’une valeur illustrative : la méthode de redirection peut différer sur votre framework Web.action. redirect_ to_ url. url
Le client est redirigé vers l’URL return_
une fois qu’il a effectué le paiement. Les paramètres de la requête d’URL payment_
et payment_
sont inclus avec tous vos propres paramètres. Stripe recommande de configurer un endpoint de webhook pour configurer l’état d’un paiement par voie programmatique.
FacultatifAutoriser un paiement et le saisir ultérieurement
PayPal prend en charge l’autorisation et la capture distinctes. Si vous avez opté pour la réception des fonds sur votre compte Stripe, vos autorisations sont valables pendant 10 jours. Stripe réautorise automatiquement le paiement pour prolonger la période d’autorisation de 10 jours supplémentaires, ce qui correspond à un total de 20 jours. Si la réautorisation ne fonctionne pas, Stripe fait expirer le paiement au bout de 10 jours. Écoutez le webhook charge.expired pour connaître la date de fin de la période d’autorisation.
Si vous avez choisi de recevoir les fonds sur PayPal, vos autorisations restent valides durant 3 jours. Stripe tente de prolonger la période d’autorisation de 3 jours supplémentaires. Pour bénéficier d’une période d’autorisation garantie étendue pouvant aller jusqu’à 10 jours, appelée honor period dans PayPal, contactez le service de support de PayPal.
Indiquez à Stripe d’autoriser seulement
Pour indiquer que vous souhaitez une autorisation et une capture séparées, définissez capture_method sur manual
lors de la création du PaymentIntent. Ce paramètre indique à Stripe de n’autoriser que le montant figurant sur le compte PayPal du client.
Une fois l’autorisation accordée, Stripe envoie un événement payment_intent.amount_capturable_updated. Pour en savoir plus, consultez notre guide des événements.
Capturer les fonds
Une fois l’autorisation réussie, l’état du PaymentIntent passe à requires_
. Pour capturer les fonds autorisés, faites une requête de capture PaymentIntent. Le montant total autorisé est capturé par défaut ; vous ne pouvez pas capturer un montant supérieur à cette valeur, mais vous pouvez capturer un montant inférieur.
Facultatif Annuler l’autorisation
Si vous devez annuler une autorisation, vous pouvez annuler le PaymentIntent correspondant.
FacultatifActiver les moyens de paiement asynchrones sur PayPal
Par défaut, Stripe autorise uniquement les moyens de paiement synchrones sur PayPal. Vous recevez ainsi une notification immédiate vous informant de la réussite ou de l’échec de chaque paiement. Si vous autorisez les moyens de paiement asynchrones, vous pouvez recevoir des notifications différées pour certains paiements. Vous devrez alors utiliser des endpoints de webhook pour recevoir des notifications concernant la réussite ou l’échec de certains paiements.
Pour activer les paiements asynchrones sur PayPal, contactez le service Support de Stripe.
FacultatifCodes d'erreur
Il s’agit des codes d’erreur les plus courants lors d’une intégration avec PayPal. Si une requête à l’API PayPal a renvoyé l’erreur, elle inclut un code d’émission PayPal et l’ID de débogage associé à la requête. Vous pouvez utiliser cet ID de débogage lorsque vous contactez le service de support de PayPal pour obtenir de l’aide sur votre problème.
Code d’erreur | Détails |
---|---|
country_ | Le code de pays indiqué dans l’adresse de livraison n’est pas valide. |
incorrect_ | L’adresse de livraison indiquée n’est pas valide. Cette erreur peut aussi être déclenchée si le pays spécifié nécessite également une ville ou un code postal. Pour plus d’informations, veuillez vérifier le message d’erreur et contacter le service de support PayPal en lui fournissant le Debug ID et le code PayPal issue . |
payment_ | Le moyen de paiement paypal n’est pas disponible pour l’instant. Cette erreur peut être due à une expiration du délai d’attente ou à un problème de serveur lors de la connexion à l’API PayPal. |
payment_ | La transaction est refusée par PayPal. Cela est généralement dû aux paramètres de protection contre la fraude du marchand, à une violation de la conformité, ou à l’impossibilité pour le payeur de payer avec l’instrument de financement choisi. Pour plus d’informations, examinez le message d’erreur et contactez le service de support de PayPal en lui fournissant le Debug ID et le code PayPal issue . |
payment_ | La requête a expiré pour Paypal. Dans la plupart des cas, il s’agit d’une erreur temporaire et vous pouvez relancer la requête après quelques instants. |
payment_ | Le moyen de paiement paypal n’est pas activé pour votre compte Stripe. |
payment_ | La requête a échoué pour PayPal. Cela peut se produire si le compte d’entreprise du client a été verrouillé, limité, ou fermé par PayPal, ou si le compte Paypal du payeur est limité. Pour plus d’informations, examinez le message d’erreur et contactez le service de support de PayPal en lui fournissant le Debug ID et le code PayPal issue . |
FacultatifTester l'intégration PayPal
Pour simuler un paiement réussi sur votre intégration PayPal, utilisez vos clés API de test et accédez à la page de redirection. Cette page vous donne la possibilité d’Autoriser ou de Faire échouer l’authentification de l’utilisateur selon plusieurs scénarios test. Lorsque vous sélectionnez Autoriser le paiement test, le PaymentIntent passe de l’état requires_
à succeeded
.
Pour tester un échec d’authentification de l’utilisateur, utilisez vos clés API de test et accédez à la page de redirection. Sur cette page, cliquez sur Faire échouer le paiement test. Votre PaymentIntent bascule alors de l’état requires_
à requires_
.
Pour simuler les scénarios d’intégration et d’échec les plus communs pour les paiements PayPal, transmettez des valeurs email
correspondant aux modèles de la section Scénarios test lorsque vous créez le PaymentIntent dans les informations de facturation. Par exemple, lors de la confirmation du PaymentIntent côté serveur, voilà à quoi ressemble une requête qui simule une transaction refusée par PayPal :
Scénarios de test
E-mail type | Scénario | Explication |
---|---|---|
. | Compte marchand soumis à des restrictions | Si votre compte marchand est limité par PayPal, la capture ou l’autorisation du paiement échoue avec l’erreur payment_ . Pour faire échouer l’autorisation, veuillez indiquer une adresse e-mail correspondant à ce modèle au moment de l’autorisation. |
. | Transaction refusée | Si la transaction est refusée par PayPal, la capture du paiement échoue avec l’erreur payment_ . |
. | Instrument de paiement refusé | Si l’instrument présenté est refusé par le prestataire de services de paiement ou la banque, ou bien qu’il ne peut pas être utilisé pour ce paiement, la capture du paiement échoue avec l’erreur payment_ . |
. | Capturer manuellement un paiement autorisé | Si l’autorisation a déjà expiré, la capture du paiement autorisé échoue avec l’erreur capture_ . |