Hoppa till huvudinnehåll

Översikt

Inline checkout låter dig skapa fullt integrerade checkout-upplevelser som smälter samman med din webbplats eller applikation. Till skillnad från overlay checkout, som öppnas som en modal ovanpå din sida, integrerar inline checkout betalningsformuläret direkt i din sidlayout. Med inline checkout kan du:
  • Skapa checkout-upplevelser som är helt integrerade med din app eller webbplats
  • Låta Dodo Payments säkert fånga kund- och betalningsinformation i en optimerad checkout-ram
  • Visa artiklar, totalsummor och annan information från Dodo Payments på din sida
  • Använda SDK-metoder och händelser för att bygga avancerade checkout-upplevelser
Inline Checkout Cover Image

Hur Det Fungerar

Inline checkout fungerar genom att integrera en säker Dodo Payments-ram i din webbplats eller app. Checkout-ramen hanterar insamling av kundinformation och fångar betalningsdetaljer. Din sida visar artikellistan, totalsummor och alternativ för att ändra vad som finns i checkout. SDK:n låter din sida och checkout-ramen interagera med varandra. Dodo Payments skapar automatiskt en prenumeration när en checkout är klar, redo för dig att tillhandahålla.
Inline checkout-ramen hanterar säkert all känslig betalningsinformation och säkerställer PCI-efterlevnad utan ytterligare certifiering från din sida.

Vad Gör En Bra Inline Checkout?

Det är viktigt att kunderna vet vem de köper från, vad de köper och hur mycket de betalar. För att bygga en inline checkout som är efterlevande och optimerad för konvertering måste din implementation inkludera:
Inline checkout example with required elements labeled
  1. Återkommande information: Om det är återkommande, hur ofta det återkommer och den totala summan att betala vid förnyelse. Om det är en provperiod, hur länge provperioden varar.
  2. Artikelbeskrivningar: En beskrivning av vad som köps.
  3. Transaktionstotalsummor: Transaktionstotalsummor, inklusive delsumma, total skatt och grand total. Se till att inkludera valutan också.
  4. Dodo Payments-fotnot: Den fullständiga inline checkout-ramen, inklusive checkout-fotnoten som har information om Dodo Payments, våra försäljningsvillkor och vår integritetspolicy.
  5. Återbetalningspolicy: En länk till din återbetalningspolicy, om den skiljer sig från Dodo Payments standardåterbetalningspolicy.
Visa alltid den kompletta inline checkout-ramen, inklusive sidfoten. Att ta bort eller dölja juridisk information bryter mot efterlevnadskrav.

Kundresa

Checkout-flödet bestäms av din checkout-sessionkonfiguration. Beroende på hur du konfigurerar checkout-sessionen kommer kunderna att uppleva en checkout som kan presentera all information på en enda sida eller över flera steg.
1

Customer opens checkout

Du kan öppna inline utcheckning genom att skicka artiklar eller en befintlig transaktion. Använd SDK för att visa och uppdatera information på sidan, och SDK-metoder för att uppdatera artiklar baserat på kundinteraktion.Inledande utcheckningssida med artikelista och betalningsformulär
2

Customer enters their details

Inline checkout ber först kunderna att ange sin e-postadress, välja sitt land och (där det krävs) ange sitt postnummer. Detta steg samlar all nödvändig information för att bestämma skatter och tillgängliga betalningsalternativ.Du kan förfylla kunduppgifter och presentera sparade adresser för att effektivisera upplevelsen.
3

Customer selects payment method

Efter att ha angett sina uppgifter presenteras kunderna med tillgängliga betalningsmetoder och betalningsformuläret. Alternativ kan inkludera kredit- eller betalkort, PayPal, Apple Pay, Google Pay och andra lokala betalningsmetoder baserat på deras plats.Visa sparade betalningsmetoder om de finns tillgängliga för att snabba upp checkout.Tillgängliga betalningsmetoder och kortinformationsformulär
4

Checkout completed

Dodo Payments dirigerar varje betalning till den bästa förvärvaren för den försäljningen för att få bästa möjliga chans till framgång. Kunderna går in i ett framgångsflöde som du kan bygga.Framgångsskärm med bekräftelsebock
5

