Hoppa till huvudinnehåll

Vad är Kundplånböcker?

Tänk på kundplånböcker som digitala spargrisar för dina användare. Varje kund får en automatiskt när du skapar deras konto. Du kan använda dessa plånböcker för:
  • Spåra kreditbalanser i USD och INR
  • Bygga API-kreditsystem som OpenAI eller Claude
  • Skapa förbetald fakturering där kunder köper krediter i förskott
  • Hantera återbetalningar som plånbokskrediter istället för kontanter
  • Hantera komplex fakturering med detaljerad transaktionshistorik
Varje kund får automatiskt en plånbok när du skapar deras konto. Plånböcker stöder USD och INR-valutor med separata saldon för varje.
Kundplånböcker

Hur Det Fungerar

Kundplånböcker är enkla: de håller pengar (krediter) som kunder kan spendera på dina tjänster. När en kund gör ett köp kontrolleras deras plånboksaldo först, och eventuella tillgängliga krediter används innan deras betalningsmetod debiteras.

Automatisk Installation

När du skapar en ny kund skapar Dodo Payments automatiskt en plånbok med noll saldo. Den är redo att användas omedelbart genom vårt API.

Stöd för Flera Valutor

Varje plånbok kan hålla saldon i olika valutor:
USD Balance
integer
Saldo i US Dollar (lagrat i cent)
INR Balance
integer
Saldo i Indiska Rupeer (lagrat i paise)
För närvarande är endast USD och INR saldon tillgängliga. Fler valutor kommer snart.

Arbeta med Plånböcker

Kontrollera Kunders Saldo

Se hur mycket kredit en kund har över alla valutor. Perfekt för att kontrollera om de har tillräckligt med medel innan du behandlar ett köp.

Hämta Kundplånboksaldon

Kontrollera en kunds plånbokskreditsaldon i alla stödda valutor.

Lägg till eller Ta Bort Krediter

Ge kunder krediter (som välkomstbonusar) eller dra av krediter (som användningsavgifter). Du kan lägga till anledningar för varje transaktion för att hålla reda på vad som hände.

Skapa Bokföringspost för Kundplånbok

Lägg till eller ta bort krediter från en kunds plånbok.

Visa Transaktionshistorik

Se varje kredit- och debettransaktion för en kund. Utmärkt för att felsöka faktureringsproblem eller visa kunder deras utgiftshistorik.

Lista Bokföringsposter för Kundplånbok

Visa varje kredit- och debettransaktion för en kund.

Exempel från Verkligheten

API-kreditsystem (Som OpenAI)

Bygg ett system där kunder köper krediter och spenderar dem på API-anrop:
// Give new customers welcome credits
async function giveWelcomeCredits(customerId) {
  await client.customers.wallets.ledgerEntries.create(customerId, {
    amount: 10000, // $100 in cents
    currency: 'USD',
    entry_type: 'credit',
    reason: 'Welcome bonus - 100 API credits',
    idempotency_key: `welcome_${customerId}_${Date.now()}`
  });
}

// Charge customers for API usage
async function chargeForApiUsage(customerId, usageCost) {
  try {
    await client.customers.wallets.ledgerEntries.create(customerId, {
      amount: usageCost, // Cost in cents
      currency: 'USD',
      entry_type: 'debit',
      reason: `API usage - ${usageCost} credits consumed`,
      idempotency_key: `usage_${customerId}_${Date.now()}`
    });
  } catch (error) {
    if (error.status === 400) {
      console.log('Customer needs to buy more credits');
    }
  }
}

Förbetalt Faktureringssystem

Låt kunder köpa krediter i förskott och spendera dem över tid:
1

Välkomna Nya Kunder

Ge nya kunder några gratis krediter för att komma igång.
await client.customers.wallets.ledgerEntries.create(customerId, {
  amount: 5000, // $50 welcome bonus
  currency: 'USD',
  entry_type: 'credit',
  reason: 'Welcome bonus for new customer',
  idempotency_key: `welcome_${customerId}`
});
2

Hantera Kreditköp

När kunder köper krediter, lägg till dem i deras plånbok.
await client.customers.wallets.ledgerEntries.create(customerId, {
  amount: purchaseAmount, // Amount paid in cents
  currency: 'USD',
  entry_type: 'credit',
  reason: `Credit purchase - ${purchaseAmount} credits`,
  idempotency_key: `purchase_${paymentId}`
});
3

Debitering för Användning

Dra av krediter när kunder använder din tjänst.
await client.customers.wallets.ledgerEntries.create(customerId, {
  amount: usageCost,
  currency: 'USD', 
  entry_type: 'debit',
  reason: `Service usage - ${usageCost} credits`,
  idempotency_key: `usage_${usageId}`
});
4

Övervaka Saldo

Kontrollera om kunder har lågt med krediter.
const wallets = await client.customers.wallets.list(customerId);
const usdWallet = wallets.items.find(w => w.currency === 'USD');
const balance = usdWallet.balance;

if (balance < 1000) { // Less than $10
  // Send low balance notification
  await sendLowBalanceNotification(customerId, balance);
}

Stöd för Flera Valutor

Hantera kunder i olika länder:
Ge USD-krediter till kunder baserade i USA.
await client.customers.wallets.ledgerEntries.create(customerId, {
  amount: 20000, // $200 in cents
  currency: 'USD',
  entry_type: 'credit',
  reason: 'USD credit purchase',
  idempotency_key: `usd_purchase_${paymentId}`
});
Ge INR-krediter till indiska kunder.
await client.customers.wallets.ledgerEntries.create(customerId, {
  amount: 1500000, // Rs 15,000 in paise
  currency: 'INR',
  entry_type: 'credit',
  reason: 'INR credit purchase',
  idempotency_key: `inr_purchase_${paymentId}`
});

Bästa Praxis

Förhindra Duplicerade Transaktioner

Använd idempotensnycklar för att säkerställa att du inte av misstag debiterar kunder två gånger för samma sak:
async function addCreditsSafely(customerId, amount, reason) {
  const idempotencyKey = `${reason}_${customerId}_${Date.now()}`;
  
  try {
    const result = await client.customers.wallets.ledgerEntries.create(customerId, {
      amount: amount,
      currency: 'USD',
      entry_type: 'credit',
      reason: reason,
      idempotency_key: idempotencyKey
    });
    
    return { success: true, wallet: result };
  } catch (error) {
    if (error.status === 400 && error.message.includes('Insufficient balance')) {
      return { success: false, error: 'INSUFFICIENT_BALANCE' };
    }
    
    if (error.status === 409) {
      // Transaction already processed
      return { success: true, wallet: null, duplicate: true };
    }
    
    throw error;
  }
}

Kontrollera Saldo Innan Debitering

Verifiera alltid att kunder har tillräckligt med krediter innan du behandlar dyra operationer:
async function checkBalanceBeforeOperation(customerId, requiredAmount) {
  const wallets = await client.customers.wallets.list(customerId);
  const usdWallet = wallets.items.find(w => w.currency === 'USD');
  
  if (!usdWallet || usdWallet.balance < requiredAmount) {
    throw new Error('Not enough credits for this operation');
  }
  
  return usdWallet.balance;
}

Vad Som Kommer Nästa

Dessa funktioner är planerade för framtida versioner:
  • Kreditutgång: Ställ in krediter att gå ut efter en viss tid
  • Bättre Analys: Detaljerade utgiftsrapporter och användningsinsikter
  • Fler Webhooks: Realtidsnotifikationer för saldoförändringar och låga krediter
Börja enkelt med grundläggande kredit-/debitoperationer, och lägg sedan till mer komplexa funktioner när ditt företag växer.