Percevoir des taxes pour les paiements récurrents
Comment percevoir et déclarer des taxes pour les paiements récurrents.
Stripe propose deux manières de calculer les taxes pour les paiements récurrents : Stripe Tax et Taux de taxe.
Stripe Tax : un produit payant qui calcule automatiquement les taxes liées à vos transactions, sans nécessité de définir des taux et des règles. Les frais s’appliquent uniquement après l’ajout d’au moins un de vos lieux d’immatriculation pour calculer les taxes et les verser. Pour en savoir plus, consultez la page Stripe Tax.
Taux de taxe : une fonctionnalité gratuite qui vous permet de définir le nombre de taux de taxes à appliquer à vos factures, abonnements et paiements ponctuels qui utilisent Checkout. Stripe ne créera pas et ne gèrera aucun taux de taxe en votre nom. Pour plus d’informations, consultez la rubrique Taux de taxe et la documentation sur leur utilisation.
Stripe Tax vous permet de calculer le montant de la taxe sur vos paiements récurrents lorsque vous utilisez Stripe Billing. Utilisez les informations relatives à l’emplacement de votre client pour obtenir un aperçu du montant des taxes avant de créer un abonnement, puis créez-le avec Stripe Tax activé lorsque votre client est prêt à payer. Stripe Tax s’intègre à Stripe Billing et gère automatiquement le calcul des taxes à l’aide de votre modèle tarifaire, de vos proratas, de vos remises, de vos essais, etc.
Ce guide part du principe que vous configurez Stripe Tax et Billing pour la première fois. Découvrez comment modifier des abonnements existants.
Si vous utilisez Stripe Checkout pour créer de nouveaux abonnements, découvrez comment prélever automatiquement des taxes sur les sessions Checkout ou regardez la courte vidéo ci-dessous :
Activer Stripe Tax
Connectez-vous ou créez un compte Stripe pour activer Stripe Tax.
Modifier vos produits et vos tarifs (facultatif)
Stripe Tax utilise les informations stockées sur les produits et les tarifs pour calculer la taxe, par exemple le code fiscal et le régime fiscal. Si vous ne spécifiez pas explicitement ces configurations, Stripe Tax utilisera le code de taxe par défaut sélectionné dans les paramètres fiscaux.
Pour plus d’informations, reportez-vous à la rubrique Spécifier les codes de taxe produit et le régime fiscal.
Estimer les taxes et le totalCôté serveur
Vérifiez le automatic_tax.status de la facture. S’il affiche requires_
, cela signifie que les coordonnées de l’adresse ne sont pas valides ou sont insuffisantes. Dans ce cas, invitez votre client à saisir à nouveau ses coordonnées ou à fournir des coordonnées exactes.
Le total de la facture correspond au montant payé par votre client, et la taxe correspond à la somme de tous les montants des taxes figurant sur la facture. Pour obtenir le détail des taxes, reportez-vous à la section total_tax_amounts. Tous les montants sont en cents.
Taxe zéro
Si la valeur de tax
est égale à zéro, assurez-vous de disposer d’un enregistrement fiscal à l’emplacement de votre client. Découvrez comment vous inscrire pour bénéficier de la taxe de vente, de la TVA et la GST et découvrez les montants à taxe zéro et les autoliquidations.
Recueillir les informations du clientCôté client
Une fois que vous avez estimé les taxes et le montant total, commencez à collecter les informations relatives au client, notamment son adresse de livraison (le cas échéant), son adresse de facturation et ses informations de paiement. Notez que lorsque vous utilisez Stripe Tax, vous collectez des informations de paiement sans Intent. La première étape consiste à créer un objet Elements sans Intent :
const stripe = Stripe(
); const elements = stripe.elements({ mode: 'subscription', currency: '{{CURRENCY}}', amount:"pk_test_TYooMQauvdEDq54NiTphI7jx", });{{TOTAL}}
Ensuite, créez un Address Element et un Payment Element et montez-les :
const addressElement = elements.create('address', { mode: 'billing' // or 'shipping', if you are shipping goods }); addressElement.mount('#address-element'); const paymentElementOptions = { layout: 'accordion'}; const paymentElement = elements.create('payment', paymentElementOptions); paymentElement.mount('#payment-element');
Ensuite, vous pouvez écouter change events sur l’Address Element. En cas de modification de l’adresse, réestimez les taxes et le montant total.
addressElement.on('change', function(event) { // Throttle your requests to avoid overloading your server or hitting // Stripe's rate limits. const { tax, total } = await updateEstimate(event.value.address); elements.update({ amount: total }); // Update your page to display the new tax and total to the user... });
Erreur fréquente
Lorsque votre client saisit son adresse, Address Element déclenche un événement change
pour chaque saisie au clavier. Pour éviter de surcharger votre serveur et d’atteindre les limites de débit de Stripe, attendez un certain temps après le dernier événement change
avant de réestimer les taxes et le total.
Gérer l’envoiCôté client
Lorsque votre client envoie le formulaire, appelez elements.submit() pour valider les champs du formulaire et collecter toutes les données requises pour les wallets. Vous devez attendre que la promesse de cette fonction soit résolue avant d’effectuer toute autre opération.
document.querySelector("#form").addEventListener("submit", function(event) { // We don't want to let default form submission happen here, // which would refresh the page. event.preventDefault(); const { error: submitError } = await elements.submit(); if (submitError) { // Handle error... return; } const { value: customerDetails } = await addressElement.getValue(); // See the "Save customer details" section below to implement this // server-side. await
(customerDetails); // See the "Create subscription" section below to implement this server-side. const {saveCustomerDetails} = awaitclientSecret(); const { error: confirmError } = await stripe.confirmPayment({ elements, clientSecret, confirmParams: { return_url:createSubscription, }, }); if (confirmError) { // Handle error... return; } // Upon a successful confirmation, your user will be redirected to the // return_url you provide before the Promise ever resolves. });{{RETURN_URL}}
Enregistrer les coordonnées du clientCôté serveur
Modifiez votre objet Customer
à l’aide des informations que vous avez recueillies auprès de votre client. Stripe Tax pourra ainsi déterminer son emplacement précis et obtenir des résultats précis.
Spécificités régionalesÉtats-Unis
Si votre client se trouve aux États-Unis, fournissez une adresse complète si possible. Elle doit être suffisamment précise, de manière à ce que nous pouvons attribuer l’emplacement de votre client à une maison ou à un bâtiment spécifique. Cela permet d’obtenir une plus grande précision, lorsque deux maisons situées côte à côte dans la même rue peuvent être assujetties à des taux d’imposition différents, en raison des limites complexes des juridictions.
Si vous n’avez pas encore créé d’objet Customer
(par exemple, lorsque votre client s’inscrit pour la première fois sur votre site Web), vous pouvez en créer un maintenant.
La valeur tax.validate_location enum vous permet de vérifier que l’emplacement fiscal du client devient (ou reste) valide à la suite de cette opération. Dans le cas contraire, Stripe refuse la requête et renvoie le code d’erreur customer_tax_location_invalid. Cela est important, car vous ne pouvez pas créer d’abonnement automatique pour les taxes pour un client dont l’emplacement fiscal n’est pas valide. Si vous avez vérifié le automatic_tax.status dans l’aperçu de vos factures comme indiqué précédemment, cette validation supplémentaire n’échouera jamais. Cependant, il est recommandé de définir tax[validate_
chaque fois que vous créez ou modifiez un objet Customer
.
Création d'un abonnementCôté serveur
Créez un abonnement pour lequel la taxe automatique est activée.
Le latest_invoice.payment_intent.client_secret est la clé secrète du Payment Intent de la première (et plus récente) facture du nouvel abonnement. Vous devez transmettre la clé secrète du client au front-end afin de valider le Payment Intent.
Conseil en matière de sécurité
Ne stockez pas la clé secrète du client, ne l’enregistrez pas et ne la divulguez pas à une autre partie que le client. Veillez à ce que le protocole TLS soit activé sur toutes les pages qui contiennent la clé secrète du client.
Si votre client dispose d’un moyen de paiement par défaut, la première facture de l’abonnement est payée automatiquement. Vous pouvez le vérifier à l’aide du latest_invoice.status de l’abonnement. Si vous souhaitez utiliser les nouvelles informations de paiement collectées auprès de votre client dans votre flux de paiement, vérifiez que la première facture n’est pas payée automatiquement. Transmettez default_
pour le payment_behavior lors de la création de votre abonnement et confirmez l’intention de paiement à l’aide de stripe.confirmPayment(), comme indiqué. Consultez la page Méthodes de recouvrement de la facturation pour en savoir plus.
Utiliser des webhooks
Nous vous recommandons d’écouter les événements d’abonnement avec des webhooks, car la plupart des activités d’abonnement se déroulent de manière asynchrone.
Lorsque vous commencez à utiliser Stripe Tax, assurez-vous d’écouter les événements invoice.finalization_failed Si le automatic_tax.status de la facture est requires_
, cela signifie que les coordonnées de votre client ne sont pas valides ou sont insuffisantes. Dans ce cas, Stripe n’est pas en mesure de calculer les taxes, de finaliser la facture ni de percevoir le paiement. Demandez à votre client de saisir à nouveau son adresse ou de fournir une adresse exacte.
See Using webhooks with subscriptions to learn more.