Dodo Payments creates subscription

Dodo Payments skapar automatiskt en prenumeration för kunden, redo för dig att tillhandahålla. Betalningsmetoden som kunden använde hålls på fil för förnyelser eller ändringar av prenumerationen.Prenumeration skapad med webhook-meddelande

Snabbstart

Kom igång med Dodo Payments Inline Checkout på bara några rader kod:
import { DodoPayments } from "dodopayments-checkout";

// Initialize the SDK for inline mode
DodoPayments.Initialize({
  mode: "test",
  displayType: "inline",
  onEvent: (event) => {
    console.log("Checkout event:", event);
  },
});

// Open checkout in a specific container
DodoPayments.Checkout.open({
  checkoutUrl: "https://test.dodopayments.com/session/cks_123",
  elementId: "dodo-inline-checkout" // ID of the container element
});
Se till att du har ett container-element med motsvarande id på din sida: <div id="dodo-inline-checkout"></div>.

Steg-för-steg Integrationsguide

1

Install the SDK

Installera Dodo Payments Checkout SDK:
npm install dodopayments-checkout
2

Initialize the SDK for Inline Display

Initiera SDK:n och ange displayType: 'inline'. Du bör också lyssna på checkout.breakdown-händelsen för att uppdatera ditt användargränssnitt med realtidsberäkningar av skatt och totalsumma.
import { DodoPayments } from "dodopayments-checkout";

DodoPayments.Initialize({
  mode: "test",
  displayType: "inline",
  onEvent: (event) => {
    if (event.event_type === "checkout.breakdown") {
      const breakdown = event.data?.message;
      // Update your UI with breakdown.subTotal, breakdown.tax, breakdown.total, etc.
    }
  },
});
3

Create a Container Element

Lägg till ett element i din HTML där checkout-ramen kommer att injiceras:
<div id="dodo-inline-checkout"></div>
4

Open the Checkout

Anropa DodoPayments.Checkout.open() med checkoutUrl och elementId från din container:
DodoPayments.Checkout.open({
  checkoutUrl: "https://test.dodopayments.com/session/cks_123",
  elementId: "dodo-inline-checkout"
});
5

Test Your Integration

  1. Starta din utvecklingsserver:
npm run dev
  1. Testa checkout-flödet:
    • Ange din e-post och adressuppgifter i inline-ramen.
    • Verifiera att din anpassade ordersammanfattning uppdateras i realtid.
    • Testa betalningsflödet med testuppgifter.
    • Bekräfta att omdirigeringar fungerar korrekt.
Du bör se checkout.breakdown-händelser loggas i din webbläsarkonsol om du lade till en console.log i onEvent-callbacken.
6

Go Live

När du är redo för produktion:
  1. Ändra läget till 'live':
DodoPayments.Initialize({
  mode: "live",
  displayType: "inline",
  onEvent: (event) => {
    // Handle events
  }
});
  1. Uppdatera dina checkout-URL:er för att använda live checkout-sessioner från din backend.
  2. Testa hela flödet i produktion.

Komplett React Exempel

Detta exempel visar hur du implementerar en anpassad orderöversikt bredvid inline checkout och håller dem synkade med hjälp av checkout.breakdown-händelsen.
"use client";

import { useEffect, useState } from 'react';
import { DodoPayments, CheckoutBreakdownData } from 'dodopayments-checkout';

