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.
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:
Saldo i US Dollar (lagrat i cent)
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:
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 } `
});
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 } `
});
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 } `
});
Ö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.