Accepter un paiement OXXO
Découvrez comment accepter les paiements effectués à l'aide de OXXO, un moyen de paiement très répandu au Mexique.
Mise en garde
Le contenu de cette section fait référence à un produit antérieur. Vous devez plutôt consulter le guide relatif à l’acceptation d’un paiement pour en savoir plus sur le chemin d’intégration le plus récent. Stripe prend toujours en charge ce produit, néanmoins cette prise en charge peut prendre fin si le produit devient obsolète.
Les utilisateurs de Stripe au Mexique peuvent accepter des paiements OXXO de clients situés au Mexique grâce aux API Payment Intents et Payment Methods. Les clients procèdent au paiement en espèces dans un commerce de proximité OXXO en fournissant un coupon OXXO doté d’un numéro généré automatiquement. Stripe vous informe lorsque le paiement est effectué.
Configurer StripeCôté serveur
Tout d’abord, il vous faut un compte Stripe. S’inscrire.
Utilisez nos bibliothèques officielles pour accéder à l’API Stripe depuis 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 coupon OXXO à la finalisation du règlement.
Créez un PaymentIntent sur votre serveur en spécifiant un montant et la devise mxn
(OXXO n’accepte pas d’autres devises). Si votre intégration inclut déjà l’API Payment Intents, ajoutez oxxo
à la liste des types de moyens de paiement pour votre PaymentIntent
.
Récupérer la clé secrète du client
Le PaymentIntent contient une clé secrète à utiliser côté client pour finaliser le processus de paiement en toute sécurité. Vous pouvez adopter différentes approches pour transmettre cette clé secrète côté client.
Options supplémentaires du moyen de paiement
Vous pouvez assigner à votre PaymentIntent
un paramètre facultatif expires_
dans les options du moyen de paiement, afin de configurer le nombre de jours calendaires avant l’expiration d’un coupon OXXO. Par exemple, si vous créez un coupon OXXO le lundi avec un paramètre expires_
de 2, le coupon OXXO expirera le mercredi suivant à 23 h 59, heure de la ville de Mexico (America/Mexico_City : UTC-6). La valeur du paramètre expires_
doit être comprise entre 1 et 7 jours. Par défaut, elle est de 3 jours.
Collecter les informations du moyen de paiementCôté client
Créez un formulaire de paiement côté client pour collecter les informations de facturation du client :
Champ | Valeur |
---|---|
name | Le nom et le prénom du client. Chacun doit comporter au moins deux caractères. |
email | L’adresse e-mail complète du client. |
<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="email"> Email </label> <input id="email" name="email" required> </div> <!-- Used to display form errors. --> <div id="error-message" role="alert"></div> <button id="submit-button">Pay with OXXO</button> </form>
Soumettre le paiement à StripeCôté client
Lorsqu’un client clique pour payer avec OXXO, 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 de paiement 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.confirmOxxoPayment 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 OXXO.
const form = document.getElementById('payment-form'); form.addEventListener('submit', async (event) => { event.preventDefault(); const result = await stripe.confirmOxxoPayment( '{{PAYMENT_INTENT_CLIENT_SECRET}}', { payment_method: { billing_details: { name: document.getElementById('name').value, email: document.getElementById('email').value, }, }, }); // Stripe.js will open a modal to display the OXXO 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 bon OXXO 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é état de l’objet. Si la création du bon OXXO é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 coupon OXXO. Si vous souhaitez envoyer à votre client un e-mail contenant un lien vers le coupon, vous pouvez récupérer le PaymentIntent afin d’obtenir un lien lors de la réception de l’événement. Le champ hosted_
de payment_intent.next_action.oxxo_display_details contient un lien vers le coupon.
Facultatif : Personnaliser votre coupon
Stripe permet de personnaliser les interfaces utilisateur sur 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
OXXO est un moyen de paiement à notification différée, ce qui signifie que les fonds ne sont pas disponibles immédiatement. Il est possible que les clients ne se rendent pas immédiatement dans un magasin pour régler le coupon OXXO.
Stripe envoie un événement payment_intent.succeeded le jour ouvrable suivant (du lundi au vendredi, sauf jours fériés mexicains) pour chaque coupon OXXO payé. Utilisez le Dashboard ou créez un gestionnaire de webhooks 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).
Une fois la date d’expiration passée, l’état du PaymentIntent passe à processing
et le client ne peut plus effectuer le règlement du coupon OXXO expiré. Si le coupon OXXO n’est pas payé avant 23 h 59, heure de la ville de Mexico (America/Mexico_City : UTC-6) le jour de son expiration, Stripe envoie un événement payment_intent.payment_failed au plus tard 10 jours calendaires (et le plus souvent moins de 7 jours) après la date d’expiration. Par exemple si le coupon OXXO expire le 1er septembre, l’évènement sera envoyé au plus tard le 10 septembre.
Événement | Description | Étapes suivantes |
---|---|---|
payment_ | Le coupon OXXO a bien été créé. | Attendez que le client règle le coupon OXXO. |
payment_ | Le client ne peut plus régler le coupon OXXO. | Attendez que le paiement réussisse ou échoue. |
payment_ | Le client a réglé le coupon OXXO avant son expiration. | Traitez la commande de biens ou de services de votre client. |
payment_ | Le client n’a pas réglé le coupon OXXO avant son expiration. | Envoyez un e-mail ou une notification push au client pour lui demander d’utiliser un autre moyen de paiement. |
Recevoir des événements et exécuter des actions métier
Manuellement
Utilisez le Dashboard Stripe pour consulter tous vos paiements Stripe, envoyer des reçus par e-mail, gérer les virements et relancer les paiements en échec.
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.
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.
Adresse e-mail | Description |
---|---|
| Simule un coupon OXXO réglé par le client au bout de 3 minutes et pour lequel le webhook Exemple : fulano@test.com |
| Simule un coupon OXXO immédiatement réglé par le client et pour lequel le webhook Exemple : succeed_immediately@test.com |
| Simule un coupon OXXO qui expire avant le règlement du client et pour lequel le webhook Le champ Exemple : expire_immediately@test.com |
| Simule un coupon OXXO qui expire avant le règlement du client et pour lequel le webhook Le champ Exemple : expire_with_delay@test.com |
| Simule un coupon OXXO qui expire avant le règlement du client et pour lequel le webhook Exemple : fill_never@test.com |
Expiration et annulation
Les coupons OXXO expirent après l’horodatage Unix expires_
. Une fois le coupon OXXO expiré, le client ne peut plus effectuer le règlement. Les coupons OXXO ne peuvent pas être annulés avant leur expiration.
Après expiration d’un coupon OXXO, l’état du PaymentIntent passe à requires_
. Vous pouvez alors confirmer le PaymentIntent avec un autre moyen de paiement, ou l’annuler.