Skip to main content
@dodopayments/nuxt 모듈은 Nuxt 앱에 세 가지 서버 라우트 핸들러를 제공합니다. checkoutHandler는 checkout URL을 반환하고, customerPortalHandler는 고객을 Customer Portal로 보내며, Webhooks는 webhook 이벤트를 검증하고 코드로 전달합니다.

Checkout API Route

Nuxt server route에서 checkout URL을 생성합니다.

Customer Portal API Route

Nuxt server route에서 고객이 구독 및 세부 정보를 관리할 수 있도록 합니다.

Webhooks API Route

Nuxt에서 Dodo Payments webhook 이벤트를 수신하고 검증합니다.

개요

이 모듈은 핸들러를 Nuxt 서버 auto-import로 등록하므로 서버 라우트에서 import 문 없이 checkoutHandler, customerPortalHandler 및 Webhooks를 호출할 수 있습니다. 각 라우트는 runtimeConfig에서 인증 정보를 읽습니다. Nuxt는 runtimeConfig.public만 브라우저에 노출하므로 API key와 webhook secret은 서버에 유지됩니다.

설치

1

Install the Nuxt Module

프로젝트 루트에서 다음 명령을 실행합니다:
이 모듈은 Nuxt 3(3.13.1 이상)과 zod 3.25 이상을 peer dependency로 지정합니다.
2

Register the Module in nuxt.config.ts

@dodopayments/nuxt를 modules 배열에 추가하고, 인증 정보를 runtimeConfig에 매핑합니다:
nuxt.config.ts
예를 들어 프로젝트 루트의 .env 파일에 다음 환경 변수를 설정합니다:빌드된 Nuxt 서버는 .env 파일을 읽지 않습니다. runtime에 Nuxt는 경로와 일치하는 변수에서만 runtimeConfig 값을 재정의합니다. 예를 들어 private.returnUrl에는 NUXT_PRIVATE_RETURN_URL가 사용됩니다. 따라서 이러한 변수도 hosting 환경에 설정해야 합니다.
.env 파일이나 secret을 version control에 commit하지 마세요.

API Route Handler 예시

예시에서는 server/routes/api/ 디렉터리에 서버 라우트를 생성합니다. Nuxt는 파일 이름과 method suffix에 따라 각 파일을 라우팅하므로 checkout.get.ts는 GET /api/checkout를 처리합니다.
이 핸들러를 사용하여 Nuxt 앱에 Dodo Payments checkout을 추가합니다. GET 라우트는 static checkout을 제공합니다. POST 라우트는 checkout session을 제공하거나 type: "dynamic"를 설정했을 때 dynamic checkout을 제공합니다.
static checkout을 위한 GET 라우트를 생성합니다:
checkout.post.ts는 하나의 POST flow를 제공합니다. dynamic checkout 예시 또는 checkout session 예시 중 하나를 사용합니다:
productId가 없거나 유효하지 않으면 핸들러는 400 response를 반환합니다.
라우트를 테스트하려면 다음 request를 보냅니다:

Checkout Route Handler

checkout handler는 Dodo Payments로 결제를 받는 세 가지 방식을 모두 지원합니다:
  • Static Payment Links: 코드 없이 결제를 수집할 수 있는 공유 가능한 URL입니다.
  • Dynamic Payment Links: 사용자 지정 세부 정보로 생성하는 payment link입니다. deprecated endpoint를 사용합니다.
  • Checkout Sessions: product cart, customer details 및 customization options를 제공하는 hosted checkout입니다. 이 방식을 권장합니다.
checkoutHandler는 다음 option을 사용합니다:

지원되는 Query Parameters

string
필수
Product identifier입니다. 예: ?productId=pdt_nZuwz45WAs64n3l07zpQR.
integer
기본값:"1"
Product의 수량입니다.
string
Customer의 전체 이름입니다. firstName 또는 lastName가 제공되면 무시됩니다.
string
Customer의 이름입니다.
string
Customer의 성입니다.
string
Customer의 email address입니다.
string
Customer의 국가이며 ISO 3166-1 alpha-2 code입니다.
string
Customer의 주소 줄입니다.
string
Customer의 도시입니다.
string
Customer의 주 또는 도입니다.
string
Customer의 ZIP 또는 postal code입니다.
boolean
true로 설정하면 전체 이름 field를 비활성화합니다.
boolean
true로 설정하면 이름 field를 비활성화합니다.
boolean
true로 설정하면 성 field를 비활성화합니다.
boolean
true로 설정하면 email field를 비활성화합니다.
boolean
true로 설정하면 country field를 비활성화합니다.
boolean
true로 설정하면 address line field를 비활성화합니다.
boolean
true로 설정하면 city field를 비활성화합니다.
boolean
true로 설정하면 state field를 비활성화합니다.
boolean
true로 설정하면 ZIP code field를 비활성화합니다.
string
Payment currency입니다. 예: USD.
boolean
기본값:"true"
Currency selector를 표시하거나 숨깁니다.
number
청구 금액을 major currency unit으로 고정합니다. 예를 들어 $12.50에는 12.5를 사용합니다. Pay What You Want product에서만 작동하며 product의 minimum price보다 낮으면 무시됩니다.
boolean
기본값:"true"
Discounts section을 표시하거나 숨깁니다.
string
metadata_로 시작하는 모든 query parameter는 metadata로 전달됩니다.
핸들러는 config의 returnUrl를 redirect_url로 link에 추가합니다.
productId가 없으면 핸들러는 400 response를 반환합니다. 유효하지 않은 query parameter와 존재하지 않는 product ID도 400을 반환합니다.

