Documentation Index Fetch the complete documentation index at: https://docs.dodopayments.com/llms.txt
Use this file to discover all available pages before exploring further.
Go SDK tillhandahåller ett rent och idiomatiskt Go-gränssnitt för att integrera Dodo Payments i dina applikationer. Det erbjuder kontextstöd, starkt typade svar, middleware-funktioner och är säkert för samtidig användning.
Installation
Installera SDK:n med Go-moduler:
go get github.com/dodopayments/dodopayments-go
Eller för att fästa vid en specifik version:
go get -u 'github.com/dodopayments/dodopayments-go@v1.97.3'
SDK:n kräver Go 1.22 eller senare versioner och utnyttjar moderna Go-funktioner för optimal prestanda.
Snabbstart
Initiera klienten och skapa din första checkout-session:
package main
import (
" context "
" fmt "
" log "
" github.com/dodopayments/dodopayments-go "
" github.com/dodopayments/dodopayments-go/option "
)
func main () {
client := dodopayments . NewClient (
option . WithBearerToken ( "My Bearer Token" ), // defaults to os.LookupEnv("DODO_PAYMENTS_API_KEY")
option . WithEnvironmentTestMode (), // defaults to option.WithEnvironmentLiveMode()
)
checkoutSessionResponse , err := client . CheckoutSessions . New ( context . TODO (), dodopayments . CheckoutSessionNewParams {
CheckoutSessionRequest : dodopayments . CheckoutSessionRequestParam {
ProductCart : dodopayments . F ([] dodopayments . ProductItemReqParam {{
ProductID : dodopayments . F ( "product_id" ),
Quantity : dodopayments . F ( int64 ( 1 )),
}}),
},
})
if err != nil {
panic ( err . Error ())
}
fmt . Printf ( "Session ID: %s \n " , checkoutSessionResponse . SessionID )
}
Spara alltid dina API-nycklar säkert med hjälp av miljövariabler. Låt dem aldrig vara hårdkodade i källkoden.
Kärnfunktioner
Context Support Fullt stöd för context.Context för avbokning och timeout
Strong Typing Starkt typade förfrågningar och svar för kompileringstidssäkerhet
Middleware Utbyggbart middleware-stöd för loggning, mätvärden och egen logik
Goroutine Safe Trådsäker klient utformad för samtidiga operationer
Konfiguration
Kontext och tidsgränser
Utnyttja Gos kontext för tidsgränser och avbrytande:
import (
" context "
" time "
" github.com/dodopayments/dodopayments-go "
" github.com/dodopayments/dodopayments-go/option "
)
// Create a context with timeout
ctx , cancel := context . WithTimeout ( context . Background (), 10 * time . Second )
defer cancel ()
payment , err := client . Payments . Create ( ctx , dodopayments . PaymentCreateParams {
Amount : 5000 ,
Currency : "USD" ,
CustomerID : "cus_123" ,
})
if err != nil {
if ctx . Err () == context . DeadlineExceeded {
log . Println ( "Request timed out" )
} else {
log . Fatal ( err )
}
}
Återförsökskonfiguration
Konfigurera automatisk återförsöksbeteende:
// Configure default for all requests (default is 2)
client := dodopayments . NewClient (
option . WithMaxRetries ( 0 ), // disable retries
)
// Override per-request
client . CheckoutSessions . New (
context . TODO (),
dodopayments . CheckoutSessionNewParams {
CheckoutSessionRequest : dodopayments . CheckoutSessionRequestParam {
ProductCart : dodopayments . F ([] dodopayments . ProductItemReqParam {{
ProductID : dodopayments . F ( "product_id" ),
Quantity : dodopayments . F ( int64 ( 0 )),
}}),
},
},
option . WithMaxRetries ( 5 ),
)
Vanliga operationer
Skapa en checkout-session
Generera en checkout-session:
session , err := client . CheckoutSessions . New ( ctx , dodopayments . CheckoutSessionNewParams {
CheckoutSessionRequest : dodopayments . CheckoutSessionRequestParam {
ProductCart : dodopayments . F ([] dodopayments . ProductItemReqParam {{
ProductID : dodopayments . F ( "prod_123" ),
Quantity : dodopayments . F ( int64 ( 1 )),
}}),
ReturnURL : dodopayments . F ( "https://yourdomain.com/return" ),
},
})
if err != nil {
log . Fatal ( err )
}
fmt . Printf ( "Checkout URL: %s \n " , session . CheckoutURL )
Hantera kunder
Skapa och hämta kundinformation:
// Create a customer
customer , err := client . Customers . New ( ctx , dodopayments . CustomerNewParams {
Email : dodopayments . F ( "customer@example.com" ),
Name : dodopayments . F ( "John Doe" ),
Metadata : dodopayments . F ( map [ string ] string {
"user_id" : "12345" ,
}),
})
if err != nil {
log . Fatal ( err )
}
// Retrieve customer
customer , err = client . Customers . Get ( ctx , "cus_123" )
if err != nil {
log . Fatal ( err )
}
fmt . Printf ( "Customer: %s ( %s ) \n " , customer . Name , customer . Email )
Hantera prenumerationer
Skapa och hantera återkommande prenumerationer:
import " time "
// Create a subscription
subscription , err := client . Subscriptions . New ( ctx , dodopayments . SubscriptionNewParams {
Billing : dodopayments . F ( dodopayments . BillingAddressParam {
Country : dodopayments . F ( dodopayments . CountryCodeUs ),
City : dodopayments . F ( "San Francisco" ),
State : dodopayments . F ( "CA" ),
Street : dodopayments . F ( "1 Market St" ),
Zipcode : dodopayments . F ( "94105" ),
}),
Customer : dodopayments . F [ dodopayments . CustomerRequestUnionParam ](
dodopayments . AttachExistingCustomerParam {
CustomerID : dodopayments . F ( "cus_123" ),
},
),
ProductID : dodopayments . F ( "pdt_456" ),
Quantity : dodopayments . F ( int64 ( 1 )),
})
if err != nil {
log . Fatal ( err )
}
// Charge an on-demand subscription
// ProductPrice is in the lowest currency denomination (e.g., 2500 = $25.00 USD)
chargeResponse , err := client . Subscriptions . Charge ( ctx , subscription . SubscriptionID ,
dodopayments . SubscriptionChargeParams {
ProductPrice : dodopayments . F ( int64 ( 2500 )),
},
)
if err != nil {
log . Fatal ( err )
}
// Get usage history (for metered subscriptions)
usageHistory , err := client . Subscriptions . GetUsageHistory (
ctx ,
subscription . SubscriptionID ,
dodopayments . SubscriptionGetUsageHistoryParams {
StartDate : dodopayments . F ( time . Date ( 2024 , 1 , 1 , 0 , 0 , 0 , 0 , time . UTC )),
EndDate : dodopayments . F ( time . Date ( 2024 , 3 , 31 , 23 , 59 , 59 , 0 , time . UTC )),
},
)
if err != nil {
log . Fatal ( err )
}
Billing kräver minst den tvåbokstavskod för ISO Country. Customer är en CustomerRequestUnionParam — skicka AttachExistingCustomerParam{CustomerID: ...} för en befintlig kund eller NewCustomerParam{Email: ..., Name: ...} för en ny. ProductPrice är i den lägsta valören för valutan.
Användningsbaserad Debitering
Ingång för Användningshändelser
Spåra anpassade händelser:
import " github.com/dodopayments/dodopayments-go "
response , err := client . UsageEvents . Ingest ( ctx , dodopayments . UsageEventIngestParams {
Events : dodopayments . F ([] dodopayments . UsageEventIngestParamsEvent {{
EventID : dodopayments . F ( "api_call_12345" ),
CustomerID : dodopayments . F ( "cus_abc123" ),
EventName : dodopayments . F ( "api_request" ),
Timestamp : dodopayments . F ( "2024-01-15T10:30:00Z" ),
Metadata : dodopayments . F ( map [ string ] string {
"endpoint" : "/api/v1/users" ,
"method" : "GET" ,
"tokens_used" : "150" ,
}),
}}),
})
if err != nil {
log . Fatal ( err )
}
Lista Användningshändelser
// List events with filters
params := dodopayments . UsageEventListParams {
CustomerID : dodopayments . F ( "cus_abc123" ),
EventName : dodopayments . F ( "api_request" ),
}
events , err := client . UsageEvents . List ( ctx , params )
if err != nil {
log . Fatal ( err )
}
for _ , event := range events . Data {
fmt . Printf ( "Event %s : %s at %s \n " , event . EventID , event . EventName , event . Timestamp )
}
Felhantering
Hantering av specifika feltyper:
payment , err := client . Payments . Create ( ctx , dodopayments . PaymentCreateParams {
Amount : 5000 ,
Currency : "USD" ,
})
if err != nil {
if apiErr , ok := err .( * dodopayments . APIError ); ok {
fmt . Printf ( "API Error: %s \n " , apiErr . Message )
fmt . Printf ( "Status Code: %d \n " , apiErr . StatusCode )
fmt . Printf ( "Request ID: %s \n " , apiErr . RequestID )
// Handle specific error types
switch apiErr . Type {
case dodopayments . ErrorTypeAuthentication :
log . Println ( "Authentication failed" )
case dodopayments . ErrorTypeInvalidRequest :
log . Println ( "Invalid request parameters" )
case dodopayments . ErrorTypeRateLimit :
log . Println ( "Rate limit exceeded" )
default :
log . Printf ( "API error: %s \n " , apiErr . Message )
}
} else {
log . Fatal ( err )
}
}
Middleware
Lägg till anpassad middleware för loggning eller mätvärden:
func Logger ( req * http . Request , next option . MiddlewareNext ) ( res * http . Response , err error ) {
// Before the request
start := time . Now ()
log . Printf ( "Request: %s %s \n " , req . Method , req . URL )
// Forward the request to the next handler
res , err = next ( req )
// After the request
end := time . Now ()
log . Printf ( "Response: %d in %v \n " , res . StatusCode , end . Sub ( start ))
return res , err
}
client := dodopayments . NewClient (
option . WithMiddleware ( Logger ),
)
Konkurrens
Klienten är säker att använda samtidigt:
package main
import (
" context "
" sync "
" log "
" github.com/dodopayments/dodopayments-go "
)
func main () {
client := dodopayments . NewClient ()
var wg sync . WaitGroup
for i := 0 ; i < 10 ; i ++ {
wg . Add ( 1 )
go func ( idx int ) {
defer wg . Done ()
payment , err := client . Payments . Create ( context . Background (), dodopayments . PaymentCreateParams {
Amount : 1000 ,
Currency : "USD" ,
CustomerID : "cus_123" ,
})
if err != nil {
log . Printf ( "Failed to create payment %d : %v " , idx , err )
return
}
log . Printf ( "Created payment %d : %s " , idx , payment . ID )
}( i )
}
wg . Wait ()
}
Resurser
GitHub Repository Visa källkod och bidra
API Reference Komplett API-dokumentation
Discord Community Få hjälp och anslut med utvecklare
Report Issues Rapportera buggar eller be om funktioner
Support
Behöver du hjälp med Go SDK?
Att bidra
Vi välkomnar bidrag! Kolla riktlinjer för bidra för att komma igång.