@dodopayments/sveltekit 包为你的 SvelteKit 应用提供三个路由处理程序。Checkout 返回 checkout URL,CustomerPortal 将客户发送到 Customer Portal,而 Webhooks 验证 webhook 事件并将其路由到你的代码。
Checkout Handler
从你的 SvelteKit 应用创建 checkout URL。
Customer Portal
让客户管理其订阅和详细信息。
Webhooks
接收并验证 Dodo Payments webhook 事件。
安装
1
Install the Package
在项目根目录运行此命令:该包将 SvelteKit 2(
@sveltejs/kit 2.20.3 或更高版本)和 zod 3.25 或更高版本列为 peer dependencies。2
Set Up Environment Variables
在项目根目录创建一个 在 Developer → API Keys 下创建 API key。在 Developer → Webhooks 下添加 webhook endpoint,并将其 signing secret 复制到
.env 文件:DODO_PAYMENTS_WEBHOOK_KEY。DODO_PAYMENTS_RETURN_URL 是客户完成 checkout 后跳转到的位置。如果不传入环境,处理程序将使用 live_mode。路由处理程序示例
这些示例是位于
src/routes/api/ 下的 SvelteKit +server.ts endpoints。它们从 $env/static/private 导入你的凭据,SvelteKit 会将该文件排除在客户端代码之外。- Checkout Handler
- Customer Portal Handler
- Webhook Handler
使用此处理程序将 Dodo Payments checkout 添加到你的 SvelteKit 应用。
Checkout 返回一个 GET 处理程序(用于静态 checkout)和一个 POST 处理程序(用于 checkout sessions);当设置 type: "dynamic" 时,也可用于动态 checkout。请从使用 type: "static" 创建的处理程序中导出 GET,或者不使用 type,因为 session 或 dynamic 处理程序的 GET 处理程序会返回 400。POST 来自使用 type: "dynamic" 创建的处理程序时,动态 checkout 请求即可正常工作。使用 type: "session" 时(如示例路由所示),发送 checkout session 请求。Checkout 路由处理程序
checkout 处理程序支持使用 Dodo Payments 收款的三种方式:- 静态 Payment Links: 可分享的 URL,无需代码即可收款。
- 动态 Payment Links: 使用自定义详细信息生成的 payment links。它们使用已弃用的 endpoints。
- Checkout Sessions: 支持产品购物车、客户详细信息和自定义选项的托管 checkout。这是推荐的流程。
Checkout 接受以下选项:
Static Checkout (GET)
Static Checkout (GET)
支持的 Query Parameters
string
必填
产品标识符,例如
?productId=pdt_nZuwz45WAs64n3l07zpQR。integer
默认值:"1"
产品数量。
string
客户的全名。如果提供了
firstName 或 lastName,则会忽略此项。string
客户的名字。
string
客户的姓氏。
string
客户的电子邮件地址。
string
客户所在国家,使用 ISO 3166-1 alpha-2 代码表示。
string
客户的地址行。
string
客户所在城市。
string
客户所在州或省。
string
客户的 ZIP 或邮政编码。
boolean
设置为
true 可禁用全名字段。boolean
设置为
true 可禁用名字字段。boolean
设置为
true 可禁用姓氏字段。boolean
设置为
true 可禁用电子邮件字段。boolean
设置为
true 可禁用国家字段。boolean
设置为
true 可禁用地址行字段。boolean
设置为
true 可禁用城市字段。boolean
设置为
true 可禁用州字段。boolean
设置为
true 可禁用 ZIP code 字段。string
付款货币,例如
USD。boolean
默认值:"true"
显示或隐藏货币选择器。
number
固定收取的金额,以主要货币单位表示,例如
12.5 表示 $12.50。仅适用于 Pay What You Want 产品;如果该金额低于产品最低价格,则会被忽略。boolean
默认值:"true"
显示或隐藏折扣部分。
string
任何以
metadata_ 开头的 query parameter 都会作为 metadata 传递。returnUrl 以 redirect_url 的形式添加到链接中。响应格式
静态 checkout 返回包含 checkout URL 的 JSON 响应。在测试模式下,URL 使用test.checkout.dodopayments.com。Dynamic Checkout (POST)
Dynamic Checkout (POST)
- 在 POST 请求中将参数作为 JSON body 发送。
- 同时支持一次性付款和周期性付款。
billing和customer是必需的。- 有关所有受支持的 body 字段,请参阅:
响应格式
动态 checkout 返回包含 checkout URL 的 JSON 响应:Checkout Sessions (POST)
Checkout Sessions (POST)
Checkout sessions 为一次性购买和订阅创建托管 checkout,并提供完整的自定义控制。
product_cart 是唯一必需的字段。如果 body 中没有 return_url,处理程序会使用其配置中的 returnUrl。有关更多详细信息以及所有受支持的字段,请参阅 Checkout Sessions Integration Guide。使用 payment_method_id 创建的 session 不会返回 checkout URL,因此处理程序会响应 400。若要向已保存的付款方式收费,请改用 SDK 创建 session。响应格式
Checkout sessions 返回包含 checkout URL 的 JSON 响应:Customer Portal 路由处理程序
Customer Portal 路由处理程序会为你传入的客户创建 Customer Portal session,并使用 302 响应将浏览器重定向到该 session。Query Parameters
string
必填
portal session 的客户 ID,例如
?customer_id=cus_123。boolean
如果设置为
true,Dodo Payments 还会通过电子邮件将 portal 链接发送给客户。Webhook 路由处理程序
webhook 路由处理程序会在运行你的代码前验证每个请求:- Method: 仅支持 POST 请求。其他 method 返回 405。
- Signature Verification: 根据 Standard Webhooks 规范,使用
webhookKey验证原始请求 body 以及webhook-id、webhook-timestamp和webhook-signatureheaders。如果验证失败,则返回 401。 - Payload Validation: 使用 Zod 验证 payload。payload 无效时返回 400。
- Error Handling:
- 401:签名无效
- 400:payload 无效
- 500:验证期间发生内部错误
- Event Routing: 对每个事件调用
onPayload,然后调用与事件类型对应的处理程序,并返回 200。