Paiements Konbini
Utilisez les API Payment Intents et Payment Methods pour accepter les paiements via Konbini, un moyen de paiement courant dans les commerces japonais.
Les utilisateurs de Stripe au Japon peuvent accepter des paiements Kombini de clients situés au Japon en utilisant les API Payment Intents et Payment Methods. Pour payer, les clients fournissent un code de paiement, un numéro de confirmation et un paiement en espèces dans un commerce de proximité japonais. Stripe vous informe lorsque le paiement est effectué.
Configurer StripeCôté serveur
Pour commencer, vous avez besoin d’un compte Stripe. Inscrivez-vous.
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 depuis la création du PaymentIntent Konbini jusqu’à son exécution.
Créez un PaymentIntent sur votre serveur en précisant un montant et la devise jpy
(Konbini ne prend pas en charge d’autres devises). Si votre intégration inclut déjà l’API Payment Intents, ajoutez konbini
à la liste des types de moyens de paiement valides 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 de moyens de paiement
Les options de moyens de paiement peuvent être définies dans les options des moyens de paiement sous la clé konbini
.
Champ | Valeur | Obligatoire | Valeur par défaut |
---|---|---|---|
expires_ | Nombre de jours calendaires avant l’expiration d’un paiement Konbini en attente. Les valeurs valides sont comprises entre 1 et 60 jours. Consultez la page Expiration. | Non | 3 |
expires_ | Horodatage Unix indiquant la date d’expiration du paiement Konbini en attente. Cette date doit être située à moins de 30 minutes de l’heure actuelle et à moins de 60 jours de l’application du paramètre au PaymentIntent. Consultez la page Expiration. | Non | non définie |
product_ | Libellé produit de 22 caractères maximum, qui s’affiche dans les commerces de proximité pour les clients. La présence de caractères non codés en Shift JIS (JIS X 0208:1997) entraîne le renvoi d’une erreur. Bien que cela ne soit pas obligatoire, nous recommandons de définir cette option. Sinon, nous nous rabattons sur un caractère générique choisi à notre discrétion (par exemple, お買い上げ商品・サービス). | Non | paramètre substituable |
Expiration
Les paiements Konbini en attente expirent juste avant minuit (23 h 59 m 59 s JST) à la date donnée. Par exemple, si le paramètre expires_
est défini sur 2 et que le PaymentIntent est confirmé le lundi, le paiement Konbini en attente expirera le mercredi à 23 h 59 m 59 s heure du Japon (UTC+9).
Le paramètre expires_
est un horodatage Unix exprimé en secondes. Si cette valeur est définie à moins de 30 minutes de l’heure actuelle ou si la confirmation du PaymentIntent est effectuée moins de 30 minutes avant l’heure d’expiration, une erreur sera renvoyée.
Les paramètres expires_
et expires_
s’excluent mutuellement. Une erreur sera renvoyée s’ils sont tous les deux définis. Ils sont également facultatifs, donc si aucun de ces paramètres n’est défini, la date d’expiration par défaut de 3 jours après la création du PaymentIntent s’appliquera à 23 h 59 heure du Japon (UTC+9).
Gestion des erreurs
Les requêtes concernant la création, la mise à jour et la confirmation de PaymentIntents sont susceptibles d’échouer. Vous pouvez identifier la valeur error
de la réponse de l’API pour en déterminer la raison. Ensuite, dans de nombreux cas, soumettez de nouveau votre requête ou corrigez l’erreur. Si vous indiquez une valeur pour l’option de moyen de paiement confirmation_
, vous pourriez notamment vouloir traiter les codes d’erreur spécifiques que nous vous renvoyons. Pour plus de détails, consultez la page consacrée aux numéros de confirmation.
Le moyen de paiement peut parfois devenir indisponible en raison de pannes, de maintenances programmées ou de vos habitudes d’utilisation. Pour plus de détails, consultez la page consacrée à la gestion des problèmes de disponibilité temporaires.
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, tronqué à une longueur maximum de 20 caractères sur les interfaces utilisateur et les reçus des commerces. Les caractères non codés en Shift JIS (JIS X 0208:1997) seront ignorés et remplacés. |
email | L’adresse e-mail complète du client. |
L’exemple de formulaire présenté ici recueille également le numéro de téléphone, lequel sera utilisé comme numéro de confirmation fourni par le 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> <div class="form-row"> <label for="phone"> Phone Number </label> <input id="phone" name="phone" required> </div> <!-- Used to display form errors. --> <div id="error-message" role="alert"></div> <button id="submit-button">Pay with Konbini</button> </form>
Envoyer le paiement à StripeCôté client
Lorsqu’un client clique pour payer avec Konbini, 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.confirmKonbiniPayment et la clé secrète du client de l’objet PaymentIntent que vous avez créé à l’étape 2 pour envoyer les informations de facturation du client.
À la confirmation, Stripe ouvrira automatiquement une fenêtre modale afin d’afficher les instructions associées au paiement Konbini pour votre client.
const form = document.getElementById('payment-form'); form.addEventListener('submit', async (event) => { event.preventDefault(); const result = await stripe.confirmKonbiniPayment( '{{PAYMENT_INTENT_CLIENT_SECRET}}', { payment_method: { billing_details: { name: document.getElementById('name').value, email: document.getElementById('email').value, }, }, payment_method_options: { konbini: { confirmation_number: document.getElementById('phone').value.replace(/\D/g,''), }, }, } ); // Stripe.js will open a modal to display the Konbini payment instructions 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.
Options supplémentaires de moyens de paiement
Lors de la confirmation d’un PaymentIntent Konbini, d’autres options de moyens de paiement peuvent être définies dans les options des moyens de paiement sous la clé konbini
.
Champ | Valeur | Obligatoire | Valeur par défaut |
---|---|---|---|
confirmation_ | Chaîne numérique de 10 à 11 chiffres. Ce numéro apparaît également dans les instructions de paiement et ne peut pas contenir que des zéros. Si aucune valeur n’est fournie pour confirmation_ , Stripe en génèrera un pour vous de manière aléatoire. Pour en savoir plus, consultez la page Numéros de confirmation. | Non | non définie |
Numéros de confirmation
Pour finaliser leur paiement, vos clients devront se référer au confirmation_
. Si vous choisissez de définir cette valeur ou de laisser vos clients la définir, nous vous suggérons d’utiliser le numéro de téléphone du client. Un confirmation_
peut également être déterminé lors de la création du PaymentIntent côté serveur, mais il est en général défini par le client lors de la confirmation du PaymentIntent. La valeur définie lors de la création du PaymentIntent peut être modifiée jusqu’à la confirmation du PaymentIntent.
Si un confirmation_
défini a trop d’occurrences dans les transactions en cours du commerce, il pourrait être rejeté au moment de la confirmation du PaymentIntent. Dans ce cas, le code d’erreur renvoyé serait alors payment_
. Ce message ne s’affiche que lors de la confirmation d’un PaymentIntent.
Stripe bloque tous les numéros de confirmation composés uniquement de zéros lors de la création, de la modification et de la confirmation du PaymentIntent. Vérifiez que vous n’utilisez pas cette valeur et que vous n’autorisez pas vos clients à l’utiliser.
Gestion des erreurs
La confirmation d’un PaymentIntent côté client peut aussi échouer. Vous devez consulter la valeur error
pour en déterminer la raison. Vous pourrez ainsi montrer l’erreur à votre client ou la corriger et essayer de nouveau.
Gérer les événements post-paiementCôté serveur
Konbini est un moyen de paiement à notification différée, ce qui signifie que les fonds ne sont pas disponibles immédiatement. Les clients ne sont pas obligés de procéder immédiatement au règlement dans un magasin de proximité après avoir finalisé la commande.
Une fois le paiement Konbini effectué, Stripe envoie un événement payment_intent.succeeded. Utilisez le Dashboard ou créez un gestionnaire de webhook afin de recevoir ces événements et d’exécuter des actions. Exemples d’actions : envoyer un e-mail de confirmation de commande à votre client, enregistrer la vente dans une base de données ou lancer un flux de livraison.
S’il peut être établi avec certitude qu’un paiement Konbini en attente n’a pas été finalisé (généralement, environ une heure après sa date/heure limite d’expiration), Stripe envoie un événement payment_intent.payment_failed.
Événement | Description | Étapes suivantes |
---|---|---|
payment_ | Le paiement Konbini en attente est créé. | Vous pouvez, à titre facultatif, envoyer le client sur la page contenant les instructions de paiement. Attendez que le client effectue le paiement Konbini. |
payment_ | Le client a effectué le paiement Konbini en attente avant la date d’expiration. | Traitez la commande de biens ou de services du client. |
payment_ | Le client n’a pas effectué le paiement Konbini en attente avant la date d’expiration. | Envoyez un e-mail ou une notification push au client pour lui demander d’utiliser un autre moyen de paiement. |
Remarque
En mode test, l’état d’un PaymentIntent Konbini peut changer automatiquement en fonction des paramètres envoyés, tels que email
. Vous pouvez confirmer les mises à jour sur le Dashboard. Pour en savoir plus, consultez la page Tester l’intégration.
Recevoir des événements et exécuter des actions
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 à l’interface de ligne de commande Stripe.
Tester l'intégration
Lors des tests, définissez payment_
sur les valeurs suivantes lorsque vous appelez stripe.confirmKonbiniPayment pour tester différents scénarios. Vous pouvez effectuer vos tests avec un numéro de confirmation spécial et/ou un modèle d’e-mail. Si les deux sont fournis, le numéro de confirmation spécial s’applique.
Numéro de confirmation | Description | |
---|---|---|
|
| Simule un paiement Konbini qui réussit après 3 minutes. Le webhook Exemple : hanako@test.com |
|
| Simule un paiement Konbini qui réussit immédiatement. Le webhook Exemple : succeed_immediately@test.com |
|
| Simule un paiement Konbini qui expire immédiatement. Le webhook Le champ Exemple : expire_immediately@test.com |
|
| Simule un paiement Konbini qui ne réussit jamais. Il expire au bout de 3 minutes et le webhook Le champ Exemple : expire_with_delay@test.com |
|
| Simule un paiement Konbini qui ne réussit jamais. Il expire conformément à la valeur du champ Exemple : fill_never@test.com |
Pour tester la gestion des erreurs touchant au numéro de confirmation, vous pouvez utiliser les valeurs suivantes pour payment_
:
01234567890
génère un code d’erreurpayment_
.intent_ konbini_ rejected_ confirmation_ number 00000000000
génère un code d’erreur de validation générique. Cette erreur peut être évitée dans votre intégration à l’aide de la prévalidation.
Expiration et annulation
Une fois la date définie par la valeur expires_
dans next_action.konbini_display_details, le client ne peut plus initier le processus de paiement d’un paiement Konbini en attente dans un kiosque de supérette. Cependant, si un reçu de paiement valide est émis avant l’échéance, il pourra finaliser le paiement à la caisse après la date expires_
.
Dans ce cas, il existe une marge de manœuvre pour éviter des échecs de paiement prématurés. L’état du PaymentIntent passe à requires_
. Vous pouvez alors annuler ou confirmer le PaymentIntent avec un autre moyen de paiement.
Un paiement Konbini en attente peut également être annulé une fois confirmé, avant même la date spécifiée par next_
. De la même manière, la mise à jour du PaymentIntent ou sa confirmation avec un autre moyen de paiement annulera de manière implicite le paiement Konbini existant.
Si le client effectue actuellement le paiement Konbini dans un commerce de proximité, la requête d’annulation échouera. L’annulation peut à nouveau être envisagée si le client abandonne la tentative de paiement et une fois que le bordereau de paiement a expiré.
Veuillez noter que les problèmes de disponibilité temporaires des moyens de paiement impactent également les demandes d’annulation (explicites comme implicites).
Mise en garde
Lorsque vous annulez un paiement en attente, les instructions de paiement initiales sont invalidées. Dans la plupart des cas d’usage, nous vous suggérons de contacter votre client pour l’informer de l’annulation.
Lorsque vous reconfirmez un PaymentIntent dont l’état affiche requires_
, nous créons de nouvelles instructions ainsi qu’une nouvelle hosted_
. Vous devez veiller à ce que votre client en soit informé.
Gérer les problèmes temporaires de disponibilité
Les codes d’erreur suivants indiquent que des problèmes temporaires affectent la disponibilité du moyen de paiement :
Code | Description | Gestion |
---|---|---|
payment_ | Un trop grand nombre de requêtes successives sont effectuées pour ce moyen de paiement, dont les limites sont plus strictes que nos limites de débit à l’échelle de l’API. | Il suffit généralement de réessayer quelques instants plus tard pour résoudre le problème. Toutefois, en cas d’utilisation intensive du moyen de paiement (par exemple pendant une vente sur votre site web), ces erreurs peuvent persister pour un certain nombre de requêtes. Dans ce cas, vous pouvez demander à vos clients d’envisager un autre moyen de paiement. |
payment_ | Le moyen de paiement rencontre des problèmes temporaires inconnus qui peuvent potentiellement se prolonger un certain temps (par exemple, pendant les pannes ou les périodes de maintenance programmées). | Nous vous conseillons d’inviter vos utilisateurs à effectuer leur achat avec un autre moyen de paiement ou à réessayer plus tard. |
Mise en garde
Si vous prévoyez une utilisation intensive, que ce soit de manière générale ou pour un événement à venir, veuillez nous contacter suffisamment à l’avance.
Remboursements
Il est possible de rembourser les paiements Konbini via le Dashboard ou l’API.
Pour exécuter un remboursement et l’envoyer directement sur le compte bancaire du client, votre client doit fournir les coordonnées bancaires du compte sur lequel il souhaite recevoir les fonds. Stripe contacte le client à l’adresse e-mail indiquée dans les informations de facturation et lui demande ces informations. Une fois les coordonnées bancaires reçues, nous procédons automatiquement au remboursement.
L’état du remboursement évolue comme suit :
Événement | État du remboursement |
---|---|
Le remboursement est créé | requires_ |
Le client soumet ses coordonnées bancaires et Stripe initie le remboursement | pending |
Le remboursement devrait arriver sur le compte bancaire du client | succeeded |
La banque du client reverse les fonds à Stripe | requires_ |
Le remboursement passe à l’état requires_ 45 jours après sa création | failed |
Le remboursement est annulé à partir d’un état requires_ | canceled |
Si la banque du client ne parvient pas à mener à bien le transfert, les fonds sont reversés à Stripe et le remboursement bascule sur l’état requires_
. Cette situation se produit si le nom du titulaire du compte ne correspond pas aux données que la banque bénéficiaire possède dans ses archives, ou si le numéro de compte bancaire fourni contient une faute de frappe. Dans ces cas-là, Stripe envoie un e-mail au client pour l’informer de l’échec de l’opération et lui demande de soumettre à nouveau ses coordonnées bancaires.
Si votre client ne fournit pas ses coordonnées bancaires sous 45 jours, l’état du remboursement passe à failed
et nous envoyons l’événement refund.failed. Cela signifie que Stripe n’est pas en mesure de procéder au remboursement et que vous devez restituer les fonds à votre client en dehors de Stripe.
Le champ instructions_email du remboursement correspond à l’adresse e-mail à laquelle le remboursement a été envoyé. En attente de la réponse du client, vous pouvez retrouver les informations relatives à la date et l’adresse d’envoi de l’e-mail sous le champ next_action.display_details.email_sent du remboursement.
Chaque remboursement (y compris les remboursements partiels) peut entraîner des frais. Veuillez consulter votre contact chez Stripe pour en savoir plus à ce sujet.
Tester les remboursements
Pour tester le comportement de remboursement en mode test, utilisez les comptes bancaires de test suivants sur la page de collecte des coordonnées bancaires, dont le lien figure dans l’e-mail envoyé au client. Aucunes autres coordonnées bancaires ne seront acceptées.
Routage | Compte | Type |
---|---|---|
1100000 | 0001234 | Le remboursement réussit. |
|
| Le remboursement échoue. |
Tester l’expiration des remboursements
Vous pouvez simuler l’expiration d’un remboursement en mode test en effectuant un appel à l’API.
curl https://api.stripe.com/v1/test_helpers/refunds/{{REFUND_ID}}/expire \ -X POST \ -u
:sk_test_BQokikJOvBiI2HlWgH4olfQ2