Langsung ke konten utama
SDK TypeScript menyediakan akses server-side yang nyaman ke Dodo Payments REST API untuk aplikasi TypeScript dan JavaScript. Ini memiliki definisi tipe yang komprehensif, penanganan kesalahan, pengulangan, batas waktu, dan auto-pagination untuk pemrosesan pembayaran yang mulus.

Instalasi

Instal SDK menggunakan manajer paket pilihan Anda:
npm install dodopayments

Memulai dengan Cepat

Inisialisasi klien dengan kunci API Anda dan mulai memproses pembayaran:
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);
Selalu simpan kunci API Anda dengan aman menggunakan variabel lingkungan. Jangan pernah mengkomitnya ke kontrol versi atau mengeksposnya dalam kode sisi klien.

Fitur Utama

TypeScript Pertama

Dukungan penuh TypeScript dengan definisi tipe yang komprehensif untuk semua endpoint API

Auto-Pagination

Pagination otomatis untuk respons daftar membuat bekerja dengan dataset besar menjadi mudah

Penanganan Kesalahan

Tipe kesalahan bawaan dengan pesan rinci untuk berbagai skenario kegagalan

Pengulangan Cerdas

Pengulangan otomatis yang dapat dikonfigurasi dengan backoff eksponensial untuk kesalahan sementara

Konfigurasi

Variabel Lingkungan

Atur variabel lingkungan untuk konfigurasi yang aman:
.env
DODO_PAYMENTS_API_KEY=your_api_key_here

Konfigurasi Batas Waktu

Konfigurasi batas waktu permintaan secara global atau per permintaan:
// 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 }
);

Konfigurasi Pengulangan

Konfigurasi perilaku pengulangan otomatis:
// 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 secara otomatis mengulangi permintaan yang gagal karena kesalahan jaringan atau masalah server (respon 5xx) dengan backoff eksponensial.

Operasi Umum

Buat Sesi Checkout

Hasilkan sesi checkout untuk mengumpulkan informasi pembayaran:
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);

Kelola Pelanggan

Buat dan ambil informasi pelanggan:
// 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})`);

Tangani Langganan

Buat dan kelola langganan berulang:
// 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'
});

Penagihan Berdasarkan Penggunaan

Masukkan Acara Penggunaan

Lacak acara kustom untuk penagihan berdasarkan penggunaan:
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'
      }
    }
  ]
});
Acara harus memiliki nilai event_id yang unik untuk idempotensi. ID duplikat dalam permintaan yang sama ditolak, dan permintaan berikutnya dengan ID yang ada diabaikan.

Ambil Acara Penggunaan

Ambil informasi rinci tentang acara penggunaan:
// 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'
});

Konfigurasi Proxy

Konfigurasi pengaturan proxy untuk berbagai runtime:

Node.js (menggunakan 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,
  },
});

Logging

Kontrol tingkat verbosity log menggunakan variabel lingkungan atau opsi klien:
// Via client option
const client = new DodoPayments({
  logLevel: 'debug', // Show all log messages
});
# Via environment variable
export DODO_PAYMENTS_LOG=debug
Tingkat log yang tersedia:
  • 'debug' - Tampilkan pesan debug, info, peringatan, dan kesalahan
  • 'info' - Tampilkan pesan info, peringatan, dan kesalahan
  • 'warn' - Tampilkan peringatan dan kesalahan (default)
  • 'error' - Tampilkan hanya kesalahan
  • 'off' - Nonaktifkan semua logging
Pada tingkat debug, semua permintaan dan respons HTTP dicatat, termasuk header dan tubuh. Beberapa header otentikasi disunting, tetapi data sensitif dalam tubuh mungkin masih terlihat.

Migrasi dari SDK Node.js

Jika Anda meningkatkan dari SDK Node.js lama, SDK TypeScript menawarkan keamanan tipe dan fitur yang lebih baik:

Lihat Panduan Migrasi

Pelajari cara bermigrasi dari SDK Node.js ke SDK TypeScript

Sumber Daya

Dukungan

Butuh bantuan dengan SDK TypeScript?

Kontribusi

Kami menyambut kontribusi! Periksa pedoman kontribusi untuk memulai.