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: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.
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 staticwith constructor của object đó với các named parameter:
["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
ConstructorClient 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
maxRetries trong requestOptions, ở cấp client hoặc trong một request riêng lẻ:
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 đếncheckoutURL được trả về:
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.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:
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ủaDodopayments\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 namespaceDodopayments\Core\Exceptions:
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 trongrequestOptions:
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:config/services.php:
Symfony
Tạo một service nhận API key thông qua constructor: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:- Discord: Tham gia community server để nhận hỗ trợ theo thời gian thực.
- Email: Liên hệ support@dodopayments.com.
- GitHub: Mở issue trên repository.