@dodopayments/nextjs 패키지는 Next.js App Router 프로젝트에 세 가지 route handler를 제공합니다. Checkout는 checkout URL을 반환하고, CustomerPortal는 고객을 Customer Portal로 보내며, Webhooks는 webhook 이벤트를 확인하고 코드로 전달합니다. 이 패키지는 Next.js 14, 15 및 16을 지원합니다.
Checkout Handler
정적, 동적 및 checkout session 흐름으로 checkout URL을 생성합니다.
Customer Portal
고객이 구독 및 세부 정보를 관리할 수 있습니다.
Webhooks
Dodo Payments webhook 이벤트를 수신하고 처리합니다.
설치
1
Install the Package
프로젝트 루트에서 다음 명령을 실행합니다:또한 이 패키지는 peer dependency로 Zod 3.25 또는 Zod 4가 필요합니다.
2
Set Up Environment Variables
프로젝트 루트에
.env 파일을 생성합니다. 대시보드의 Developer → API Keys에서 API key를, Developer → Webhooks에서 webhook secret을 생성합니다:DODO_PAYMENTS_RETURN_URL는 checkout 후 고객이 도착하는 위치입니다. environment를 전달하지 않으면 handler는 live_mode를 사용합니다.Route Handler 예시
모든 예시는 Next.js App Router를 사용한다고 가정합니다.
- Checkout Handler
- Customer Portal Handler
- Webhook Handler
이 handler를 사용하여 앱에 Dodo Payments checkout을 추가합니다.
GET handler는 정적 checkout을 제공합니다. POST handler는 checkout session을 제공하며, type: "dynamic"를 설정하면 동적 checkout을 제공합니다.Checkout Route Handler
checkout handler는 Dodo Payments로 결제를 받는 다음 세 가지 방법을 모두 지원합니다:- 정적 Payment Links: 코드 없이 결제를 수집할 수 있는 공유 가능한 URL입니다.
- 동적 Payment Links: 사용자 지정 세부 정보로 생성하는 payment link입니다. deprecated endpoint를 사용합니다.
- Checkout Sessions: product cart, 고객 세부 정보 및 customization 옵션을 제공하는 hosted checkout입니다. 권장되는 흐름입니다.
Static Checkout (GET)
Static Checkout (GET)
지원되는 Query Parameters
string
필수
예:
?productId=pdt_123와 같은 product identifier입니다.integer
기본값:"1"
product의 수량입니다.
string
고객의 전체 이름입니다.
firstName 또는 lastName가 제공되면 무시됩니다.string
고객의 이름입니다.
string
고객의 성입니다.
string
고객의 email address입니다.
string
ISO 3166-1 alpha-2 code로 표시한 고객의 국가입니다.
string
고객의 주소 입력란입니다.
string
고객의 city입니다.
string
고객의 state 또는 province입니다.
string
고객의 ZIP 또는 postal code입니다.
boolean
true로 설정하면 full name field를 비활성화합니다.boolean
true로 설정하면 first name field를 비활성화합니다.boolean
true로 설정하면 last name 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
예:
USD와 같은 payment currency입니다.boolean
기본값:"true"
currency selector를 표시하거나 숨깁니다.
number
주요 currency 단위로 청구되는 금액을 고정합니다. 예를 들어 $12.50의 경우
12.5입니다. Pay What You Want product에서만 작동하며 product의 minimum price보다 낮으면 무시됩니다.boolean
기본값:"true"
discounts section을 표시하거나 숨깁니다.
string
metadata_로 시작하는 모든 query parameter는 metadata로 전달됩니다.returnUrl를 redirect_url로 link에 추가합니다.Response Format
정적 checkout은 checkout URL이 포함된 JSON response를 반환합니다. test mode에서는 URL에test.checkout.dodopayments.com가 사용됩니다.Dynamic Checkout (POST)
Dynamic Checkout (POST)
- 매개변수를 POST request의 JSON body로 전송합니다.
- one-time 및 recurring payment를 모두 지원합니다.
billing및customer가 필요합니다.- 지원되는 모든 body field는 다음을 참조하세요:
Response Format
동적 checkout은 checkout URL이 포함된 JSON response를 반환합니다:Checkout Sessions (POST)
Checkout Sessions (POST)
Checkout session은 one-time purchase 및 subscription을 위한 hosted checkout을 생성하며, customization을 완전히 제어할 수 있습니다.
product_cart만 필수 field입니다. body에 return_url가 없으면 handler는 config의 returnUrl를 사용합니다.자세한 내용과 지원되는 모든 field는 Checkout Sessions Integration Guide를 참조하세요.payment_method_id로 생성된 session은 checkout URL을 반환하지 않으므로 handler는 400을 응답합니다. 저장된 payment method로 청구하려면 대신 SDK로 session을 생성하세요.Response Format
Checkout session은 checkout URL이 포함된 JSON response를 반환합니다:Customer Portal Route Handler
Customer Portal route handler는 전달한 고객을 위한 Customer Portal session을 생성하고 browser를 해당 session으로 redirect합니다.Query Parameters
string
필수
예:
?customer_id=cus_123와 같은 portal session의 customer ID입니다.boolean
true로 설정하면 Dodo Payments가 고객에게 portal link도 email로 보냅니다.customer_id가 없으면 handler는 400을 반환하고, portal session을 생성할 수 없으면 500을 반환합니다.
Webhook Route Handler
webhook route handler는 코드를 실행하기 전에 각 request를 확인합니다:- Method: POST request만 지원됩니다. 다른 method는 405를 반환합니다.
- Signature Verification:
webhookKey를 사용하여 raw request body를webhook-id,webhook-timestamp및webhook-signatureheader와 비교하여 확인합니다. 확인에 실패하면 401을 반환합니다. - Payload Validation: 확인된 body를 JSON으로 parse하고 Zod로 validation합니다. parse된 payload가 webhook schema와 일치하지 않으면 400을 반환합니다.
- Error Handling:
- 401: 잘못된 signature
- 400: 잘못된 payload
- 500: 예기치 않은 verification error, 잘못된 JSON 또는 callback에서 throw된 error
- Event Routing: 모든 event에 대해
onPayload를 호출한 다음 event type에 해당하는 handler를 호출하고 200을 반환합니다.