context.Context, request-parametrar använder en Field-wrapper som skiljer nollvärden från utelämnade fält, och du kan lägga till middleware i varje request.
Installation
Lägg till modulen i ditt projekt:SDK:t kräver Go 1.22 eller senare.
Snabbstart
Skapa en klient och skapa sedan en checkout-session:option.WithBearerToken läser NewClient miljövariabeln DODO_PAYMENTS_API_KEY. Om du utelämnar option.WithEnvironmentTestMode() ansluter klienten till live mode. En API-nyckel för testläge fungerar endast i testläge.
Kärnfunktioner
Context Support
Varje metod tar en
context.Context för avbrytning och timeouts.Strong Typing
Typade request-parametrar och response-strukturer för kontroller vid kompilering.
Middleware
Lägg till middleware med
option.WithMiddleware för loggning, mätvärden och anpassad logik.Goroutine Safe
Dela en klient mellan goroutines.
Konfiguration
NewClient läser DODO_PAYMENTS_API_KEY, DODO_PAYMENTS_WEBHOOK_KEY (din webhook signing secret) och DODO_PAYMENTS_BASE_URL från miljön. Alternativ som du skickar in, till exempel option.WithBearerToken, option.WithWebhookKey och option.WithBaseURL, åsidosätter dem.
Om du vill verifiera en webhook skickar du requestens råa body och headers till client.Webhooks.Unwrap(rawBody, r.Header). Den kontrollerar signaturen med din webhook-nyckel och returnerar den tolkade händelsen. client.Webhooks.UnsafeUnwrap(rawBody) tolkar bodyn utan att verifiera den, så använd den endast för testning. Se Webhooks.
Exemplen på den här sidan använder client från Snabbstart.
Context och timeouts
Requests får ingen timeout som standard. En context-deadline begränsar hela anropet, inklusive retries. Om du vill begränsa varje försök lägger du tilloption.WithRequestTimeout():
Retry-konfiguration
SDK:t försöker igen vid anslutningsfel och svar med status 408, 409, 429 eller 500 och högre. Som standard görs två nya försök, med exponentiell backoff. Angeoption.WithMaxRetries på klienten eller för en enskild request:
Vanliga operationer
Exemplen i det här avsnittet använder också en context, till exempelctx := context.Background().
Skapa en checkout-session
Skapa en checkout-session och omdirigera sedan kunden till den returneradeCheckoutURL:
Hantera kunder
Skapa en kund med en e-postadress och ett namn och hämta den sedan med ID. Metadata-värden använder unionstyperna från paketetshared:
Hantera prenumerationer
Skapa en prenumeration, debitera en on-demand-prenumeration och läs en prenumerations användningshistorik.Billing kräver endast Country, en tvåbokstavskod för ISO-land. Customer är en CustomerRequestUnionParam: skicka AttachExistingCustomerParam{CustomerID: ...} för en befintlig kund eller NewCustomerParam{Email: ..., Name: ...} för att skapa en. Charge används för on-demand-prenumerationer, och ProductPrice anges i den minsta valutaenheten. GetUsageHistory returnerar en resultatsida; GetUsageHistoryAutoPaging itererar över alla sidor.Förbrukningsbaserad fakturering
Ta emot användningshändelser
Skicka användningshändelser för en kund:EventID är idempotency key, så ge varje händelse ett unikt värde. Om samma EventID förekommer två gånger i en request avvisas hela requesten. Om en EventID redan har tagits emot ignoreras den nya händelsen. En request accepterar upp till 1 000 händelser. Timestamp använder aktuell tid som standard och avvisas om den ligger mer än 1 timme bakåt eller mer än 5 minuter framåt i tiden.Lista användningshändelser
Lista händelser filtrerade efter kund och händelsenamn:List returnerar en sida. Om du vill iterera över alla sidor anropar du client.UsageEvents.ListAutoPaging(ctx, params) och loopar med iter.Next(), iter.Current() och iter.Err(). Andra listmetoder har samma AutoPaging-variant, och varje sida har en GetNextPage()-metod.
Felhantering
När API:et returnerar en statuskod som inte anger framgång returnerar SDK:t ett fel av typen*dodopayments.Error. Det innehåller StatusCode, *http.Request och *http.Response samt JSON från felbodyn. Använd errors.As för att granska det och gör en förgrening på StatusCode för att hantera specifika fall:
*url.Error som omsluter en *net.OpError. apiErr.DumpRequest(true) returnerar den serialiserade requesten.
Middleware
Lägg till middleware medoption.WithMiddleware. En middleware tar emot varje request och en next-funktion som skickar den vidare:
option.WithMiddleware körs från vänster till höger. Middleware som skickas till NewClient körs före middleware som skickas till en enskild request.
Samtidighet
Klienten är säker att använda samtidigt, så du kan dela en klient mellan goroutines:Resurser
GitHub Repository
Källkod, releaser och den fullständiga metodlistan.
API Reference
Alla endpoints, parametrar och svar.
Discord Community
Ställ frågor och prata med andra utvecklare.
Report Issues
Rapportera buggar eller föreslå funktioner.
Support
Om du behöver hjälp med Go SDK:- Discord: Gå med i community-servern för hjälp i realtid.
- E-post: Kontakta support@dodopayments.com.
- GitHub: Skapa ett ärende i kodförvaret.