Paiements Boleto
Découvrez comment accepter Boleto, un moyen de paiement très répandu au Brésil.
Les utilisateurs de Stripe au Brésil peuvent accepter des paiements Boleto grâce aux API Payment Intents et Payment Methods. Les clients procèdent au paiement en utilisant un coupon Boleto doté d’un numéro généré auprès des distributeurs automatiques de billets, des banques, des portails bancaires ou d’agences autorisées.
Configurer StripeCôté serveur
Pour commencer, vous devez créer un compte Stripe.
Utilisez nos bibliothèques officielles pour accéder à l’API Stripe à partir de votre application :
Créer un PaymentIntentCôté serveur
Pour représenter votre intention d’encaisser le paiement d’un client, Stripe utilise un objet PaymentIntent qui suit les changements d’état du paiement, de la création du bon Boleto à la finalisation du règlement.
Créez un PaymentIntent sur votre serveur avec un montant et la devise brl (Boleto ne prendre en charge les autres devises). Si vous disposez déjà d’une intégration utilisant l’API Payment Intents, ajoutez boleto à la liste des types de moyens de paiement pour votre PaymentIntent.
Le PaymentIntent renvoyé contient la clé secrète du client, que vous devez utiliser pour une exécution sécurisée du processus de paiement. Renvoyez la clé secrète au client afin de pouvoir l’utiliser ultérieurement.
Options supplémentaires du moyen de paiement
Vous pouvez définir le paramètre facultatif expires_ dans les options du moyen de paiement de votre PaymentIntent. Celui-ci permet de paramétrer le nombre de jours calendaires au bout duquel votre bon Boleto expirera. Par exemple, si vous créez un bon Boleto le lundi et que vous définissez expires_ sur 2, le bon Boleto expirera le mercredi à 23 h 59, heure de Sao Paulo (America/Sao_Paulo : UTC-3). Si vous le définissez sur 0, le bon Boleto expirera à la fin de la journée. Le paramètre expires_ accepte une durée comprise entre 0 et 60 jours. La valeur par défaut est de 3 jours. Vous pouvez personnaliser le nombre de jours de validité par défaut dans les paramètres des moyens de paiement de votre compte
Recueillir les informations du moyen de paiementCôté client
Créez un formulaire de paiement côté client pour recueillir les informations de facturation du client :
| Champ | Valeur |
|---|---|
name | Le nom complet du client. |
email | L’adresse e-mail du client. |
tax_ | Le CPF (pour les particuliers) ou le CNPJ (pour les entreprises) du client. Le CPF doit comporter 11 chiffres et être saisi dans l’un des formats suivants : 000. ou 00000000000. Le CNPJ doit comporter 14 chiffres être saisi dans l’un des formats suivants : 00. ou 00000000000000. |
address | Nom de la rue et numéro de l’adresse du client. |
city | Ville de l’adresse du client |
state | Le code ISO (ISO_3166-2:BR) à deux lettres désignant l’état de résidence du client au Brésil. |
postal_ | Le code postal de l’adresse du client. Celui-ci doit être saisi dans l’un des formats suivants : XXXXX-XXX ou XXXXXXXX. |
Remarque
Les champs name, address et city doivent contenir au moins un caractère alphanumérique de la table des caractères Unicode de latin de base (ASCII).
<form id="payment-form"> <div class="form-row"> <label for="name"> Name </label> <input id="name" name="name" required> </div> <div class="form-row"> <label for="tax_id"> CPF/CNPJ </label> <input id="tax_id" name="tax_id" required> </div> <div class="form-row"> <label for="email"> Email </label> <input id="email" name="email" required> </div> <div class="form-row"> <label for="address"> Address </label> <input id="address" name="address" required> </div> <div class="form-row"> <label for="city"> City </label> <input id="city" name="city" required> </div> <div class="form-row"> <label for="state"> State </label> <input id="state" name="state" required> </div> <div class="form-row"> <label for="postal_code"> Postal Code </label> <input id="postal_code" name="postal_code" required> </div> <!-- Used to display form errors. --> <div id="error-message" role="alert"></div> <button id="submit-button">Pay with Boleto</button> </form>
Soumettre le paiement à StripeCôté client
Lorsqu’un client clique pour payer avec Boleto, utilisez Stripe.js pour soumettre le paiement à Stripe. Stripe.js est notre bibliothèque JavaScript de base pour la création de tunnels de paiement.
Intégrez le script Stripe.js à votre page Checkout en l’ajoutant entre les balises 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 switch to your live publishable key in production! // See your keys here: https://dashboard.stripe.com/apikeys const stripe = Stripe();'pk_test_TYooMQauvdEDq54NiTphI7jx'
Utilisez stripe.confirmBoletoPayment et la clé secrète du client de l’objet PaymentIntent créé à l’étape 2 pour envoyer les informations de facturation du client.
Après la confirmation, votre client verra automatiquement s’afficher une fenêtre modale contenant le coupon Boleto.
var form = document.getElementById('payment-form'); form.addEventListener('submit', async (event) => { event.preventDefault(); const result = await stripe.confirmBoletoPayment( '{{PAYMENT_INTENT_CLIENT_SECRET}}', { payment_method: { boleto: { tax_id: document.getElementById('tax_id').value, }, billing_details: { name: document.getElementById('name').value, email: document.getElementById('email').value, address: { line1: document.getElementById('address').value, city: document.getElementById('city').value, state: document.getElementById('state').value, postal_code: document.getElementById('postal_code').value, country: 'BR', }, }, }, } ); // Stripe.js will open a modal to display the Boleto voucher to your customer // This async function finishes when the customer closes the modal if (result.error) { // Display error to your customer const errorMsg = document.getElementById('error-message'); errorMsg.innerText = result.error.message; } });
Remarque
L’exécution de la méthode stripe. peut prendre plusieurs secondes. Pendant ce temps, bloquez le renvoi de votre formulaire et affichez un indicateur d’attente. Si vous recevez une erreur, montrez-la au client, réactivez le formulaire et masquez l’indicateur d’attente.
Une fois le coupon Boleto créé, la valeur de la propriété status du PaymentIntent renvoyé passe à requires_. Vous pouvez vérifier l’état d’un PaymentIntent dans le Dashboard ou en examinant la propriété « status » de l’objet. Si la création du coupon Boleto échoue, examinez la valeur error renvoyée afin de déterminer la cause de cet échec (par exemple, un format d’adresse e-mail non valide).
Facultatif : Envoyer à votre client un e-mail contenant un lien vers le coupon
Stripe envoie un événement payment_intent.requires_action lors de la création d’un bon Boleto. Si vous souhaitez envoyer à vos clients un e-mail contenant un lien vers le bon, localisez l’adresse hosted_ dans payment_intent.next_action.boleto_display_details.
Facultatif : Personnaliser votre coupon
Stripe permet de personnaliser les interfaces utilisateur dans la page Adaptation à votre marque.
Vous pouvez appliquer les paramètres de marque suivants à vos coupons :
- Icône : image représentant votre marque et votre dénomination sociale publique
- Couleur d’accentuation : utilisée comme couleur du bouton Copier le numéro
- Couleur de marque : utilisée comme couleur d’arrière-plan
Gérer les événements post-paiementCôté serveur
Les paiements Boleto sont asynchrones, les fonds ne sont donc pas immédiatement disponibles. Il se peut que les clients ne paient pas le coupon Boleto immédiatement après avoir finalisé la commande.
Stripe envoie un événement payment_intent.succeeded le jour ouvrable suivant (du lundi au vendredi, sauf jours fériés brésiliens) pour chaque bon Boleto payé. Utilisez le Dashboard ou un webhook personnalisé pour recevoir ces événements et exécuter certaines actions (comme l’envoi par e-mail d’une confirmation de commande à votre client, l’enregistrement de la vente dans une base de données ou le lancement d’un flux de livraison).
Si un bon Boleto n’est pas réglé avant sa date d’expiration à 23 h 59, heure de Sao Paulo (America/Sao_Paulo : UTC-3), Stripe envoie un événement payment_intent.payment_failed au bout d’un jour ouvrable. Par exemple, si un bon Boleto expire un jeudi, l’événement est envoyé le vendredi. Si un bon Boleto expire un vendredi, l’événement est envoyé le lundi suivant.
| Événement | Description | Étapes suivantes |
|---|---|---|
payment_ | Le client a réglé le coupon Boleto avant son expiration. | Traitez la commande de biens ou de services du client. |
payment_ | Le client n’a pas réglé le coupon Boleto avant son expiration. | Envoyez un e-mail ou une notification push au client pour lui demander d’utiliser un autre moyen de paiement. |
Tester l'intégration
Dans un environnement de test, définissez payment_ sur les valeurs suivantes lorsque vous appelez stripe.confirmOxxoPayment pour tester différents scénarios.
| Description | |
|---|---|
| Simule un coupon Boleto réglé par le client au bout de 3 minutes et pour lequel le webhook Exemple : fulaninho@example.com |
| Simule un coupon Boleto immédiatement réglé par le client et pour lequel le webhook Exemple : succeed_immediately@example.com |
| Simule un coupon Boleto qui expire avant le règlement du client et pour lequel le webhook Le champ Exemple : expire_immediately@example.com |
| Simule un coupon Boleto qui expire avant le règlement du client et pour lequel le webhook Le champ Exemple : expire_with_delay@example.com |
| Simule un bon Boleto qui ne réussit jamais. Il expire conformément à la valeur du champ Exemple : fill_never@example.com |
| Numéro fiscal | Description |
|---|---|
CPF CNPJ | Dans un environnement de test, définissez le paramètre |
FacultatifCréer votre propre page couponCôté client
Nous recommandons l’utilisation de Stripe.js pour gérer l’affichage du coupon Boleto à l’aide de confirmBoletoPayment. Vous pouvez toutefois gérer manuellement l’affichage du coupon pour vos clients.
Vous pouvez définir le paramètre handleActions: false lorsque vous appelez stripe.confirmBoletoPayment à l’étape 4 afin d’indiquer que vous gérerez l’action suivante consistant à afficher les informations Boleto pour votre client.
var form = document.getElementById('payment-form'); form.addEventListener('submit', async (event) => { event.preventDefault(); const result = await stripe.confirmBoletoPayment( '{{PAYMENT_INTENT_CLIENT_SECRET}}', { payment_method: { boleto: { tax_id: document.getElementById('tax_id').value, }, billing_details: { name: document.getElementById('name').value, email: document.getElementById('email').value, address: { line1: document.getElementById('address').value, city: document.getElementById('city').value, state: document.getElementById('state').value, postal_code: document.getElementById('postal_code').value, country: 'BR', }, }, }, }, {handleActions: false}, ); if (result.error) { // Display error to your customer const errorMsg = document.getElementById('error-message'); errorMsg.innerText = result.error.message; } else { // An Boleto voucher was successfully created const amount = result.paymentIntent.amount; const currency = result.paymentIntent.currency; const details = result.paymentIntent.next_action.boleto_display_details; const number = details.number; const expires_at = details.expires_at; // Handle the next action by displaying the Boleto details to your customer // You can also use the generated hosted voucher const hosted_voucher_url = details.hosted_voucher_url; } });
Inclure au minimum les éléments suivants :
| Détail | Description |
|---|---|
| Numéro | Affichez le numéro du bon Boleto de manière à ce que vos clients puissent facilement le copier dans leur presse-papiers. Repérez le numéro sur l’objet PaymentIntent dans next_action.boleto_display_details.number. |
| Date d’expiration | Affichez la date d’expiration du bon Boleto. Repérez l’horodatage UNIX indiquant la date d’expiration du bon Boleto dans le PaymentIntent, sous next_action.boleto_display_details.expires_at. |
| Télécharger le PDF | Affichez un bouton de téléchargement pour permettre à votre client de télécharger le boleto au format PDF. Repérez le pdf (permettant au client de télécharger le PDF du bon Boleto) dans le PaymentIntent à l’adresse next_action.boleto_display_details.pdf. |
FacultatifConfirmer le PaymentIntent côté serveurCôté serveur
Nous vous recommandons de vous appuyer sur Stripe.js pour confirmer un Payment Intent Boleto avec confirmBoletoPayment. L’utilisation de Stripe.js facilite grandement l’extension de votre intégration à d’autres moyens de paiement. Cependant, vous pouvez également confirmer un Payment Intent côté serveur de la manière suivante :
FacultatifEnvoyer des instructions sur les paiements par e-mail
Vous pouvez activer l’envoi d’instructions sur les paiements Boleto par e-mail sur la page des paramètres de messagerie du Dashboard. Une fois l’option activée, Stripe enverra par e-mail des instructions sur les paiements dès le PaymentIntent confirmé. Les e-mails contiennent le numéro Boleto et un lien vers la page coupon hébergée par Stripe.
Remarque
Dans les environnements de test, seules les adresses e-mail associées au compte Stripe reçoivent des instructions par e-mail.
Expiration et annulation
Les coupons Boleto expirent après l’horodatage Unix expires_. Une fois le coupon Boleto expiré, le client ne peut plus effectuer le règlement. Les coupons Boleto ne peuvent pas être annulés avant leur expiration.
Après expiration d’un coupon Boleto, l’état du PaymentIntent passe à requires_. Vous pouvez alors confirmer le PaymentIntent avec un autre moyen de paiement, ou l’annuler.