Créez des expériences de paiement sécurisées et hébergées qui gèrent l’ensemble du flux de paiement pour les achats uniques et les abonnements avec un contrôle de personnalisation complet.
Validité de la session : Les sessions de paiement sont valides pendant 24 heures par défaut. Si vous passez confirm=true dans votre requête, la session ne sera valide que pendant 15 minutes.
import DodoPayments from 'dodopayments';// Initialize the Dodo Payments clientconst client = new DodoPayments({ bearerToken: process.env.DODO_PAYMENTS_API_KEY, environment: 'test_mode', // defaults to 'live_mode'});async function createCheckoutSession() { try { const session = await client.checkoutSessions.create({ // Products to sell - use IDs from your Dodo Payments dashboard product_cart: [ { product_id: 'prod_123', // Replace with your actual product ID quantity: 1 } ], // Pre-fill customer information to reduce friction customer: { email: '[email protected]', name: 'John Doe', phone_number: '+1234567890' }, // Billing address for tax calculation and compliance billing_address: { street: '123 Main St', city: 'San Francisco', state: 'CA', country: 'US', // Required: ISO 3166-1 alpha-2 country code zipcode: '94102' }, // Where to redirect after successful payment return_url: 'https://yoursite.com/checkout/success', // Custom data for your internal tracking metadata: { order_id: 'order_123', source: 'web_app' } }); // Redirect your customer to this URL to complete payment console.log('Checkout URL:', session.checkout_url); console.log('Session ID:', session.session_id); return session; } catch (error) { console.error('Failed to create checkout session:', error); throw error; }}// Example usage in an Express.js routeapp.post('/create-checkout', async (req, res) => { try { const session = await createCheckoutSession(); res.json({ checkout_url: session.checkout_url }); } catch (error) { res.status(500).json({ error: 'Failed to create checkout session' }); }});
Copier
import osfrom dodopayments import DodoPayments# Initialize the Dodo Payments clientclient = DodoPayments( bearer_token=os.environ.get("DODO_PAYMENTS_API_KEY"), # This is the default and can be omitted environment="test_mode", # defaults to "live_mode")def create_checkout_session(): """ Create a checkout session for a single product with customer data pre-filled. Returns the session object containing checkout_url for customer redirection. """ try: session = client.checkout_sessions.create( # Products to sell - use IDs from your Dodo Payments dashboard product_cart=[ { "product_id": "prod_123", # Replace with your actual product ID "quantity": 1 } ], # Pre-fill customer information to reduce checkout friction customer={ "email": "[email protected]", "name": "John Doe", "phone_number": "+1234567890" }, # Billing address for tax calculation and compliance billing_address={ "street": "123 Main St", "city": "San Francisco", "state": "CA", "country": "US", # Required: ISO 3166-1 alpha-2 country code "zipcode": "94102" }, # Where to redirect after successful payment return_url="https://yoursite.com/checkout/success", # Custom data for your internal tracking metadata={ "order_id": "order_123", "source": "web_app" } ) # Redirect your customer to this URL to complete payment print(f"Checkout URL: {session.checkout_url}") print(f"Session ID: {session.session_id}") return session except Exception as error: print(f"Failed to create checkout session: {error}") raise error# Example usage in a Flask routefrom flask import Flask, jsonify, requestapp = Flask(__name__)@app.route('/create-checkout', methods=['POST'])def create_checkout(): try: session = create_checkout_session() return jsonify({"checkout_url": session.checkout_url}) except Exception as error: return jsonify({"error": "Failed to create checkout session"}), 500
Copier
// Direct API call using fetch - useful for any JavaScript environmentasync function createCheckoutSession() { try { const response = await fetch('https://test.dodopayments.com/checkouts', { method: 'POST', headers: { 'Content-Type': 'application/json', 'Authorization': `Bearer ${process.env.DODO_PAYMENTS_API_KEY}` }, body: JSON.stringify({ // Products to sell - use IDs from your Dodo Payments dashboard product_cart: [ { product_id: 'prod_123', // Replace with your actual product ID quantity: 1 } ], // Pre-fill customer information to reduce checkout friction customer: { email: '[email protected]', name: 'John Doe', phone_number: '+1234567890' }, // Billing address for tax calculation and compliance billing_address: { street: '123 Main St', city: 'San Francisco', state: 'CA', country: 'US', // Required: ISO 3166-1 alpha-2 country code zipcode: '94102' }, // Where to redirect after successful payment return_url: 'https://yoursite.com/checkout/success', // Custom data for your internal tracking metadata: { order_id: 'order_123', source: 'web_app' } }) }); if (!response.ok) { throw new Error(`HTTP error! status: ${response.status}`); } const session = await response.json(); // Redirect your customer to this URL to complete payment console.log('Checkout URL:', session.checkout_url); console.log('Session ID:', session.session_id); return session; } catch (error) { console.error('Failed to create checkout session:', error); throw error; }}// Example: Redirect user to checkoutcreateCheckoutSession().then(session => { window.location.href = session.checkout_url;});
Tableau de produits à inclure dans la session de paiement. Chaque produit doit avoir un product_id valide depuis votre tableau de bord Dodo Payments.
Important : Plusieurs paniers de produits ne peuvent contenir que des produits à paiement unique. Vous ne pouvez pas mélanger des produits d’abonnement avec des produits uniques dans la même session de paiement.
Afficher Propriétés de l'élément du panier de produits
Montant que le client paie si pay_what_you_want est activé. Si désactivé, ce champ sera ignoré.Format : Représenté dans la plus petite dénomination de la devise (par exemple, cents pour USD). Par exemple, pour facturer 1,00 $, passez 100.
Trouvez vos identifiants de produit : Vous pouvez trouver les identifiants de produit dans votre tableau de bord Dodo Payments sous Produits → Voir les détails, ou en utilisant l’API Liste des produits.
Informations sur le client. Vous pouvez soit attacher un client existant en utilisant son identifiant, soit créer un nouvel enregistrement client lors du paiement.
Attacher un client existant
Nouveau client
Attachez un client existant à la session de paiement en utilisant son identifiant.
Numéro de téléphone du client au format international. Requis pour certains modes de paiement et pour la prévention de la fraude.Format : Inclure l’indicatif du pays, par exemple, "+1234567890" pour les numéros américains
Adresse complète incluant le numéro de la maison, le nom de la rue et le numéro d’appartement/unité si applicable.Exemple : "123 Main St, Apt 4B" ou "456 Oak Avenue"
Nom de l’état, de la province ou de la région. Utilisez des noms complets ou des abréviations standard.Exemple : "California" ou "CA", "Ontario" ou "ON"
Code pays ISO à deux lettres (ISO 3166-1 alpha-2). Ce champ est toujours requis lorsque l’adresse de facturation est fournie.Exemples : "US" (États-Unis), "CA" (Canada), "GB" (Royaume-Uni), "DE" (Allemagne)
Contrôlez quels modes de paiement sont disponibles pour les clients lors du paiement. Cela aide à optimiser pour des marchés ou des exigences commerciales spécifiques.Options disponibles : credit, debit, upi_collect, upi_intent, apple_pay, google_pay, amazon_pay, klarna, affirm, afterpay_clearpay, sepa, ach, cashapp, multibanco, bancontact_card, eps, ideal, przelewy24, paypal
Critique : Incluez toujours credit et debit comme options de secours pour éviter les échecs de paiement lorsque les méthodes de paiement préférées ne sont pas disponibles.
Remplacez la sélection de devise par défaut par une devise de facturation fixe. Utilise les codes de devise ISO 4217.Devises prises en charge : USD, EUR, GBP, CAD, AUD, INR, et plusExemple : "USD" pour les dollars américains, "EUR" pour les euros
Ce champ n’est efficace que lorsque le prix adaptatif est activé. Si le prix adaptatif est désactivé, la devise par défaut du produit sera utilisée.
Affichez les méthodes de paiement précédemment enregistrées pour les clients récurrents, améliorant la vitesse de paiement et l’expérience utilisateur.
Activez le mode de collecte d’adresse minimale. Lorsqu’il est activé, le paiement ne collecte que :
Pays : Toujours requis pour la détermination des taxes
Code postal : Seulement dans les régions où cela est nécessaire pour le calcul de la taxe de vente, de la TVA ou de la GST
Cela réduit considérablement les frictions de paiement en éliminant les champs de formulaire inutiles.
Activez l’adresse minimale pour un achèvement plus rapide du paiement. La collecte complète d’adresse reste disponible pour les entreprises qui nécessitent des détails de facturation complets.
Personnalisation de l'interface utilisateur & Fonctionnalités
Activez le mode de collecte d’adresse minimale. Lorsqu’il est activé, le paiement ne collecte que :
Pays : Toujours requis pour la détermination des taxes
Code postal : Seulement dans les régions où cela est nécessaire pour le calcul de la taxe de vente, de la TVA ou de la GST
Cela réduit considérablement les frictions de paiement en éliminant les champs de formulaire inutiles.
Activez l’adresse minimale pour un achèvement plus rapide du paiement. La collecte complète d’adresse reste disponible pour les entreprises qui nécessitent des détails de facturation complets.
Prix du produit pour le prélèvement initial au client. Si non spécifié, le prix enregistré du produit sera utilisé.Format : Représenté dans la plus petite dénomination de la devise (par exemple, cents pour USD). Par exemple, pour facturer 1,00 $, passez 100.
Indique si les frais de devise adaptatifs doivent être inclus dans le prix du produit (vrai) ou ajoutés en plus (faux). Ignoré si le prix adaptatif n’est pas activé.
Le remplacement billing_currency ne prend effet que lorsque la devise adaptative est activée dans vos paramètres de compte. Si la devise adaptative est désactivée, ce paramètre n’aura aucun effet.
Auparavant, lors de la création d’un lien de paiement avec des liens dynamiques, vous deviez fournir l’adresse de facturation complète du client.Avec les sessions de paiement, cela n’est plus nécessaire. Vous pouvez simplement transmettre les informations dont vous disposez, et nous nous occuperons du reste. Par exemple :
Si vous ne connaissez que le pays de facturation du client, fournissez simplement cela.
Le flux de paiement collectera automatiquement les détails manquants avant de déplacer le client vers la page de paiement.
D’autre part, si vous avez déjà toutes les informations requises et souhaitez passer directement à la page de paiement, vous pouvez transmettre l’ensemble des données et inclure confirm=true dans le corps de votre requête.