Zum Hauptinhalt springen
Das TypeScript SDK bietet bequemen serverseitigen Zugriff auf die Dodo Payments REST API für TypeScript- und JavaScript-Anwendungen. Es verfügt über umfassende Typdefinitionen, Fehlerbehandlung, Wiederholungen, Zeitüberschreitungen und automatische Seitenumbruch für nahtlose Zahlungsabwicklung.

Installation

Installieren Sie das SDK mit dem Paketmanager Ihrer Wahl:
npm install dodopayments

Schnellstart

Initialisieren Sie den Client mit Ihrem API-Schlüssel und beginnen Sie mit der Zahlungsabwicklung:
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);
Speichern Sie Ihre API-Schlüssel stets sicher über Umgebungsvariablen. Kommittieren Sie sie niemals in die Versionsverwaltung und setzen Sie sie nicht in clientseitigem Code ein.

Kernfunktionen

TypeScript First

Vollständige TypeScript-Unterstützung mit umfassenden Typdefinitionen für alle API-Endpunkte

Auto-Pagination

Automatische Paginierung für Listenantworten erleichtert die Arbeit mit großen Datensätzen

Error Handling

Eingebaute Fehlertypen mit detaillierten Meldungen für verschiedene Fehlerfälle

Smart Retries

Konfigurierbare automatische Wiederholungen mit exponentiellem Backoff für temporäre Fehler

Konfiguration

Umgebungsvariablen

Setzen Sie Umgebungsvariablen für eine sichere Konfiguration:
.env
DODO_PAYMENTS_API_KEY=your_api_key_here

Zeitüberschreitungs-Konfiguration

Konfigurieren Sie Zeitüberschreitungen für Anfragen global oder pro Anfrage:
// 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: 1 }] },
  { timeout: 5 * 1000 },
);

Wiederholungs-Konfiguration

Konfigurieren Sie das Verhalten automatischer Wiederholungen:
// 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: 1 }] },
  { maxRetries: 5 },
);
Das SDK wiederholt automatisch Anfragen, die aufgrund von Netzwerkfehlern oder Serverproblemen (5xx-Antworten) fehlschlagen, mit exponentiellem Backoff.

Häufige Operationen

Erstellen einer Checkout-Sitzung

Generieren Sie eine Checkout-Sitzung zur Erfassung von Zahlungsinformationen:
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);

Kunden verwalten

Erstellen und Abrufen von Kundeninformationen:
// Create a customer
const customer = await client.customers.create({
  email: 'customer@example.com',
  name: 'John Doe',
  metadata: {
    user_id: '12345'
  }
});

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

Abonnements verwalten

Erstellen und verwalten Sie wiederkehrende Abonnements:
// 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'
});

Nutzungsbasierte Abrechnung

Nutzungsereignisse erfassen

Verfolgen Sie benutzerdefinierte Ereignisse für die nutzungsbasierte Abrechnung:
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'
      }
    }
  ]
});
Ereignisse müssen eindeutige event_id-Werte zur Wahrung der Idempotenz besitzen. Doppelte IDs innerhalb derselben Anfrage werden abgelehnt, und nachfolgende Anfragen mit bereits vorhandenen IDs werden ignoriert.

Nutzungsereignisse abrufen

Abrufen detaillierter Informationen über Nutzungsereignisse:
// 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'
});

Proxy-Konfiguration

Konfigurieren Sie Proxy-Einstellungen für verschiedene Laufzeiten:

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

Protokollierung

Steuern Sie die Protokollierungsstärke mit Umgebungsvariablen oder Client-Optionen:
// Via client option
const client = new DodoPayments({
  logLevel: 'debug', // Show all log messages
});
# Via environment variable
export DODO_PAYMENTS_LOG=debug
Verfügbare Protokollierungsebenen:
  • 'debug' - Zeigt Debug-Meldungen, Informationen, Warnungen und Fehler an
  • 'info' - Zeigt Informationsmeldungen, Warnungen und Fehler
  • 'warn' - Zeigt Warnungen und Fehler (Standard)
  • 'error' - Zeigt nur Fehler an
  • 'off' - Deaktiviert die gesamte Protokollierung
Auf der Debug-Ebene werden alle HTTP-Anfragen und -Antworten protokolliert, einschließlich Headern und Körpern. Einige Authentifizierungsheader werden unkenntlich gemacht, doch sensible Daten in den Körpern können weiterhin sichtbar sein.

Migration vom Node.js SDK

Wenn Sie vom Legacy Node.js SDK upgraden, bietet das TypeScript SDK verbesserte Typsicherheit und Funktionen:

View Migration Guide

Erfahren Sie, wie Sie vom Node.js-SDK zum TypeScript-SDK migrieren

Automatische Seitenumbruch

Listmethoden in der DodoPayments-API sind paginiert. Sie können die for await … of-Syntax verwenden, um Elemente über alle Seiten hinweg zu iterieren:
async function fetchAllPayments() {
  const allPayments = [];
  // Automatically fetches more pages as needed.
  for await (const paymentListResponse of client.payments.list()) {
    allPayments.push(paymentListResponse);
  }
  return allPayments;
}
Alternativ können Sie eine einzelne Seite auf einmal anfordern:
let page = await client.payments.list();
for (const paymentListResponse of page.items) {
  console.log(paymentListResponse);
}

// Convenience methods are provided for manually paginating:
while (page.hasNextPage()) {
  page = await page.getNextPage();
  // ...
}

Anforderungen

Die folgenden Laufzeiten werden unterstützt:
  • Webbrowser (aktuelle Versionen von Chrome, Firefox, Safari, Edge und weitere)
  • Node.js 20 LTS oder neuer (non-EOL) Versionen
  • Deno v1.28.0 oder neuer
  • Bun 1.0 oder neuer
  • Cloudflare Workers
  • Vercel Edge Runtime
  • Jest 28 oder höher mit der "node"-Umgebung
  • Nitro v2.6 oder neuer
TypeScript >= 4.9 wird unterstützt.

Ressourcen

Unterstützung

Brauchen Sie Hilfe mit dem TypeScript SDK?

Mitwirken

Wir freuen uns über Beiträge! Überprüfen Sie die Mitwirkungsrichtlinien, um loszulegen.