export default function CheckoutPage() {
  const [breakdown, setBreakdown] = useState<Partial<CheckoutBreakdownData>>({});

  useEffect(() => {
    // 1. Initialize the SDK
    DodoPayments.Initialize({
      mode: 'test',
      displayType: 'inline',
      onEvent: (event) => {
        // 2. Listen for the 'checkout.breakdown' event
        if (event.event_type === "checkout.breakdown") {
          const message = event.data?.message as CheckoutBreakdownData;
          if (message) setBreakdown(message);
        }
      }
    });

    // 3. Open the checkout in the specified container
    DodoPayments.Checkout.open({
      checkoutUrl: 'https://test.dodopayments.com/session/cks_123',
      elementId: 'dodo-inline-checkout'
    });

    return () => DodoPayments.Checkout.close();
  }, []);

  const format = (amt: number | null | undefined, curr: string | null | undefined) => 
    amt != null && curr ? `${curr} ${(amt/100).toFixed(2)}` : '0.00';

  const currency = breakdown.currency ?? breakdown.finalTotalCurrency ?? '';

  return (
    <div className="flex flex-col md:flex-row min-h-screen">
      {/* Left Side - Checkout Form */}
      <div className="w-full md:w-1/2 flex items-center">
        <div id="dodo-inline-checkout" className='w-full' />
      </div>

      {/* Right Side - Custom Order Summary */}
      <div className="w-full md:w-1/2 p-8 bg-gray-50">
        <h2 className="text-2xl font-bold mb-4">Order Summary</h2>
        <div className="space-y-2">
          {breakdown.subTotal && (
            <div className="flex justify-between">
              <span>Subtotal</span>
              <span>{format(breakdown.subTotal, currency)}</span>
            </div>
          )}
          {breakdown.discount && (
            <div className="flex justify-between">
              <span>Discount</span>
              <span>{format(breakdown.discount, currency)}</span>
            </div>
          )}
          {breakdown.tax != null && (
            <div className="flex justify-between">
              <span>Tax</span>
              <span>{format(breakdown.tax, currency)}</span>
            </div>
          )}
          <hr />
          {(breakdown.finalTotal ?? breakdown.total) && (
            <div className="flex justify-between font-bold text-xl">
              <span>Total</span>
              <span>{format(breakdown.finalTotal ?? breakdown.total, breakdown.finalTotalCurrency ?? currency)}</span>
            </div>
          )}
        </div>
      </div>
    </div>
  );
}

API Referens

Konfiguration

Initieringsalternativ

interface InitializeOptions {
  mode: "test" | "live";
  displayType: "inline"; // Required for inline checkout
  onEvent: (event: CheckoutEvent) => void;
}
AlternativTypObligatorisktBeskrivning
mode"test" | "live"JaMiljöläge.
displayType"inline" | "overlay"JaMåste vara inställt på "inline" för att bädda in kassan.
onEventfunctionJaCallbackfunktion för att hantera kassa-händelser.

Checkoutalternativ

export type FontSize = "xs" | "sm" | "md" | "lg" | "xl" | "2xl";
export type FontWeight = "normal" | "medium" | "bold" | "extraBold";

interface CheckoutOptions {
  checkoutUrl: string;
  elementId: string; // Required for inline checkout
  options?: {
    showTimer?: boolean;
    showSecurityBadge?: boolean;
    payButtonText?: string;
    fontSize?: FontSize;
    fontWeight?: FontWeight;
  };
}
OptionTypeRequiredDescription
checkoutUrlstringYesURL för utcheckningssessionen.
elementIdstringYesid av DOM-elementet där utcheckningen ska renderas.
options.showTimerbooleanNoVisa eller dölj utcheckningstimern. Standard är true. När den är inaktiverad kommer du att få händelsen checkout.link_expired när sessionen går ut.
options.showSecurityBadgebooleanNoVisa eller dölja säkerhetsmärket. Standard är true.
options.payButtonTextstringNoAnvändardefinierad text för betalknappen.
options.fontSizeFontSizeNoGlobal teckenstorlek för utcheckningen.
options.fontWeightFontWeightNoGlobal teckensnittsvikt för utcheckningen.

Metoder

Öppna Checkout

Öppnar checkout-ramen i den angivna behållaren.
DodoPayments.Checkout.open({
  checkoutUrl: "https://test.dodopayments.com/session/cks_123",
  elementId: "dodo-inline-checkout"
});
Du kan också skicka ytterligare alternativ för att anpassa kassabeteendet:
DodoPayments.Checkout.open({
  checkoutUrl: "https://test.dodopayments.com/session/cks_123",
  elementId: "dodo-inline-checkout",
  options: {
    showTimer: false,
    showSecurityBadge: false,
    payButtonText: "Pay Now",
  },
});

Stäng Utcheckning

Avlägsnar programmatiskt utcheckningsramen och rensar upp händelselyssnare.
DodoPayments.Checkout.close();

Kontrollera Status

