context.Context, Request-Parameter verwenden einen Field-Wrapper, der Nullwerte von ausgelassenen Feldern unterscheidet, und du kannst jeder Anfrage Middleware hinzufügen.
Installation
Füge das Modul zu deinem Projekt hinzu:Das SDK erfordert Go 1.22 oder höher.
Schnellstart
Erstelle einen Client und anschließend eine Checkout-Sitzung:option.WithBearerToken auslässt, liest NewClient die Umgebungsvariable DODO_PAYMENTS_API_KEY. Wenn du option.WithEnvironmentTestMode() auslässt, verbindet sich der Client mit dem Live-Modus. Ein API-Key für den Testmodus funktioniert nur im Testmodus.
Kernfunktionen
Context Support
Jede Methode akzeptiert ein
context.Context für Abbrüche und Timeouts.Strong Typing
Typisierte Request-Parameter und Response-Strukturen für Prüfungen zur Compile-Zeit.
Middleware
Füge mit
option.WithMiddleware Middleware für Logging, Metriken und eigene Logik hinzu.Goroutine Safe
Verwende einen Client gemeinsam in mehreren Goroutinen.
Konfiguration
NewClient liest DODO_PAYMENTS_API_KEY, DODO_PAYMENTS_WEBHOOK_KEY (dein Webhook-Signaturgeheimnis) und DODO_PAYMENTS_BASE_URL aus der Umgebung. Übergebene Optionen wie option.WithBearerToken, option.WithWebhookKey und option.WithBaseURL überschreiben diese Werte.
Um einen Webhook zu verifizieren, übergib den unbearbeiteten Request-Body und die Header an client.Webhooks.Unwrap(rawBody, r.Header). Die Methode prüft die Signatur mit deinem Webhook-Key und gibt das geparste Ereignis zurück. client.Webhooks.UnsafeUnwrap(rawBody) parst den Body ohne ihn zu verifizieren; verwende die Methode daher nur für Tests. Siehe Webhooks.
Die Beispiele auf dieser Seite verwenden den client aus Quick Start.
Contexts und Timeouts
Anfragen laufen standardmäßig nicht ab. Eine Context-Frist begrenzt den gesamten Aufruf einschließlich Retries. Um jeden einzelnen Versuch zu begrenzen, fügeoption.WithRequestTimeout() hinzu:
Retry-Konfiguration
Das SDK wiederholt Verbindungsfehler und Antworten mit dem Status 408, 409, 429 oder 500 und höher. Standardmäßig wird ein Vorgang zweimal mit exponentiellem Backoff wiederholt. Setzeoption.WithMaxRetries am Client oder bei einer einzelnen Anfrage:
Häufige Vorgänge
Die Beispiele in diesem Abschnitt verwenden ebenfalls einen Context, zum Beispielctx := context.Background().
Checkout-Sitzung erstellen
Erstelle eine Checkout-Sitzung und leite den Kunden anschließend an die zurückgegebeneCheckoutURL weiter:
Kunden verwalten
Erstelle einen Kunden mit E-Mail-Adresse und Namen und rufe ihn anschließend über seine ID ab. Metadatenwerte verwenden die Union Types aus dem Paketshared:
Abonnements verwalten
Erstelle ein Abonnement, belaste ein On-Demand-Abonnement und lies den Nutzungsverlauf eines Abonnements aus.Billing erfordert nur Country, einen zweistelligen ISO-Ländercode. Customer ist ein CustomerRequestUnionParam: Übergebe AttachExistingCustomerParam{CustomerID: ...} für einen bestehenden Kunden oder NewCustomerParam{Email: ..., Name: ...}, um einen neuen Kunden zu erstellen. Charge ist für On-Demand-Abonnements vorgesehen, und ProductPrice wird in der kleinsten Währungseinheit angegeben. GetUsageHistory gibt eine Ergebnisseite zurück; GetUsageHistoryAutoPaging durchläuft alle Seiten.Nutzungsbasierte Abrechnung
Nutzungsereignisse erfassen
Sende Nutzungsereignisse für einen Kunden:EventID ist der Idempotency-Key. Vergib daher für jedes Ereignis einen eindeutigen Wert. Wenn derselbe EventID zweimal in einer Anfrage vorkommt, wird die gesamte Anfrage abgelehnt. Wenn ein EventID bereits erfasst wurde, wird das neue Ereignis ignoriert. Eine Anfrage akzeptiert bis zu 1.000 Ereignisse. Timestamp wird standardmäßig auf die aktuelle Zeit gesetzt und abgelehnt, wenn der Wert mehr als 1 Stunde in der Vergangenheit oder mehr als 5 Minuten in der Zukunft liegt.Nutzungsereignisse auflisten
Liste Ereignisse, gefiltert nach Kunde und Ereignisname:List gibt eine Seite zurück. Um alle Seiten zu durchlaufen, rufe client.UsageEvents.ListAutoPaging(ctx, params) auf und iteriere mit iter.Next(), iter.Current() und iter.Err(). Andere List-Methoden verfügen über dieselbe AutoPaging-Variante, und jede Seite hat eine GetNextPage()-Methode.
Fehlerbehandlung
Wenn die API einen nicht erfolgreichen Statuscode zurückgibt, liefert das SDK einen Fehler vom Typ*dodopayments.Error zurück. Er enthält StatusCode, *http.Request und *http.Response sowie das JSON des Fehler-Bodys. Verwende errors.As zur Prüfung und verzweige anhand von StatusCode, um bestimmte Fälle zu behandeln:
*url.Error, der einen *net.OpError umschließt. apiErr.DumpRequest(true) gibt den serialisierten Request zurück.
Middleware
Füge mitoption.WithMiddleware Middleware hinzu. Eine Middleware empfängt jede Anfrage sowie eine next-Funktion, die sie sendet:
option.WithMiddleware werden von links nach rechts ausgeführt. Middleware, die an NewClient übergeben wird, läuft vor Middleware, die an eine einzelne Anfrage übergeben wird.
Nebenläufigkeit
Der Client kann sicher nebenläufig verwendet werden, sodass du einen Client in mehreren Goroutinen gemeinsam nutzen kannst:Ressourcen
GitHub Repository
Quellcode, Releases und die vollständige Methodenliste.
API Reference
Jeder Endpunkt, Parameter und jede Antwort.
Discord Community
Stelle Fragen und tausche dich mit anderen Entwicklern aus.
Report Issues
Melde Fehler oder schlage neue Funktionen vor.
Support
Hilfe zum Go SDK:- Discord: Tritt dem Community-Server bei, um in Echtzeit Hilfe zu erhalten.
- E-Mail: Kontaktiere support@dodopayments.com.
- GitHub: Erstelle ein Issue im Repository.