Ví Khách Hàng Là Gì?
Hãy nghĩ về ví khách hàng như những chiếc heo đất kỹ thuật số cho người dùng của bạn. Mỗi khách hàng sẽ tự động nhận được một chiếc khi bạn tạo tài khoản cho họ. Bạn có thể sử dụng những ví này để:
Theo dõi số dư tín dụng bằng USD và INR
Xây dựng hệ thống tín dụng API như OpenAI hoặc Claude
Tạo thanh toán trả trước nơi khách hàng mua tín dụng trước
Xử lý hoàn tiền dưới dạng tín dụng ví thay vì tiền mặt
Quản lý thanh toán phức tạp với lịch sử giao dịch chi tiết
Mỗi khách hàng tự động nhận được một ví khi bạn tạo tài khoản cho họ. Ví hỗ trợ các loại tiền tệ USD và INR với số dư riêng cho mỗi loại.
Cách Hoạt Động
Ví khách hàng rất đơn giản: chúng giữ tiền (tín dụng) mà khách hàng có thể chi tiêu cho dịch vụ của bạn. Khi một khách hàng thực hiện mua hàng, số dư ví của họ sẽ được kiểm tra trước, và bất kỳ tín dụng nào có sẵn sẽ được sử dụng trước khi tính phí vào phương thức thanh toán của họ.
Thiết Lập Tự Động
Khi bạn tạo một khách hàng mới, Dodo Payments sẽ tự động tạo một ví với số dư bằng không. Nó sẵn sàng sử dụng ngay lập tức thông qua API của chúng tôi.
Hỗ Trợ Đa Tiền Tệ
Mỗi ví có thể giữ số dư bằng các loại tiền tệ khác nhau:
Số dư bằng Đô la Mỹ (lưu trữ bằng xu)
Số dư bằng Rupee Ấn Độ (lưu trữ bằng paise)
Hiện tại, chỉ có số dư USD và INR là có sẵn. Nhiều loại tiền tệ khác sẽ sớm có mặt.
Làm Việc Với Ví
Kiểm Tra Số Dư Khách Hàng
Xem khách hàng có bao nhiêu tín dụng trên tất cả các loại tiền tệ. Thích hợp để kiểm tra xem họ có đủ tiền trước khi xử lý một giao dịch mua.
Lấy Số Dư Ví Khách Hàng Kiểm tra số dư tín dụng ví của khách hàng trong tất cả các loại tiền tệ được hỗ trợ.
Thêm Hoặc Xóa Tín Dụng
Cung cấp tín dụng cho khách hàng (như tiền thưởng chào mừng) hoặc trừ tín dụng (như phí sử dụng). Bạn có thể thêm lý do cho mỗi giao dịch để theo dõi những gì đã xảy ra.
Tạo Mục Sổ Kế Toán Ví Khách Hàng Thêm hoặc xóa tín dụng từ ví của khách hàng.
Xem Lịch Sử Giao Dịch
Xem mọi giao dịch tín dụng và ghi nợ cho một khách hàng. Tuyệt vời để gỡ lỗi các vấn đề thanh toán hoặc cho khách hàng thấy lịch sử chi tiêu của họ.
Danh Sách Mục Sổ Kế Toán Ví Khách Hàng Xem mọi giao dịch tín dụng và ghi nợ cho một khách hàng.
Ví Dụ Thực Tế
Hệ Thống Tín Dụng API (Giống OpenAI)
Xây dựng một hệ thống nơi khách hàng mua tín dụng và chi tiêu chúng cho các cuộc gọi API:
// 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' );
}
}
}
Hệ Thống Thanh Toán Trả Trước
Cho phép khách hàng mua tín dụng trước và chi tiêu chúng theo thời gian:
Chào Mừng Khách Hàng Mới
Cung cấp cho khách hàng mới một số tín dụng miễn phí để bắt đầu. 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 } `
});
Xử Lý Mua Tín Dụng
Khi khách hàng mua tín dụng, hãy thêm chúng vào ví của họ. 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 } `
});
Tính Phí Sử Dụng
Trừ tín dụng khi khách hàng sử dụng dịch vụ của bạn. await client . customers . wallets . ledgerEntries . create ( customerId , {
amount: usageCost ,
currency: 'USD' ,
entry_type: 'debit' ,
reason: `Service usage - ${ usageCost } credits` ,
idempotency_key: `usage_ ${ usageId } `
});
Theo Dõi Số Dư
Kiểm tra xem khách hàng có đang thiếu tín dụng hay không. 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 );
}
Hỗ Trợ Đa Tiền Tệ
Xử lý khách hàng ở các quốc gia khác nhau:
Cung cấp tín dụng USD cho khách hàng có trụ sở tại Mỹ. 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 } `
});
Cung cấp tín dụng INR cho khách hàng Ấn Độ. 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 } `
});
Thực Hành Tốt Nhất
Ngăn Chặn Giao Dịch Trùng Lặp
Sử dụng khóa idempotency để đảm bảo bạn không vô tình tính phí khách hàng hai lần cho cùng một thứ:
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 ;
}
}
Kiểm Tra Số Dư Trước Khi Tính Phí
Luôn xác minh rằng khách hàng có đủ tín dụng trước khi xử lý các thao tác tốn kém:
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 ;
}
Những Gì Sẽ Đến Tiếp Theo
Những tính năng này dự kiến sẽ có trong các bản phát hành tương lai:
Hết Hạn Tín Dụng : Đặt tín dụng hết hạn sau một khoảng thời gian nhất định
Phân Tích Tốt Hơn : Báo cáo chi tiêu chi tiết và thông tin sử dụng
Nhiều Webhook Hơn : Thông báo thời gian thực cho các thay đổi số dư và tín dụng thấp
Bắt đầu đơn giản với các thao tác tín dụng/ghi nợ cơ bản, sau đó thêm các tính năng phức tạp hơn khi doanh nghiệp của bạn phát triển.