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 en spécifiant un montant et la devise brl
(Boleto n’accepte pas d’autres devises). Si votre intégration inclut déjà l’API Payment Intents, ajoutez boleto
à la liste des types de moyens de paiement valides 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/basil/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 |
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.