@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
주요 currency 단위로 청구되는 금액을 고정합니다. 예를 들어 $12.50의 경우
12.5입니다. Pay What You Want product에서만 작동하며 product의 minimum price보다 낮으면 무시됩니다.returnUrl를 redirect_url로 link에 추가합니다.Response Format
정적 checkout은 checkout URL이 포함된 JSON response를 반환합니다. test mode에서는 URL에test.checkout.dodopayments.com가 사용됩니다.Dynamic Checkout (POST)
Dynamic Checkout (POST)
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
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을 반환합니다.