Chuyển đến nội dung chính
SDK TypeScript cung cấp quyền truy cập thuận tiện từ phía máy chủ vào API REST Dodo Payments cho các ứng dụng TypeScript và JavaScript. Nó có các định nghĩa kiểu toàn diện, xử lý lỗi, thử lại, thời gian chờ và phân trang tự động để xử lý thanh toán liền mạch.

Cài đặt

Cài đặt SDK bằng cách sử dụng trình quản lý gói mà bạn chọn:
npm install dodopayments

Bắt đầu nhanh

Khởi tạo client với khóa API của bạn và bắt đầu xử lý thanh toán:
import DodoPayments from 'dodopayments';

const client = new DodoPayments({
  bearerToken: process.env['DODO_PAYMENTS_API_KEY'], // This is the default and can be omitted
  environment: 'test_mode', // defaults to 'live_mode'
});

const checkoutSessionResponse = await client.checkoutSessions.create({
  product_cart: [{ product_id: 'product_id', quantity: 1 }],
});

console.log(checkoutSessionResponse.session_id);
Luôn lưu trữ các khóa API của bạn một cách an toàn bằng cách sử dụng biến môi trường. Không bao giờ cam kết chúng vào kiểm soát phiên bản hoặc tiết lộ chúng trong mã phía client.

Tính năng chính

TypeScript First

Hỗ trợ TypeScript đầy đủ với các định nghĩa kiểu toàn diện cho tất cả các điểm cuối API

Auto-Pagination

Phân trang tự động cho các phản hồi danh sách giúp làm việc với các tập dữ liệu lớn trở nên dễ dàng

Error Handling

Các loại lỗi tích hợp với thông điệp chi tiết cho các kịch bản thất bại khác nhau

Smart Retries

Thử lại tự động có thể cấu hình với thời gian chờ tăng dần cho các lỗi tạm thời

Cấu hình

Biến môi trường

Đặt biến môi trường cho cấu hình an toàn:
.env
DODO_PAYMENTS_API_KEY=your_api_key_here

Cấu hình thời gian chờ

Cấu hình thời gian chờ yêu cầu toàn cục hoặc theo yêu cầu:
// Configure default timeout for all requests (default is 1 minute)
const client = new DodoPayments({
  timeout: 20 * 1000, // 20 seconds
});

// Override per-request
await client.checkoutSessions.create(
  { product_cart: [{ product_id: 'product_id', quantity: 0 }] },
  { timeout: 5 * 1000 }
);

Cấu hình thử lại

Cấu hình hành vi thử lại tự động:
// Configure default for all requests (default is 2 retries)
const client = new DodoPayments({
  maxRetries: 0, // disable retries
});

// Override per-request
await client.checkoutSessions.create(
  { product_cart: [{ product_id: 'product_id', quantity: 0 }] },
  { maxRetries: 5 }
);
SDK tự động thử lại các yêu cầu thất bại do lỗi mạng hoặc sự cố máy chủ (phản hồi 5xx) với thời gian chờ tăng dần.

Các thao tác thông thường

Tạo phiên thanh toán

Tạo một phiên thanh toán để thu thập thông tin thanh toán:
const session = await client.checkoutSessions.create({
  product_cart: [
    {
      product_id: 'prod_123',
      quantity: 1
    }
  ],
  return_url: 'https://yourdomain.com/return'
});

console.log('Redirect to:', session.url);

Quản lý khách hàng

Tạo và truy xuất thông tin khách hàng:
// Create a customer
const customer = await client.customers.create({
  email: '[email protected]',
  name: 'John Doe',
  metadata: {
    user_id: '12345'
  }
});

// Retrieve customer
const retrieved = await client.customers.retrieve('cus_123');
console.log(`Customer: ${retrieved.name} (${retrieved.email})`);

Xử lý đăng ký

Tạo và quản lý các đăng ký định kỳ:
// Create a subscription
const subscription = await client.subscriptions.create({
  customer_id: 'cus_123',
  product_id: 'prod_456',
  price_id: 'price_789'
});

