Hoppa till huvudinnehåll
Dynamisk prissättning gör att du kan erbjuda variabel prissättning för dina produkter utan att skapa flera produktinlägg. Genom att aktivera Betala Vad Du Vill (PWYW) på en enda produkt kan du ställa in minimala och maximala prisgränser, och sedan skicka dynamiska belopp när du skapar kassa-sessionlänkar. Denna metod är idealisk när du behöver:
  • Variabel prissättning utan att hantera flera produkter
  • Kunddriven prissättning där köpare väljer sitt belopp
  • Programmatisk prisstyrning där du ställer in beloppet dynamiskt via API
  • Flexibla prissättningsmodeller för digitala produkter, donationer eller experimentella lanseringar
Betala Vad Du Vill är endast tillgängligt för Engångsbetalning (engångs) produkter. Det kan inte användas med prenumerationsprodukter.

Hur Det Fungerar

Med Betala Vad Du Vill aktiverat kan du:
  1. Ställa in prisgränser: Definiera ett minimipris (obligatoriskt) och eventuellt ett maximipris
  2. Skicka dynamiska belopp: Inkludera ett amount fält i produktkorgen när du skapar kassa-sessioner
  3. Låta kunder välja: Om inget belopp anges kan kunder ange sitt eget pris (inom dina gränser)
När du skickar ett amount i produktkorgen används det beloppet för kassan. Om du utelämnar amount fältet kan kunder välja sitt eget pris under kassan (underkastat dina minimala/maximala inställningar).

Steg 1: Skapa en Produkt med Betala Vad Du Vill

Först, skapa en engångsprodukt i din Dodo Payments-instrumentpanel och aktivera Betala Vad Du Vill-prissättning.
1

Skapa en ny produkt

Navigera till Produkter i din Dodo Payments-instrumentpanel och klicka på Lägg till produkt.
2

Konfigurera produktinformation

Fyll i den obligatoriska produktinformationen:
  • Produktnamn: Visningsnamn för din produkt
  • Produktbeskrivning: Tydlig beskrivning av vad kunder köper
  • Produktbild: Ladda upp en bild (PNG/JPG/WebP, upp till 3 MB)
  • Skattekategori: Välj den lämpliga skattekategorin
3

Ställ in prissättningstyp

Välj Prissättningstyp som Engångsbetalning (engångsbetalning).
4

Aktivera Betala Vad Du Vill

I Prissättning-sektionen, aktivera Betala Vad Du Vill-knappen.
5

Ställ in minimipris

Ange det Minimipris som kunder måste betala. Detta är obligatoriskt och säkerställer att du upprätthåller en intäktsgolv.Exempel: Om ditt minimum är $5.00, ange 5.00 (eller 500 cent).
6

Ställ in maximipris (valfritt)

Valfritt, ställ in ett Maximipris för att begränsa det belopp kunder kan betala.
7

Ställ in föreslaget pris (valfritt)

Valfritt, ange ett Föreslaget pris som kommer att visas för att vägleda kunder. Detta hjälper till att ankra förväntningar och kan förbättra genomsnittligt ordervärde.
8

Spara produkten

Klicka på Lägg till produkt för att spara. Notera ditt produkt-ID (t.ex. pdt_123abc456def) för användning i kassa-sessioner.
Du kan hitta ditt produkt-ID i instrumentpanelen under ProdukterVisa detaljer, eller genom att använda List Products API.

Steg 2: Skapa Kassa-sessioner med Dynamisk Prissättning

När din produkt är konfigurerad med Betala Vad Du Vill kan du skapa kassa-sessioner med dynamiska belopp. amount fältet i produktkorgen gör att du kan ställa in priset programatiskt för varje kassa-session.

Förstå Beloppsfältet

När du skapar en kassa-session kan du inkludera ett amount fält i varje produktkorgsobjekt:
  • Om amount anges: Kassan använder detta exakta belopp (måste vara inom dina minimala/maximala gränser)
  • Om amount utelämnas: Kunder kan ange sitt eget pris under kassan (inom dina gränser)
amount fältet är endast tillämpligt för Betala Vad Du Vill-produkter. För vanliga produkter ignoreras detta fält.

Kodexempel

import DodoPayments from 'dodopayments';

// Initialize the Dodo Payments client
const client = new DodoPayments({
  bearerToken: process.env.DODO_PAYMENTS_API_KEY,
});

