安装
使用 Composer 安装 SDK:SDK 要求 PHP 8.1.0 或更高版本以及 Composer。它会通过项目中的 PSR-18 HTTP client 发送请求,例如 Guzzle;SDK 会使用
php-http/discovery 找到该 client。快速开始
创建 client,然后创建结账会话:bearerToken,client 会读取 DODO_PAYMENTS_API_KEY 环境变量。如果省略 baseUrl,client 会读取 DODO_PAYMENTS_BASE_URL;如果该变量也未设置,则连接到 live mode(https://live.dodopayments.com)。test mode API key 只能与 test mode URL https://test.dodopayments.com 一起使用。
核心功能
PSR-4 Compliant
Composer 通过 PSR-4 自动加载加载
Dodopayments 命名空间。Modern PHP
专为 PHP 8.1 或更高版本构建,使用类型化参数和严格类型。
Extensive Testing
SDK repository 包含 API services 的测试套件。
Exception Handling
每个 HTTP error status 都有对应的 exception class,另外还包括 timeout 和 connection exceptions。
值对象
方法使用命名参数,具有默认值的参数必须按名称传递。要构建值对象,请使用其静态with 构造函数,并传入命名参数:
["productID" => "pdt_123", "quantity" => 1]。响应属性同样使用 camelCase 名称,例如 $session->checkoutURL。
配置
Client 构造函数接受 bearerToken、webhookKey、baseUrl 和 requestOptions。省略这些参数时,它会从环境中读取 DODO_PAYMENTS_API_KEY、DODO_PAYMENTS_WEBHOOK_KEY(你的 webhook signing secret)以及 DODO_PAYMENTS_BASE_URL。
要验证 webhook,请将原始请求正文和 headers 传递给 $client->webhooks->unwrap($body, headers: $headers)。它会使用你的 webhook key 检查签名,返回已解析的 event;如果检查失败,则抛出 WebhookException。如果省略 headers,unwrap 不会验证签名。$client->webhooks->unsafeUnwrap($body) 会在不验证签名的情况下解析正文,因此只能用于测试。请参阅 Webhooks。
重试配置
SDK 默认会对部分错误重试两次,并使用较短的 exponential backoff。以下错误会触发重试:- Connection errors(网络连接问题)
- 408 Request Timeout
- 409 Conflict
- 429 Rate Limit
- 500+ Internal errors
- Timeouts
requestOptions 中设置 maxRetries,可以在 client 或单个 request 上进行设置:
requestOptions 数组中,以秒为单位设置 timeout。
常见操作
本节中的示例使用 Quick Start 中的$client。
创建 Checkout Session
创建 checkout session,然后将 customer 重定向到返回的checkoutURL:
管理 Customers
使用 email address 和 name 创建 customer,然后通过 ID 检索它:处理 Subscriptions
创建 subscription;如果它是 on-demand subscription,则对其收费。billing 只需要 country,即两个字母的 ISO country code。传递 AttachExistingCustomer::with(customerID: '...') 可关联现有 customer,传递 NewCustomer::with(email: '...', name: '...') 可创建 customer。这两个 class 都位于 Dodopayments\Payments namespace 中。charge 用于 on-demand subscriptions,而 productPrice 的单位是货币的最小单位。分页
List methods 返回一个 page object。getItems() 返回当前页面中的 items,pagingEachItem() 返回从当前页面开始的所有 items,并在需要时请求更多页面:
hasNextPage() 和 getNextPage()。
错误处理
当 SDK 无法连接到 API,或 API 返回 4xx 或 5xx status 时,SDK 会抛出Dodopayments\Core\Exceptions\APIException 的子类:
错误类型
exception class 取决于错误原因。所有 class 都位于Dodopayments\Core\Exceptions namespace 中:
高级用法
未记录的 Endpoints
要调用没有 SDK method 的 endpoint,请使用$client->request。它会应用与 SDK methods 相同的 authentication 和 retries:
未记录的 Parameters
要发送 SDK 未定义的 parameters,请将其传入requestOptions:
与已记录 parameter 同名的
extra* parameter 会覆盖该 parameter。Framework 集成
Laravel
将 client 封装在 service class 中。此示例从已配置的环境中设置 API URL:config/services.php:
Symfony
创建一个通过其构造函数接收 API key 的 service:config/services.yaml 中注册 service:
资源
GitHub Repository
源代码、releases 和完整的 method list。
API Reference
每个 endpoint、parameter 和 response。
Discord Community
提出问题并与其他 developers 交流。
Report Issues
报告 bugs 或请求 features。
支持
如需 PHP SDK 方面的帮助:- Discord:加入 community server 获取实时帮助。
- Email:联系 support@dodopayments.com。
- GitHub:在 repository 中提交 issue。