// Retrieve subscription usage history
const usageHistory = await client.subscriptions.retrieveUsageHistory('sub_123', {
  start_date: '2024-01-01T00:00:00Z',
  end_date: '2024-03-31T23:59:59Z'
});

Thanh toán dựa trên mức sử dụng

Nhập sự kiện sử dụng

Theo dõi các sự kiện tùy chỉnh cho thanh toán dựa trên mức sử dụng:
await client.usageEvents.ingest({
  events: [
    {
      event_id: 'api_call_12345',
      customer_id: 'cus_abc123',
      event_name: 'api_request',
      timestamp: '2024-01-15T10:30:00Z',
      metadata: {
        endpoint: '/api/v1/users',
        method: 'GET',
        tokens_used: '150'
      }
    }
  ]
});
Các sự kiện phải có các giá trị event_id duy nhất để đảm bảo tính idempotency. Các ID trùng lặp trong cùng một yêu cầu sẽ bị từ chối, và các yêu cầu tiếp theo với các ID đã tồn tại sẽ bị bỏ qua.

Truy xuất sự kiện sử dụng

Lấy thông tin chi tiết về các sự kiện sử dụng:
// Get a specific event
const event = await client.usageEvents.retrieve('api_call_12345');

// List events with filtering
const events = await client.usageEvents.list({
  customer_id: 'cus_abc123',
  event_name: 'api_request',
  start: '2024-01-14T10:30:00Z',
  end: '2024-01-15T10:30:00Z'
});

Cấu hình proxy

Cấu hình cài đặt proxy cho các runtime khác nhau:

Node.js (sử dụng undici)

import DodoPayments from 'dodopayments';
import * as undici from 'undici';

const proxyAgent = new undici.ProxyAgent('http://localhost:8888');
const client = new DodoPayments({
  fetchOptions: {
    dispatcher: proxyAgent,
  },
});

Bun

import DodoPayments from 'dodopayments';

const client = new DodoPayments({
  fetchOptions: {
    proxy: 'http://localhost:8888',
  },
});

Deno

import DodoPayments from 'npm:dodopayments';

const httpClient = Deno.createHttpClient({ proxy: { url: 'http://localhost:8888' } });
const client = new DodoPayments({
  fetchOptions: {
    client: httpClient,
  },
});

Ghi log

Kiểm soát độ chi tiết của log bằng cách sử dụng biến môi trường hoặc tùy chọn client:
// Via client option
const client = new DodoPayments({
  logLevel: 'debug', // Show all log messages
});
# Via environment variable
export DODO_PAYMENTS_LOG=debug
Các mức log có sẵn:
  • 'debug' - Hiển thị thông điệp gỡ lỗi, thông tin, cảnh báo và lỗi
  • 'info' - Hiển thị thông điệp thông tin, cảnh báo và lỗi
  • 'warn' - Hiển thị cảnh báo và lỗi (mặc định)
  • 'error' - Chỉ hiển thị lỗi
  • 'off' - Vô hiệu hóa tất cả ghi log
Ở mức gỡ lỗi, tất cả các yêu cầu và phản hồi HTTP đều được ghi lại, bao gồm cả tiêu đề và nội dung. Một số tiêu đề xác thực sẽ bị ẩn, nhưng dữ liệu nhạy cảm trong nội dung có thể vẫn hiển thị.

Di chuyển từ SDK Node.js

Nếu bạn đang nâng cấp từ SDK Node.js cũ, SDK TypeScript cung cấp tính an toàn kiểu và các tính năng cải tiến:

Xem hướng dẫn di chuyển

Tìm hiểu cách di chuyển từ SDK Node.js sang SDK TypeScript

Tài nguyên

Hỗ trợ

Cần trợ giúp với SDK TypeScript?

Đóng góp

Chúng tôi hoan nghênh các đóng góp! Kiểm tra hướng dẫn đóng góp để bắt đầu.