Returnerar om utcheckningsramen för närvarande är injicerad.
const isOpen = DodoPayments.Checkout.isOpen();
// Returns: boolean

Händelser

SDK:n tillhandahåller realtidshändelser genom onEvent-återkallningsfunktionen. För inline checkout är checkout.breakdown särskilt användbar för att synkronisera din UI.
HändelsetypBeskrivning
checkout.openedUtcheckningsramen har laddats.
checkout.form_readyUtcheckningsformuläret är redo att mottaga användarinmatning. Användbart för att dölja laddningstillstånd och visa utchecknings-UI:en.
checkout.breakdownSkickas när priser, skatter eller rabatter uppdateras.
checkout.customer_details_submittedKunduppgifter har skickats in.
checkout.pay_button_clickedSkickas när kunden klickar på betalknappen. Användbart för analys och spårning av konverteringstrattar.
checkout.redirectUtcheckningen kommer att utföra en omdirigering (t.ex. till en banksida).
checkout.errorEtt fel uppstod under utcheckningen.
checkout.link_expiredSkickas när utcheckningssessionen löper ut. Endast mottaget när showTimer är inställd på false.

Utcheckningens Detaljer Data

checkout.breakdown-händelsen tillhandahåller följande data:
interface CheckoutBreakdownData {
  subTotal?: number;          // Amount in cents
  discount?: number;         // Amount in cents
  tax?: number;              // Amount in cents
  total?: number;            // Amount in cents
  currency?: string;         // e.g., "USD"
  finalTotal?: number;       // Final amount including adjustments
  finalTotalCurrency?: string; // Currency for the final total
}

Förstå Händelsen Detaljer

checkout.breakdown-händelsen är det primära sättet att hålla din applikations UI synkroniserad med Dodo Payments utcheckningsstatus. När den skickas:
  • Vid initialisering: Omedelbart efter att utcheckningsramen har laddats och är redo.
  • Vid adressändring: När kunden väljer ett land eller anger ett postnummer som leder till en skatteomräkning.
Fältdetaljer:
FältBeskrivning
subTotalSumman av alla radartiklar i sessionen innan några rabatter eller skatter tillämpas.
discountDet totala värdet av alla tillämpade rabatter.
taxDen beräknade skattesumman. I inline-läge uppdateras detta dynamiskt när användaren interagerar med adressfälten.
totalDet matematiska resultatet av subTotal - discount + tax i sessionens basvaluta.
currencyISO-valutakoden (t.ex. "USD") för standard subtotal, rabatt och skattevärden.
finalTotalDet faktiska beloppet kunden debiteras. Detta kan inkludera ytterligare valutajusteringar eller lokala betalningsmetodsavgifter som inte är en del av den grundläggande prisuppdelningen.
finalTotalCurrencyValutan i vilken kunden faktiskt betalar. Detta kan skilja sig från currency om köpkraftsparitet eller lokal valutaomvandling är aktiv.
Viktiga Integreringstips:
  1. Valutaformatering: Priser returneras alltid som heltal i den minsta valutaenheten (t.ex. cent för USD, yen för JPY). För att visa dem, dela med 100 (eller lämplig tiopotens) eller använd ett formateringsbibliotek som Intl.NumberFormat.
  2. Hantering av initiala tillstånd: När utcheckningen först laddas kan tax och discount vara 0 eller null tills användaren anger sina faktureringsuppgifter eller tillämpar en kod. Din UI ska hantera dessa tillstånd på ett smidigt sätt (t.ex. visa ett streck eller dölja raden).
  3. Den “slutliga summan” vs “totalsumman”: Medan total ger dig den standardiserade priskalkylen, är finalTotal källan till sanningen för transaktionen. Om finalTotal är närvarande återspeglar det exakt vad som debiteras kundens kort, inklusive eventuella dynamiska justeringar.
  4. Realtidsfeedback: Använd tax-fältet för att visa användare att skatter beräknas i realtid. Detta ger en “live” känsla till din utcheckningssida och minskar friktionen under adressinmatningssteget.

Implementeringsalternativ

Paketinstallation via Paket Manager

Installera via npm, yarn eller pnpm som det visas i Steg-för-steg-integreringsguiden.

