Passer au contenu principal

Prérequis

Pour intégrer l’API Dodo Payments, vous aurez besoin de :
  • Un compte marchand Dodo Payments
  • Des identifiants API (clé API et clé secrète de webhook) depuis le tableau de bord
Pour un guide plus détaillé sur les prérequis, consultez cette section.

Intégration API

Sessions de paiement

Utilisez les sessions Checkout Sessions pour vendre des produits d’abonnement via une caisse sécurisée hébergée. Passez votre produit d’abonnement dans product_cart et redirigez les clients vers le retour checkout_url.
Paiement mixte : Vous pouvez combiner des produits d’abonnement avec des produits à paiement unique dans la même session de paiement. Cela permet des cas d’utilisation comme des frais d’installation avec des abonnements, des bundles matériels avec des SaaS, et plus encore. Consultez le guide des sessions Checkout pour des exemples.
import DodoPayments from 'dodopayments';

const client = new DodoPayments({
  bearerToken: process.env.DODO_PAYMENTS_API_KEY,
  environment: 'test_mode', // defaults to 'live_mode'
});

async function main() {
  const session = await client.checkoutSessions.create({
    product_cart: [
      { product_id: 'prod_subscription_monthly', quantity: 1 }
    ],
    // Optional: configure trials for subscription products
    subscription_data: { trial_period_days: 14 },
    customer: {
      email: 'subscriber@example.com',
      name: 'Jane Doe',
    },
    return_url: 'https://example.com/success',
  });

  console.log(session.checkout_url);
}

main();

Réponse API

Voici un exemple de la réponse :
{
  "session_id": "cks_Gi6KGJ2zFJo9rq9Ukifwa",
  "checkout_url": "https://test.checkout.dodopayments.com/session/cks_Gi6KGJ2zFJo9rq9Ukifwa"
}
Redirigez le client vers checkout_url.

Webhooks

Lors de l’intégration des abonnements, vous recevrez des webhooks pour suivre le cycle de vie de l’abonnement. Ces webhooks vous aident à gérer efficacement les états d’abonnement et les scénarios de paiement. Pour configurer votre point de terminaison webhook, veuillez suivre notre Guide d’intégration détaillé.

Types d’événements d’abonnement

Les événements webhook suivants suivent les changements de statut d’abonnement :
  1. subscription.active - L’abonnement est activé avec succès.
  2. subscription.updated - L’objet abonnement a été mis à jour (se déclenche à chaque changement de champ).
  3. subscription.on_hold - L’abonnement est suspendu en raison d’un renouvellement échoué.
  4. subscription.failed - La création de l’abonnement a échoué pendant la création du mandat.
  5. subscription.renewed - L’abonnement est renouvelé pour la prochaine période de facturation.
Pour une gestion fiable du cycle de vie des abonnements, nous recommandons de suivre ces événements d’abonnement.
Utilisez subscription.updated pour recevoir des notifications en temps réel sur tout changement d’abonnement, et ainsi maintenir l’état de votre application synchronisé sans interroger l’API.

Scénarios de paiement

Flux de paiement réussi Lorsqu’un paiement réussit, vous recevrez les webhooks suivants :
  1. subscription.active - Indique l’activation de l’abonnement
  2. payment.succeeded - Confirme le paiement initial :
    • Pour une facturation immédiate (0 jour d’essai) : attendez-vous à ce qu’il arrive dans les 2 à 10 minutes
    • Pour des jours d’essai : dès que ceux-ci prennent fin
  3. subscription.renewed - Indique que le paiement a été prélevé et que le renouvellement pour le cycle suivant est en cours. (Chaque fois qu’un paiement est prélevé pour des produits d’abonnement, vous recevrez le webhook subscription.renewed ainsi que payment.succeeded)
Scénarios d’échec de paiement
  1. Échec de l’abonnement
  • subscription.failed - La création de l’abonnement a échoué en raison d’un échec lors de la création du mandat.
  • payment.failed - Indique un paiement échoué.
  1. Abonnement en attente
  • subscription.on_hold - L’abonnement est mis en attente en raison d’un renouvellement échoué ou d’un échec de facturation lié au changement de forfait.
  • Lorsqu’un abonnement est mis en attente, il ne se renouvelle pas automatiquement tant que le moyen de paiement n’est pas mis à jour.
