context.Context를 인수로 받고, 요청 매개변수는 0 값을 생략된 필드와 구분하는 Field 래퍼를 사용하며, 모든 요청에 middleware를 추가할 수 있습니다.
설치
프로젝트에 모듈을 추가합니다:SDK를 사용하려면 Go 1.22 이상이 필요합니다.
빠른 시작
클라이언트를 생성한 다음 checkout session을 생성합니다:option.WithBearerToken를 생략하면 NewClient가 DODO_PAYMENTS_API_KEY 환경 변수를 읽습니다. option.WithEnvironmentTestMode()를 생략하면 클라이언트는 live mode에 연결됩니다. test mode API key는 test mode에서만 사용할 수 있습니다.
핵심 기능
Context Support
모든 메서드는 취소 및 timeout을 위한
context.Context를 인수로 받습니다.Strong Typing
컴파일 시 검사를 지원하는 타입이 지정된 요청 매개변수 및 응답 struct를 제공합니다.
Middleware
로깅, 메트릭 및 사용자 지정 로직을 위해
option.WithMiddleware를 사용하여 middleware를 추가합니다.Goroutine Safe
여러 goroutine에서 하나의 클라이언트를 공유합니다.
구성
NewClient는 환경 변수에서 DODO_PAYMENTS_API_KEY, DODO_PAYMENTS_WEBHOOK_KEY(웹훅 서명 secret), DODO_PAYMENTS_BASE_URL를 읽습니다. option.WithBearerToken, option.WithWebhookKey, option.WithBaseURL와 같이 전달하는 옵션은 해당 값을 재정의합니다.
웹훅을 확인하려면 원시 요청 본문과 headers를 client.Webhooks.Unwrap(rawBody, r.Header)에 전달합니다. 이 메서드는 웹훅 key로 signature를 확인하고 파싱된 event를 반환합니다. client.Webhooks.UnsafeUnwrap(rawBody)는 확인 없이 본문을 파싱하므로 테스트에만 사용하세요. Webhooks를 참조하세요.
이 페이지의 예제에서는 빠른 시작의 client를 사용합니다.
Context 및 Timeout
요청은 기본적으로 timeout되지 않습니다. context deadline은 재시도를 포함한 전체 호출을 제한합니다. 각 시도를 제한하려면option.WithRequestTimeout()를 추가합니다:
Retry 구성
SDK는 connection error와 상태 코드가 408, 409, 429 또는 500 이상인 response를 재시도합니다. 기본적으로 exponential backoff를 사용하여 두 번 재시도합니다. 클라이언트 또는 단일 요청에option.WithMaxRetries를 설정합니다:
일반적인 작업
이 섹션의 예제에서도 context를 사용합니다. 예를 들어ctx := context.Background()입니다.
Checkout Session 생성
checkout session을 생성한 다음 반환된CheckoutURL로 고객을 redirect합니다:
고객 관리
email 주소와 이름으로 고객을 생성한 다음 ID로 조회합니다. Metadata 값은shared package의 union type을 사용합니다:
Subscription 처리
subscription을 생성하고, on-demand subscription에 요금을 청구하며, subscription의 usage history를 읽습니다.Billing에는 두 글자로 된 ISO 국가 코드인 Country만 필요합니다. Customer는 CustomerRequestUnionParam입니다. 기존 고객에는 AttachExistingCustomerParam{CustomerID: ...}를 전달하고, 새 고객을 생성하려면 NewCustomerParam{Email: ..., Name: ...}를 전달합니다. Charge는 on-demand subscriptions에 사용되며, ProductPrice는 통화의 최소 단위로 표시됩니다. GetUsageHistory는 결과의 한 페이지를 반환하고, GetUsageHistoryAutoPaging는 모든 페이지를 순회합니다.사용량 기반 Billing
Usage Event 수집
고객의 usage event를 전송합니다:EventID는 idempotency key이므로 각 event에 고유한 값을 지정하세요. 동일한 EventID가 하나의 요청에 두 번 나타나면 요청 전체가 거부됩니다. EventID가 이미 수집된 경우 새 event는 무시됩니다. 하나의 요청에는 최대 1,000개의 event를 포함할 수 있습니다. Timestamp는 현재 시간으로 기본 설정되며, 1시간보다 이전이거나 5분보다 이후인 경우 거부됩니다.Usage Event 목록 조회
고객 및 event name으로 필터링한 event를 나열합니다:List는 한 페이지를 반환합니다. 모든 페이지를 순회하려면 client.UsageEvents.ListAutoPaging(ctx, params)를 호출하고 iter.Next(), iter.Current(), iter.Err()를 사용하여 loop를 실행합니다. 다른 list 메서드에도 동일한 AutoPaging variant가 있으며, 각 페이지에는 GetNextPage() 메서드가 있습니다.
Error 처리
API가 성공하지 않은 status code를 반환하면 SDK는*dodopayments.Error type의 error를 반환합니다. 여기에는 StatusCode, *http.Request, *http.Response 및 error body의 JSON이 포함됩니다. errors.As를 사용하여 이를 확인하고, 특정 사례를 처리하려면 StatusCode를 기준으로 분기합니다:
*net.OpError를 래핑하는 *url.Error를 받을 수 있습니다. apiErr.DumpRequest(true)는 직렬화된 요청을 반환합니다.
Middleware
option.WithMiddleware를 사용하여 middleware를 추가합니다. middleware는 각 요청과 해당 요청을 전송하는 next 함수를 받습니다:
option.WithMiddleware 호출에 전달된 여러 middleware는 왼쪽에서 오른쪽 순서로 실행됩니다. NewClient에 전달된 middleware는 단일 요청에 전달된 middleware보다 먼저 실행됩니다.
동시성
클라이언트는 동시 사용에 안전하므로 여러 goroutine에서 하나의 클라이언트를 공유할 수 있습니다:리소스
GitHub Repository
소스 코드, release 및 전체 메서드 목록입니다.
API Reference
모든 endpoint, 매개변수 및 response입니다.
Discord Community
질문하고 다른 개발자와 소통하세요.
Report Issues
bug를 보고하거나 feature를 요청하세요.
Support
Go SDK에 대한 도움이 필요하면 다음을 이용하세요:- Discord: 실시간 도움을 받으려면 community server에 참여하세요.
- Email: support@dodopayments.com으로 문의하세요.
- GitHub: repository에 issue를 등록하세요.