CDN-implementering

För snabb integration utan ett bygga-steg kan du använda vår CDN:
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Dodo Payments Inline Checkout</title>
    
    <!-- Load DodoPayments -->
    <script src="https://cdn.jsdelivr.net/npm/dodopayments-checkout@latest/dist/index.js"></script>
    <script>
        // Initialize the SDK
        DodoPaymentsCheckout.DodoPayments.Initialize({
            mode: "test",
            displayType: "inline",
            onEvent: (event) => {
                console.log('Checkout event:', event);
            }
        });
    </script>
</head>
<body>
    <div id="dodo-inline-checkout"></div>

    <script>
        // Open the checkout
        DodoPaymentsCheckout.DodoPayments.Checkout.open({
            checkoutUrl: "https://test.dodopayments.com/session/cks_123",
            elementId: "dodo-inline-checkout"
        });
    </script>
</body>
</html>

Uppdatera Betalningsmetod

Inline utcheckning stödjer betalningsmetodsuppdateringar för prenumerationer. När en kund behöver uppdatera sin betalningsmetod - vare sig för en aktiv prenumeration eller för att återaktivera en pausad prenumeration - kan du representera uppdateringsflödet direkt inom din sidlayout.

Hur det fungerar

  1. Anropa Uppdatera Betalningsmetod API för att få en payment_link:
const response = await client.subscriptions.updatePaymentMethod('sub_123', {
  type: 'new',
  return_url: 'https://example.com/return'
});
  1. Passera den returnerade payment_link som checkoutUrl för att öppna inline utcheckning:
DodoPayments.Checkout.open({
  checkoutUrl: response.payment_link,
  elementId: "dodo-inline-checkout"
});
Inline-ramen renderar endast formuläret för insamling av betalningsmetod. Kunder kan ange nya kortuppgifter eller välja en sparad betalningsmetod utan att lämna din sida.

För Pausade Prenumerationer

När du uppdaterar betalningsmetoden för en prenumeration i on_hold status, skapar Dodo Payments automatiskt en debitering för eventuella återstående belopp. Övervaka payment.succeeded och subscription.active-webhooks för att bekräfta återaktivering.
const response = await client.subscriptions.updatePaymentMethod('sub_123', {
  type: 'new',
  return_url: 'https://example.com/return'
});

if (response.payment_id) {
  // Charge created for remaining dues
  // Open inline checkout for payment collection
  DodoPayments.Checkout.open({
    checkoutUrl: response.payment_link,
    elementId: "dodo-inline-checkout"
  });
}
Du kan också använda en redan sparad betalningsmetod istället för att samla in nya uppgifter genom att skicka type: 'existing' med en payment_method_id till Uppdatera Betalningsmetod API.

Felhantering

SDK:n tillhandahåller detaljerad felinformation genom händelsesystemet. Implementera alltid korrekt felhantering i din onEvent-återkallning:
DodoPayments.Initialize({
  mode: "test",
  displayType: "inline",
  onEvent: (event: CheckoutEvent) => {
    if (event.event_type === "checkout.error") {
      console.error("Checkout error:", event.data?.message);
      // Handle error appropriately
    }
  }
});
Hantera alltid checkout.error-händelsen för att ge en bra användarupplevelse när problem uppstår.

Bästa Praxis

  1. Responsiv Design: Se till att ditt konteiner-element har tillräcklig bredd och höjd. Iframe kommer vanligtvis expandera för att fylla sin konteiner.
  2. Synkronisering: Använd checkout.breakdown-händelsen för att hålla din anpassade orderöversikt eller prissättningstabeller synkroniserade med vad användaren ser i utcheckningsramen.
  3. Skelettillstånd: Visa en laddningsindikator i din konteiner tills checkout.opened-händelsen skickas.
  4. Rensning: Anropa DodoPayments.Checkout.close() när din komponent avmonteras för att rensa iframe och händelselyssnare.
För mörkertilståndimplementeringar rekommenderas det att använda #0d0d0d som bakgrundsfärg för optimal visuell integration med inline utcheckningsram.

Validering av Betalningsstatus

