Skip to main content
PHP SDK cho phép các ứng dụng PHP 8.1+ truy cập REST API của Dodo Payments. Các phương thức nhận named parameter, phản hồi là các typed object và Composer tải SDK bằng tính năng PSR-4 autoloading.

Cài đặt

Cài đặt SDK bằng Composer:
SDK yêu cầu PHP 8.1.0 trở lên và Composer. SDK gửi request thông qua HTTP client PSR-18 trong dự án của bạn, chẳng hạn như Guzzle, được SDK tìm thấy bằng php-http/discovery.

Bắt đầu nhanh

Tạo client, sau đó tạo một phiên thanh toán:
Nếu bạn bỏ qua bearerToken, client sẽ đọc biến môi trường DODO_PAYMENTS_API_KEY. Nếu bạn bỏ qua baseUrl, client sẽ đọc DODO_PAYMENTS_BASE_URL và kết nối đến live mode (https://live.dodopayments.com) khi biến đó cũng chưa được thiết lập. API key của test mode chỉ hoạt động với URL của test mode, https://test.dodopayments.com.
Lưu API key trong biến môi trường hoặc trình quản lý secrets. Không bao giờ để lộ chúng trong codebase hoặc commit chúng vào hệ thống quản lý phiên bản.

Tính năng cốt lõi

PSR-4 Compliant

Composer tải namespace Dodopayments bằng tính năng PSR-4 autoloading.

Modern PHP

Được xây dựng cho PHP 8.1 trở lên, với typed parameter và strict type.

Extensive Testing

Repository của SDK bao gồm test suite cho các API service.

Exception Handling

Một exception class cho mỗi HTTP error status, cùng với các exception về timeout và connection.

Value Object

Các phương thức nhận named parameter và các parameter có giá trị mặc định phải được truyền theo tên. Để tạo một value object, hãy sử dụng static with constructor của object đó với các named parameter:
Mỗi value object cũng có một builder:
Các phương thức cũng chấp nhận plain array với cùng các key camelCase, chẳng hạn như ["productID" => "pdt_123", "quantity" => 1]. Các property của response cũng sử dụng tên camelCase, chẳng hạn như $session->checkoutURL.

Cấu hình

Constructor Client nhận bearerToken, webhookKey, baseUrl và requestOptions. Khi bạn bỏ qua các giá trị này, constructor sẽ đọc DODO_PAYMENTS_API_KEY, DODO_PAYMENTS_WEBHOOK_KEY (webhook signing secret của bạn) và DODO_PAYMENTS_BASE_URL từ môi trường. Để xác minh webhook, hãy truyền raw request body và header vào $client->webhooks->unwrap($body, headers: $headers). Phương thức này kiểm tra signature bằng webhook key của bạn, trả về event đã được phân tích và ném WebhookException nếu kiểm tra thất bại. Nếu bạn bỏ qua headers, unwrap sẽ không xác minh signature. $client->webhooks->unsafeUnwrap($body) phân tích body mà không xác minh, vì vậy chỉ sử dụng phương thức này để testing. Xem Webhooks.

Cấu hình Retry

Theo mặc định, SDK thử lại một số lỗi hai lần, với exponential backoff ngắn. Các lỗi sau sẽ kích hoạt retry:
  • Lỗi connection (sự cố kết nối mạng)
  • 408 Request Timeout
  • 409 Conflict
  • 429 Rate Limit
  • 500+ Internal errors
  • Timeout
Đặt maxRetries trong requestOptions, ở cấp client hoặc trong một request riêng lẻ:
Theo mặc định, request sẽ timeout sau 60 giây. Để thay đổi giới hạn, hãy đặt timeout, tính theo giây, trong cùng mảng requestOptions.

Các thao tác phổ biến

Các ví dụ trong phần này sử dụng $client từ Quick Start.

Tạo Checkout Session

Tạo một checkout session, sau đó chuyển hướng khách hàng đến checkoutURL được trả về:
Mỗi checkout URL chỉ hoạt động một lần và hết hạn sau 24 giờ. Để xem mọi tùy chọn session, hãy xem Checkout Sessions.

Quản lý khách hàng

Tạo một customer với địa chỉ email và tên, sau đó truy xuất customer bằng ID:

Xử lý Subscription

Tạo một subscription, sau đó charge subscription nếu đó là on-demand subscription.
POST /subscriptions (phương thức subscriptions->create của SDK) đã deprecated. Phương thức này vẫn hoạt động cho các integration hiện có, nhưng integration mới nên tạo subscription thông qua một Checkout Session.
billing chỉ yêu cầu country, là mã quốc gia ISO gồm hai chữ cái. Truyền AttachExistingCustomer::with(customerID: '...') để gắn customer hiện có hoặc NewCustomer::with(email: '...', name: '...') để tạo customer mới. Cả hai class đều nằm trong namespace Dodopayments\Payments. charge dành cho on-demand subscriptions, còn productPrice được tính theo đơn vị nhỏ nhất của currency.

Phân trang

Các phương thức list trả về một page object. getItems() trả về các item trên page hiện tại, còn pagingEachItem() trả về mọi item từ page hiện tại trở đi và request thêm page khi cần:
Để di chuyển từng page một, hãy gọi hasNextPage() và getNextPage().

Xử lý lỗi

Khi SDK không thể kết nối với API hoặc API trả về status 4xx hoặc 5xx, SDK sẽ ném một subclass của Dodopayments\Core\Exceptions\APIException:

Các loại lỗi

Exception class phụ thuộc vào nguyên nhân. Tất cả class đều nằm trong namespace Dodopayments\Core\Exceptions:
Hãy catch các exception này quanh các lệnh gọi API để ứng dụng có thể hiển thị thông báo rõ ràng hoặc thử lại sau. Với lỗi có thể retry, SDK chỉ ném exception sau khi các lần retry tự động thất bại.

Sử dụng nâng cao

Endpoint chưa được lập tài liệu

Để gọi một endpoint không có phương thức SDK, hãy sử dụng $client->request. Phương thức này áp dụng cùng cơ chế authentication và retry như các phương thức SDK:

Parameter chưa được lập tài liệu

Để gửi các parameter chưa được SDK định nghĩa, hãy truyền chúng trong requestOptions:
Một parameter extra* có cùng tên với parameter đã được lập tài liệu sẽ ghi đè parameter đó.

Tích hợp framework

Laravel

Bọc client trong một service class. Ví dụ này đặt API URL từ môi trường đã cấu hình:
Thêm các thiết lập vào config/services.php:

Symfony

Tạo một service nhận API key thông qua constructor:
Đăng ký service trong config/services.yaml:

Tài nguyên

GitHub Repository

Mã nguồn, các bản phát hành và danh sách đầy đủ các phương thức.

API Reference

Mọi endpoint, parameter và response.

Discord Community

Đặt câu hỏi và trao đổi với các developer khác.

Report Issues

Báo cáo bug hoặc yêu cầu tính năng.

Hỗ trợ

Để được hỗ trợ về PHP SDK:

Đóng góp

Để đóng góp, hãy đọc hướng dẫn đóng góp.
Lần sửa đổi cuối 26 tháng 9, 2026