मुख्य सामग्री पर जाएं

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 आपके अनुप्रयोगों में Dodo Payments को एकीकृत करने के लिए एक साफ और आदर्श Go इंटरफेस प्रदान करता है। यह संदर्भ समर्थन, मजबूत प्रकार की प्रतिक्रियाएँ, मध्यवर्ती क्षमताएँ प्रदान करता है, और समवर्ती उपयोग के लिए सुरक्षित है।

स्थापना

SDK को Go मॉड्यूल का उपयोग करके स्थापित करें:
go get github.com/dodopayments/dodopayments-go
या किसी विशेष संस्करण पर पिन करने के लिए:
go get -u 'github.com/dodopayments/dodopayments-go@v1.97.3'
SDK को बेहतर प्रदर्शन के लिए आधुनिक Go सुविधाओं का उपयोग करते हुए Go 1.22 या उसके बाद के संस्करणों की आवश्यकता होती है।

त्वरित प्रारंभ

क्लाइंट को प्रारंभ करें और अपना पहला चेकआउट सत्र बनाएं:
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)
}
अपने API कुंजियों को हमेशा पर्यावरण चर का उपयोग करके सुरक्षित रूप से स्टोर करें। इन्हें कभी भी अपने स्रोत कोड में हार्डकोड न करें।

मुख्य विशेषताएँ

Context Support

रद्दीकरण और समय-सीमाओं के लिए context.Context का पूर्ण समर्थन

Strong Typing

संकलन-समय सुरक्षा के लिए दृढ़ रूप से टाइप किए गए अनुरोध और प्रतिक्रियाएँ

Middleware

लॉगिंग, मीट्रिक और कस्टम लॉजिक के लिए विस्तार योग्य मिडलवेयर समर्थन

Goroutine Safe

सम्मिलित (Concurrent) संचालन के लिए डिज़ाइन किया गया थ्रेड-सुरक्षित क्लाइंट

कॉन्फ़िगरेशन

संदर्भ और समय सीमा

समय सीमा और रद्दीकरण के लिए Go के संदर्भ का लाभ उठाएं:
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)
	}
}

पुनः प्रयास कॉन्फ़िगरेशन

स्वचालित पुनः प्रयास व्यवहार को कॉन्फ़िगर करें:
// 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),
)

सामान्य संचालन

चेकआउट सत्र बनाएं

एक चेकआउट सत्र उत्पन्न करें:
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)

ग्राहकों का प्रबंधन करें

ग्राहक जानकारी बनाएं और पुनः प्राप्त करें:
// 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)

सदस्यताओं को संभालें

आवर्ती सदस्यताओं को बनाएं और प्रबंधित करें:
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 को कम से कम दो-अक्षरों वाला ISO Country कोड चाहिए। Customer एक CustomerRequestUnionParam है — एक मौजूदा ग्राहक के लिए AttachExistingCustomerParam{CustomerID: ...} पास करें या एक नए के लिए NewCustomerParam{Email: ..., Name: ...}ProductPrice सबसे कम मुद्रा मूल्यवर्ग में है।

उपयोग-आधारित बिलिंग

उपयोग इवेंट्स इन्गेस्ट करें

कस्टम इवेंट्स को ट्रैक करें:
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)
}

उपयोग इवेंट्स सूचीबद्ध करें

// 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)
}

त्रुटि हैंडलिंग

विशिष्ट त्रुटि प्रकारों को संभालें:
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)
	}
}

मिडलवेयर

लॉगिंग या मेट्रिक्स के लिए कस्टम मिडलवेयर जोड़ें:
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),
)

सहकालिता

क्लाइंट सहकारी उपयोग के लिए सुरक्षित है:
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()
}

संसाधन

GitHub Repository

स्रोत कोड देखें और योगदान करें

API Reference

पूर्ण एपीआई प्रलेखन

Discord Community

सहायता प्राप्त करें और डेवलपर्स से कनेक्ट करें

Report Issues

बग रिपोर्ट करें या सुविधाओं का अनुरोध करें

समर्थन

Go SDK के लिए सहायता चाहिए?

योगदान

हम योगदान का स्वागत करते हैं! शुरू करने के लिए योगदान दिशानिर्देश देखें।
Last modified on May 14, 2026