async function createDynamicPricingCheckout(
  productId: string,
  amountInCents: number,
  returnUrl: string
) {
  try {
    const session = await client.checkoutSessions.create({
      product_cart: [
        {
          product_id: productId,
          quantity: 1,
          // Dynamic amount in cents (e.g., 1500 = $15.00)
          amount: amountInCents
        }
      ],
      return_url: returnUrl,
      // Optional: Pre-fill customer information
      customer: {
        email: '[email protected]',
        name: 'John Doe'
      },
      // Optional: Add metadata for tracking
      metadata: {
        order_id: 'order_123',
        pricing_tier: 'custom'
      }
    });

    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: Create checkout with $25.00 (2500 cents)
const session = await createDynamicPricingCheckout(
  'prod_123abc456def',
  2500, // $25.00 in cents
  'https://yoursite.com/checkout/success'
);

// Example: Create checkout with $10.00 (1000 cents)
const session2 = await createDynamicPricingCheckout(
  'prod_123abc456def',
  1000, // $10.00 in cents
  'https://yoursite.com/checkout/success'
);
Beloppsformat: amount fältet måste vara i den lägsta enheten av valutan. För USD betyder detta cent (t.ex. $25.00 = 2500). För andra valutor, använd den minsta enheten (t.ex. paise för INR).

Steg 3: Låt Kunder Välja Deras Pris

Om du vill att kunder ska välja sitt eget pris under kassan, utelämna helt enkelt amount fältet från produktkorgen. Kassasidan kommer att visa ett inmatningsfält där kunder kan ange vilket belopp som helst inom dina minimala och maximala gränser.
async function createCustomerChoiceCheckout(
  productId: string,
  returnUrl: string
) {
  try {
    const session = await client.checkoutSessions.create({
      product_cart: [
        {
          product_id: productId,
          quantity: 1
          // No amount field - customer will choose their price
        }
      ],
      return_url: returnUrl,
      customer: {
        email: '[email protected]',
        name: 'John Doe'
      }
    });

    return session;
  } catch (error) {
    console.error('Failed to create checkout session:', error);
    throw error;
  }
}

Vanliga Användningsfall

Användningsfall 1: Tiers Prissättning Baserat på Användartyp

Erbjud olika priser till olika kundsegment med samma produkt:
// Student discount: $10.00
const studentSession = await createDynamicPricingCheckout(
  'prod_123abc456def',
  1000, // $10.00
  'https://yoursite.com/success'
);

// Regular price: $25.00
const regularSession = await createDynamicPricingCheckout(
  'prod_123abc456def',
  2500, // $25.00
  'https://yoursite.com/success'
);

// Premium price: $50.00
const premiumSession = await createDynamicPricingCheckout(
  'prod_123abc456def',
  5000, // $50.00
  'https://yoursite.com/success'
);

Användningsfall 2: Dynamisk Prissättning Baserat på Kvantitet

Justera priset baserat på köpt kvantitet:
async function createQuantityBasedCheckout(
  productId: string,
  quantity: number
) {
  // Base price: $20.00 per unit
  // Discount: 10% for 2+ items, 20% for 5+ items
  const basePrice = 2000; // $20.00 in cents
  let discount = 0;
  
  if (quantity >= 5) {
    discount = 0.20; // 20% off
  } else if (quantity >= 2) {
    discount = 0.10; // 10% off
  }
  
  const totalAmount = Math.round(basePrice * quantity * (1 - discount));
  
  const session = await client.checkoutSessions.create({
    product_cart: [
      {
        product_id: productId,
        quantity: quantity,
        amount: totalAmount
      }
    ],
    return_url: 'https://yoursite.com/success'
  });
  
  return session;
}

Användningsfall 3: Tidsbaserad eller Kampanjprissättning

Tillämpa kampanjprissättning under specifika perioder:
async function createPromotionalCheckout(productId: string) {
  const isPromoActive = checkIfPromotionActive(); // Your logic
  const regularPrice = 3000; // $30.00
  const promoPrice = 2000; // $20.00
  
  const amount = isPromoActive ? promoPrice : regularPrice;
  
  const session = await client.checkoutSessions.create({
    product_cart: [
      {
        product_id: productId,
        quantity: 1,
        amount: amount
      }
    ],
    return_url: 'https://yoursite.com/success',
    metadata: {
      pricing_type: isPromoActive ? 'promotional' : 'regular'
    }
  });
  
  return session;
}

Bästa Praxis

Ställ Rimliga Gränser

Välj ett minimipris som täcker dina kostnader samtidigt som det förblir tillgängligt. Använd ett föreslaget pris för att vägleda kundernas förväntningar.

Validera Belopp

Validera alltid att dynamiska belopp ligger inom produktens minimala och maximala gränser innan du skapar kassa-sessioner.

Spåra Prissättningsbeslut

Använd metadata för att spåra varför specifika belopp valdes (t.ex. pricing_tier, discount_code, user_segment).

Hantera Gränsfall

Säkerställ att din applikation hanterar fall där belopp överskrider maximala gränser eller faller under minimala gränser på ett smidigt sätt.

Validering och Felhantering

Validera alltid belopp mot produktens minimala och maximala inställningar:
async function createValidatedCheckout(
  productId: string,
  amountInCents: number,
  minAmount: number,
  maxAmount: number | null
) {
  // Validate minimum
  if (amountInCents < minAmount) {
    throw new Error(
      `Amount ${amountInCents} is below minimum ${minAmount}`
    );
  }
  
  // Validate maximum (if set)
  if (maxAmount !== null && amountInCents > maxAmount) {
    throw new Error(
      `Amount ${amountInCents} exceeds maximum ${maxAmount}`
    );
  }
  
  // Create checkout session
  return await client.checkoutSessions.create({
    product_cart: [
      {
        product_id: productId,
        quantity: 1,
        amount: amountInCents
      }
    ],
    return_url: 'https://yoursite.com/success'
  });
}

API Referens

Felsökning

Om ditt amount fält ignoreras, verifiera att:
  • Produkten har Betala Vad Du Vill aktiverat i instrumentpanelen
  • Produkten är en Engångsbetalning (engångs) produkt, inte en prenumeration
  • Beloppet är i rätt format (lägsta valutaenhet, t.ex. cent för USD)
API:et kommer att avvisa kassa-sessioner där beloppet bryter mot produktens prisgränser. Validera alltid belopp innan du skapar kassa-sessioner, eller låt kunder välja sitt pris genom att utelämna amount fältet.
Om kunder inte ser inmatningsfältet för pris, se till att du har utelämnat amount fältet från produktkorgen. När amount anges, använder kassan det exakta beloppet.