Meilleure pratique : Pour simplifier l’implémentation, nous recommandons de suivre principalement les événements d’abonnement pour gérer le cycle de vie de l’abonnement.

Gestion des abonnements en attente

Lorsqu’un abonnement passe en état on_hold, vous devez mettre à jour le moyen de paiement pour le réactiver. Cette section explique quand les abonnements passent en attente et comment les traiter.

Quand les abonnements sont mis en attente

Un abonnement est mis en attente lorsque :
  • Le paiement de renouvellement échoue : Le prélèvement automatique échoue en raison de fonds insuffisants, d’une carte expirée ou d’un refus bancaire
  • Le frais de changement de plan échoue : Un prélèvement immédiat lors de la mise à niveau/diminution du plan échoue
  • L’autorisation du mode de paiement échoue : Le mode de paiement ne peut pas être autorisé pour des prélèvements récurrents
Les abonnements en état on_hold ne se renouvellent pas automatiquement. Vous devez mettre à jour le moyen de paiement pour réactiver l’abonnement.

Réactivation des abonnements en attente

Pour réactiver un abonnement depuis l’état on_hold, utilisez l’API Update Payment Method. Cela permet automatiquement de :
  1. Créer un prélèvement pour les sommes restantes dues
  2. Générer une facture pour le prélèvement
  3. Traiter le paiement avec le nouveau moyen de paiement
  4. Réactiver l’abonnement en état active après un paiement réussi
1

Handle subscription.on_hold webhook

Lorsque vous recevez un webhook subscription.on_hold, mettez à jour l’état de votre application et informez le client :
// Webhook handler
app.post('/webhooks/dodo', async (req, res) => {
  const event = req.body;
  
  if (event.type === 'subscription.on_hold') {
    const subscription = event.data;
    
    // Update subscription status in your database
    await updateSubscriptionStatus(subscription.subscription_id, 'on_hold');
    
    // Notify customer to update payment method
    await sendEmailToCustomer(subscription.customer_id, {
      subject: 'Payment Required - Subscription On Hold',
      message: 'Your subscription is on hold. Please update your payment method to continue service.'
    });
  }
  
  res.json({ received: true });
});
2

Update payment method

Lorsque le client est prêt à mettre à jour son moyen de paiement, appelez l’API Update Payment Method :
// Update with new payment method
const response = await client.subscriptions.updatePaymentMethod(subscriptionId, {
  type: 'new',
  return_url: 'https://example.com/return'
});

// For on_hold subscriptions, a charge is automatically created
if (response.payment_id) {
  console.log('Charge created for remaining dues:', response.payment_id);
  // Redirect customer to response.payment_link to complete payment
}
Vous pouvez également utiliser un identifiant de moyen de paiement existant si le client a enregistré des moyens de paiement :
await client.subscriptions.updatePaymentMethod(subscriptionId, {
  type: 'existing',
  payment_method_id: 'pm_abc123'
});
3

Monitor webhook events

Après avoir mis à jour le moyen de paiement, surveillez ces événements webhook :
  1. payment.succeeded - Le prélèvement des sommes restantes dues a réussi
  2. subscription.active - L’abonnement a été réactivé
if (event.type === 'payment.succeeded') {
  const payment = event.data;
  
  // Check if this payment is for an on_hold subscription
  if (payment.subscription_id) {
    // Wait for subscription.active webhook to confirm reactivation
  }
}

if (event.type === 'subscription.active') {
  const subscription = event.data;
  
  // Update subscription status in your database
  await updateSubscriptionStatus(subscription.subscription_id, 'active');
  
  // Restore customer access
  await restoreCustomerAccess(subscription.customer_id);
  
  // Notify customer of successful reactivation
  await sendEmailToCustomer(subscription.customer_id, {
    subject: 'Subscription Reactivated',
    message: 'Your subscription has been reactivated successfully.'
  });
}

Exemple de charge utile d’événement d’abonnement