Lita inte enbart på inline utcheckningshändelser för att avgöra betalningsframgång eller fel. Implementera alltid server-sidig validering med användning av webhooks och/eller polling.

Varför Server-Sidig Validering Är Viktig

Även om inline utcheckningshändelser ger realtidsfeedback, bör de inte vara din enda sanningskälla för betalningsstatus. Nätverksproblem, webbläsarkrascher, eller användare som stänger sidan kan orsaka missade händelser. För att säkerställa tillförlitlig betalningsvalidering:
  1. Din server bör lyssna på webhook-händelser - Dodo Payments skickar webhooks för betalningsstatusändringar
  2. Implementera en polllösning - Din frontend bör hålla koll på din server för statusuppdateringar
  3. Kombinera båda tillvägagångssätten - Använd webhooks som den primära källan och polling som en reservlösning

Rekommenderad Arkitektur

Implementeringssteg

1. Lyssna efter utcheckningshändelser - När användaren klickar på betala, börja förbereda för att verifiera statusen:
onEvent: (event) => {
  if (event.event_type === 'checkout.pay_button_clicked') {
    // Start polling your server for confirmed status
    startPolling();
  }
}
2. Poll din server - Skapa en slutpunkt som kontrollerar din databas för betalningsstatus (uppdaterad av webhooks):
// Poll every 2 seconds until status is confirmed
const interval = setInterval(async () => {
  const { status } = await fetch(`/api/payments/${paymentId}/status`).then(r => r.json());
  if (status === 'succeeded' || status === 'failed') {
    clearInterval(interval);
    handlePaymentResult(status);
  }
}, 2000);
3. Hantera server-side webhooks - Uppdatera din databas när Dodo skickar payment.succeeded eller payment.failed webhooks. Se vår Webhook-dokumentation för detaljer.

Felsökning

  • Verifiera att elementId matchar id av en div som faktiskt finns i DOM.
  • Se till att displayType: 'inline' överlämnades till Initialize.
  • Kontrollera att checkoutUrl är giltig.
  • Se till att du lyssnar på checkout.breakdown-händelsen.
  • Skatter beräknas först efter att användaren angett ett giltigt land och postnummer i utcheckningsramen.

Aktivera Digitala Plånböcker

För detaljerad information om inställning av Apple Pay, Google Pay och andra digitala plånböcker, se sidan Digitala Plånböcker.

Snabbinställning för Apple Pay

1

Download domain association file

2

Request activation

Skicka e-post till support@dodopayments.com med din produktionsdomän-URL och begär aktivering av Apple Pay.
3

Test after confirmation

När det är bekräftat, kontrollera att Apple Pay visas i utcheckningen och testa det fullständiga flödet.
Apple Pay kräver domänverifiering innan det visas i produktion. Kontakta support innan du går live om du planerar att erbjuda Apple Pay.

Webbläsarstöd

Dodo Payments Checkout SDK stödjer följande webbläsare:
  • Chrome (senaste)
  • Firefox (senaste)
  • Safari (senaste)
  • Edge (senaste)
  • IE11+

Inline vs Overlay Checkout

Välj rätt utcheckningstyp för ditt användningsfall:
FunktionInline CheckoutOverlay Checkout
IntegrationsdjupFullt inbäddad på sidanModal ovanpå sidan
Layout-kontrollFull kontrollBegränsad
BrandingSömlösSeparat från sidan
ImplementeringsinsatsHögreLägre
Bäst förAnpassade utcheckningssidor, flöden med hög konverteringSnabb integration, befintliga sidor
Använd inline checkout när du vill ha maximal kontroll över utcheckningens upplevelse och sömlös branding. Använd overlay checkout för snabbare integration med minimala förändringar på dina befintliga sidor.

Relaterade Resurser

Overlay Checkout

Använd overlay checkout för snabb modal-baserad integration.

Checkout Sessions API

Skapa utcheckningssessioner för att driva dina utcheckningsupplevelser.

Webhooks

Hantera betalningshändelser server-side med webhooks.

Integration Guide

Komplett guide till integration av Dodo Payments.
För mer hjälp, besök vår Discord-community eller kontakta vårt utvecklarstödstema.
Last modified on April 20, 2026