Response Format

Static checkout은 checkout URL이 포함된 JSON response를 반환합니다. test mode에서는 URL에 test.checkout.dodopayments.com가 사용됩니다.
Dynamic checkout은 deprecated POST /payments 및 POST /subscriptions endpoint를 proxy합니다. 기존 integration에서는 계속 작동하지만, 새로운 integration에는 checkout session을 사용해야 합니다.

Response Format

Dynamic checkout은 checkout URL이 포함된 JSON response를 반환합니다:
Checkout session은 일회성 구매와 subscription을 위한 hosted checkout을 생성하며, customization을 완전히 제어할 수 있습니다. product_cart만 required field입니다. body에 return_url가 없으면 핸들러는 config의 returnUrl를 사용합니다.자세한 내용과 지원되는 모든 field는 Checkout Sessions Integration Guide를 참조하세요.payment_method_id로 생성한 session은 checkout URL을 반환하지 않으므로 핸들러는 400을 반환합니다. 저장된 payment method로 결제하려면 대신 SDK로 session을 생성하세요.

Response Format

Checkout session은 checkout URL이 포함된 JSON response를 반환합니다:

Customer Portal Route Handler

Customer Portal route handler는 전달받은 고객을 위한 Customer Portal session을 생성하고 브라우저를 해당 portal로 redirect합니다.
핸들러는 요청자를 확인하지 않습니다. customer ID를 사용하여 요청하는 사람은 누구나 해당 고객의 portal을 받습니다. 자체 authentication으로 라우트를 보호하고, 로그인한 사용자의 customer ID만 전달하세요.

Query Parameters

string
필수
portal session의 customer ID입니다. 예: ?customer_id=cus_123.
boolean
true로 설정하면 Dodo Payments는 portal link를 고객에게 이메일로도 보냅니다.
@dodopayments/nuxt 0.2.11부터, customer_id이 누락된 경우 핸들러는 HTTP 400을 반환하며 포털 세션을 생성할 수 없는 경우에는 HTTP 500을 반환합니다. 이전 버전에서는 JSON 본문 { "status": 400, "body": "Missing customer_id in query parameters" }과 함께 HTTP 200을 반환합니다. HTTP 상태에 의존하려면 0.2.11 이상으로 업그레이드하세요.

Webhook Route Handler

webhook route handler는 코드를 실행하기 전에 각 request를 검증합니다:
  • Method: POST request만 지원됩니다. 다른 method는 405를 반환합니다.
  • Signature Verification: webhookKey를 사용하여 Standard Webhooks specification에 따라 raw request body와 webhook-id, webhook-timestamp 및 webhook-signature header를 검증합니다. 검증에 실패하면 401을 반환합니다.
  • Payload Validation: Zod로 payload를 검증합니다. payload가 유효하지 않으면 400을 반환합니다.
  • Error Handling:
    • 401: 유효하지 않은 signature
    • 400: 유효하지 않은 payload
    • 500: 검증 중 internal error
  • Event Routing: 모든 event에 대해 onPayload를 호출한 다음 event type에 해당하는 handler를 호출하고 200을 반환합니다.
adaptor는 handler에서 throw된 error를 catch하지 않습니다. error는 Nuxt로 전파되고 request는 실패합니다.

지원되는 Webhook Event Handler

각 handler는 event type에 대해 검증된 payload를 받습니다:
각 event의 의미는 Webhook Event Guide를 참조하세요.

LLM용 Prompt

이 prompt를 AI coding assistant에 복사하면 프로젝트에 모듈을 추가할 수 있습니다. agent에 Dodo Payments 문서와 skills도 제공하려면 Agent Plugin을 설치하세요.
마지막 수정일 2026년 9월 26일