PropriétéTypeObligatoireDescription
business_idstringOuiL’identifiant unique pour l’entreprise
timestampstringOuiL’horodatage du moment où l’événement s’est produit (pas nécessairement le même que celui où il a été livré)
typestringOuiLe type d’événement. Voir Types d’événements
dataobjectOuiLa charge utile principale. Voir Objet de données

Changer de plans d’abonnement

Vous pouvez mettre à niveau ou rétrograder un plan d’abonnement en utilisant le point de terminaison de l’API de changement de plan. Cela vous permet de modifier le produit de l’abonnement, la quantité et de gérer la proratisation.

Change Plan API Reference

Pour plus d’informations détaillées sur le changement de forfaits, veuillez consulter notre documentation de l’API Change Plan.

Options de proratisation

Lors du changement de plans d’abonnement, vous avez deux options pour gérer le prélèvement immédiat :

1. prorated_immediately

  • Calcule le montant au prorata en fonction du temps restant dans le cycle de facturation actuel
  • Ne facture au client que la différence entre l’ancien et le nouveau forfait
  • Pendant une période d’essai, cela bascule immédiatement l’utilisateur vers le nouveau forfait et facture le client immédiatement

2. full_immediately

  • Facture au client le montant total de l’abonnement pour le nouveau forfait
  • Ignore le temps restant ou les crédits du forfait précédent
  • Utile lorsque vous souhaitez réinitialiser le cycle de facturation ou facturer le montant complet indépendamment du prorata

3. difference_immediately

  • Lors d’une montée en gamme, le client est immédiatement facturé de la différence entre les deux montants de forfait.
  • Par exemple, si le forfait actuel est de 30 dollars et que le client passe à un forfait à 80 dollars, il est facturé 50 $ instantanément.
  • Lors d’une descente en gamme, le montant non utilisé du forfait actuel est ajouté comme crédit interne et appliqué automatiquement aux prochains renouvellements.
  • Par exemple, si le forfait actuel est de 50 dollars et que le client passe à un forfait à 20 dollars, les 30 $ restants sont crédités et utilisés pour le prochain cycle de facturation.

Comportement

  • Lorsque vous appelez cette API, Dodo Payments initie immédiatement un prélèvement en fonction de l’option de prorata sélectionnée
  • Si le changement de forfait correspond à une descente en gamme et que vous utilisez prorated_immediately, les crédits sont automatiquement calculés et ajoutés au solde de crédit de l’abonnement. Ces crédits sont spécifiques à cet abonnement et ne seront utilisés que pour compenser les futurs paiements récurrents du même abonnement
  • L’option full_immediately évite les calculs de crédit et facture le montant total du nouveau forfait
Choisissez avec soin votre option de prorata : utilisez prorated_immediately pour une facturation équitable qui tient compte du temps non utilisé, ou full_immediately lorsque vous souhaitez facturer le montant complet du nouveau forfait indépendamment du cycle de facturation actuel.

Traitement des prélèvements

  • Le prélèvement immédiat initié lors du changement de plan se termine généralement en moins de 2 minutes
  • Si ce prélèvement immédiat échoue pour une raison quelconque, l’abonnement est automatiquement mis en attente jusqu’à ce que le problème soit résolu

Abonnements à la demande

Les abonnements à la demande vous permettent de facturer les clients de manière flexible, pas uniquement selon un calendrier fixe. Cette fonctionnalité est disponible pour tous les comptes.
Pour créer un abonnement à la demande : Pour créer un abonnement à la demande, utilisez le point de terminaison API POST /subscriptions et incluez le champ on_demand dans le corps de votre requête. Cela vous permet d’autoriser un moyen de paiement sans prélèvement immédiat, ou de définir un prix initial personnalisé. Pour facturer un abonnement à la demande : Pour les prélèvements suivants, utilisez le point de terminaison POST /subscriptions/charge et spécifiez le montant à facturer au client pour cette transaction.
Pour un guide complet étape par étape — incluant des exemples de requêtes/réponses, des politiques de nouvelle tentative sûres et la gestion des webhooks — consultez le Guide des abonnements à la demande.