Tự động cung cấp license key, tệp có thể tải xuống, feature flag và quyền truy cập vào Discord, GitHub, Telegram, Framer và Notion khi khách hàng thanh toán.
Entitlement chuyển một khoản thanh toán thành công hoặc subscription đang hoạt động thành quyền truy cập: license key trong hộp thư của khách hàng, feature flag mà ứng dụng của bạn kiểm tra, vai trò Discord, repository GitHub, template Notion, liên kết remix Framer, lời mời trò chuyện Telegram hoặc một gói tệp có thể tải xuống. Dodo Payments tự động cấp, theo dõi và thu hồi quyền truy cập đó khi vòng đời thanh toán thay đổi.
The Entitlements dashboard. Each entitlement is a reusable template; the right pane shows individual customer grants.
Entitlement là định nghĩa có thể tái sử dụng về một nội dung bạn cung cấp cho khách hàng, chẳng hạn như license key Pro, vai trò Discord “Patrons”, quyền truy cập vào repository GitHub riêng tư hoặc một gói sách điện tử có thể tải xuống. Bạn gắn entitlement vào product, và Dodo Payments cung cấp entitlement đó khi khách hàng thanh toán.Khi khách hàng mua product, Dodo Payments tạo một grant: một lần cấp entitlement cho một khách hàng. Grant có một trong bốn trạng thái: Pending trong khi quá trình cung cấp đang diễn ra, Delivered khi khách hàng đã có quyền truy cập, Failed nếu không thể hoàn tất việc cung cấp, và Revoked khi quyền truy cập bị thu hồi.
Entitlement kiểm soát việc cung cấp (khách hàng có quyền truy cập không?). Credit kiểm soát mức sử dụng (họ có thể sử dụng bao nhiêu?). Bạn có thể gắn cả hai vào cùng một product. Xem Credit-Based Billing để biết thêm về credit.
Mỗi entitlement được cung cấp thông qua một integration. Hãy chọn integration phù hợp với nội dung bạn bán.
License Keys
Tạo mã giấy phép duy nhất với giới hạn kích hoạt và thời hạn. Phù hợp nhất cho phần mềm, plugin, và CLI.
Digital Files
Cung cấp các tệp có thể tải xuống, chẳng hạn như sách điện tử, template và nội dung đa phương tiện, bằng URL tải xuống presigned và hướng dẫn tùy chọn.
Feature Flags
Kiểm soát các tính năng trong ứng dụng của riêng bạn dựa trên giao dịch mua. Được cung cấp khi tạo, kiểm tra thông qua API và thu hồi khi hủy.
Discord
Cấp cho khách hàng một vai trò trong server Discord của bạn khi họ mua hàng. Vai trò sẽ tự động bị xóa khi hủy.
GitHub
Thêm khách hàng làm người cộng tác vào kho lưu trữ riêng tư theo mức quyền bạn chọn.
Telegram
Thêm khách hàng vào trò chuyện hoặc kênh Telegram riêng tư sau khi mua.
Framer
Mở khóa một liên kết remix của mẫu Framer cho khách hàng thanh toán.
Notion
Nhân bản một mẫu Notion vào không gian làm việc của khách hàng khi mua.
Grant tuân theo cùng các sự kiện thanh toán và subscription mà bạn nhận được dưới dạng webhook. Dodo Payments tự động tạo và thu hồi grant cho các giao dịch mua dựa trên vòng đời thanh toán, vì vậy bạn không cần tự gọi grant API.
Dodo Payments tạo grant khi một khoản thanh toán hoàn tất hoặc một subscription trở nên hoạt động. Grant feature flag bắt đầu ở trạng thái Delivered. Grant license key cũng bắt đầu ở trạng thái Delivered khi entitlement sử dụng fulfillment_mode: auto (mặc định). Trong fulfillment_mode: manual, grant bắt đầu ở trạng thái Pending mà chưa có key, cho đến khi bạn cung cấp key bằng Fulfill License Key Grant. Mọi integration khác đều bắt đầu ở trạng thái Pending.Các integration dựa trên OAuth (Discord, GitHub, Notion) cung cấp một oauth_url mà khách hàng truy cập để đồng ý. Dodo Payments cố gắng tạo URL này khi tạo grant. Nếu không thành công, trường này giữ trạng thái null cho đến khi khách hàng bắt đầu quy trình chấp nhận từ email cung cấp hoặc Customer Portal. Các integration trực tiếp trên nền tảng (Telegram, Framer, Digital Files) chỉ giữ trạng thái Pending trong khi việc cung cấp đang được thiết lập, sau đó chuyển sang Delivered.
2
Delivered
Khi việc cung cấp hoàn tất, grant chuyển sang Delivered và delivered_at được thiết lập. Việc cung cấp hoàn tất khi license key được tạo, vai trò được gán, quyền truy cập repository được cấp, các liên kết tệp được xác định hoặc quy trình OAuth hoàn tất.
3
Failed
Nếu lệnh gọi integration trả về lỗi không thể retry, chẳng hạn như OAuth token đã bị thu hồi, quyền bị từ chối hoặc tệp không còn tồn tại, grant chuyển sang Failed. Các trường error_code và error_message ghi lại lý do.
4
Revoked
Khi quyền truy cập bị thu hồi, chẳng hạn do subscription bị hủy, khoản hoàn tiền được phát hành hoặc bạn thu hồi grant, grant chuyển sang Revoked. Trường revocation_reason ghi lại tác nhân.
Mỗi sự kiện thanh toán và subscription thay đổi grant như sau:
Sự kiện
Hành vi
payment.succeeded (thanh toán một lần)
Cấp một grant cho mỗi entitlement được gắn. Entitlement License Key cấp một grant cho mỗi key.
payment.succeeded (thanh toán liên kết với subscription)
Không thay đổi. Các sự kiện subscription bên dưới điều khiển những grant này.
subscription.active
Cấp grant cho mọi entitlement được gắn nhưng chưa có grant, đồng thời cấp lại các grant trước đó đã bị thu hồi cho cùng subscription. Các grant bị thu hồi bằng manual, refund hoặc platform_external sẽ không được cấp lại.
subscription.renewed
Không thay đổi. Grant hiện có vẫn tồn tại qua các lần gia hạn.
subscription.past_due
Không thay đổi. Grant vẫn được cung cấp trong toàn bộ thời gian gia hạn.
subscription.on_hold
Thu hồi mọi grant đã cung cấp và đang chờ với revocation_reason: subscription_on_hold.
subscription.paused
Thu hồi mọi grant đã cung cấp và đang chờ với revocation_reason: SubscriptionPaused. Không giống các lý do subscription khác, giá trị này sử dụng PascalCase, vì vậy hãy khớp chính xác.
subscription.unpaused
Cấp lại các grant trước đó đã bị thu hồi cho cùng subscription, giống như subscription.active.
subscription.cancelled
Thu hồi mọi grant với revocation_reason: subscription_cancelled.
subscription.expired
Thu hồi mọi grant với revocation_reason: subscription_expired.
subscription.plan_changed
Thu hồi mọi grant hiện tại với revocation_reason: plan_changed, sau đó cấp grant cho các entitlement của plan mới.
refund.succeeded (thanh toán một lần)
Thu hồi các grant của khoản thanh toán đó với revocation_reason: refund.
Thu hồi thủ công qua API
Thu hồi grant với revocation_reason: manual. Grant bị thu hồi thủ công sẽ không được tự động cấp lại khi subscription gia hạn.
License key bị vô hiệu hóa
Đối với grant license key, việc vô hiệu hóa key cơ sở sẽ thu hồi grant với revocation_reason: license_key_disabled. Việc bật lại key sẽ tự động khôi phục grant.
Phát hiện sai lệch nền tảng
Nếu phần nền tảng của integration bị lệch trạng thái, chẳng hạn vai trò Discord bị xóa thủ công, GitHub App mất quyền truy cập repository hoặc một lần đối soát phát hiện target bị thiếu, Dodo Payments sẽ thu hồi grant với revocation_reason: platform_external. Grant sẽ không được tự động cấp lại khi subscription gia hạn cho đến khi sự cố nền tảng được giải quyết.
Grant do subscription điều khiển là idempotent theo (entitlement, customer, subscription), vì vậy các lần gia hạn và kích hoạt lại không tạo grant trùng lặp. Grant một lần là idempotent theo (entitlement, customer, payment).
Đi tới Entitlements trong dashboard và nhấp vào + để tạo entitlement.
2
Pick an Integration
Chọn loại integration: License Key, Digital Files, Feature Flag, Discord, GitHub, Telegram, Figma, Framer hoặc Notion. Đối với integration nền tảng, trước tiên hãy kết nối tài khoản nếu bạn chưa thực hiện.
3
Configure Delivery
Điền các trường cho integration. Ví dụ: GitHub yêu cầu repository và mức quyền, Discord yêu cầu server và vai trò tùy chọn, còn License Key yêu cầu giới hạn activations và thời hạn license.
Creating a GitHub entitlement. Each integration shows the fields it needs.
4
Save
Nhấp vào Create Entitlement. Giờ đây bạn có thể gắn entitlement vào bất kỳ product nào.
Mở một product, đi tới phần Entitlements và chọn các entitlement cần cung cấp khi product được mua. Một product có thể cung cấp nhiều entitlement cùng lúc. Ví dụ: plan Pro có thể bao gồm license key, quyền truy cập GitHub và vai trò Discord.
Attaching entitlements to a product. Selected entitlements are delivered on every successful purchase or active subscription.
Sau khi mua hàng, khách hàng nhận được email cung cấp có license key, liên kết tải xuống, liên kết lời mời OAuth hoặc lời mời nền tảng tương ứng với các entitlement trên product. Những thông tin tương tự vẫn có trong Customer Portal, bên dưới lịch sử đơn hàng của họ, trong khi grant đang hoạt động.
Quyền truy cập subscriber vào Discord, GitHub và Notion yêu cầu khách hàng ủy quyền cho Dodo Payments cấp quyền truy cập đó. Các grant này giữ trạng thái Pending cho đến khi khách hàng hoàn tất quy trình OAuth từ liên kết trong email hoặc Customer Portal. Sau khi khách hàng ủy quyền, grant chuyển sang Delivered và Dodo Payments cấp quyền truy cập nền tảng.
Khi grant bị thu hồi, Dodo Payments xóa quyền truy cập trên nền tảng: xóa vai trò Discord, xóa cộng tác viên GitHub hoặc vô hiệu hóa license key. Khách hàng nhìn thấy thay đổi trong Customer Portal.
Đối với Digital Files, việc thu hồi sẽ ngăn tạo URL tải xuống presigned mới, nhưng không vô hiệu hóa các bản sao mà khách hàng đã tải xuống. Hãy tính đến điều này khi lập kế hoạch kiểm soát quyền truy cập nội dung.
Mở bất kỳ entitlement nào từ dashboard để xem các grant của entitlement đó. Bảng chi tiết hiển thị tổng số grant, bộ lọc trạng thái và một hàng cho mỗi grant, bao gồm khách hàng, ngày truy cập, trạng thái và thao tác Revoke.Để quản lý grant theo chương trình, hãy liệt kê chúng bằng bộ lọc status và thu hồi một grant theo ID:
import DodoPayments from 'dodopayments';const client = new DodoPayments({ bearerToken: process.env['DODO_PAYMENTS_API_KEY'],});// List grants for an entitlementconst grants = await client.entitlements.grants.list('ent_abc123', { status: 'Delivered',});// Revoke a single grantawait client.entitlements.grants.revoke('entg_xyz789', { id: 'ent_abc123',});
Dodo Payments gửi bốn sự kiện webhook trong vòng đời của grant. Hãy đăng ký các sự kiện này để giữ cho ứng dụng của bạn đồng bộ với những nội dung mỗi khách hàng có thể truy cập.
Sự kiện
Được kích hoạt khi
entitlement_grant.created
Grant được tạo. Grant license key được tự động hoàn tất và grant feature flag có trạng thái Delivered ngay khi nhận. Grant license key được hoàn tất thủ công và mọi integration khác có trạng thái Pending khi nhận, sau đó chuyển sang Delivered khi lệnh gọi nền tảng thành công hoặc, đối với integration dựa trên OAuth, khi khách hàng ủy quyền.
entitlement_grant.delivered
Grant hiện có chuyển sang Delivered, nghĩa là khách hàng đã có quyền truy cập. Grant có trạng thái Delivered ngay khi tạo chỉ kích hoạt created.
entitlement_grant.failed
Không thể cung cấp grant. Kiểm tra error_code và error_message.
entitlement_grant.revoked
Quyền truy cập đã bị thu hồi. Kiểm tra revocation_reason.
Entitlement Grant Webhook Payloads
Xem schema payload đầy đủ, các event mẫu và tài liệu tham chiếu revocation_reason.
Sử dụng một entitlement cho mỗi kênh cung cấp. Không dùng chung một entitlement Discord cho các product có mục đích vai trò khác nhau. Hãy tạo một entitlement cho mỗi vai trò để việc thu hồi luôn rõ ràng.
Trước tiên hãy kiểm thử ở test mode. Tạo entitlement, gắn entitlement vào một product kiểm thử, thực hiện checkout và theo dõi grant chuyển từ Pending sang Delivered. Sau đó hủy subscription kiểm thử và xác nhận grant đã bị thu hồi.
Lắng nghe entitlement_grant.delivered, không phải payment.succeeded. Một khoản thanh toán có thể thành công trước khi việc cung cấp hoàn tất, đặc biệt với các quy trình OAuth. Hãy chờ grant đạt Delivered trước khi mở khóa các tính năng phụ thuộc trong hệ thống của bạn. Grant được cung cấp ngay khi tạo, chẳng hạn license key tự động hoàn tất hoặc feature flag, sẽ đến dưới dạng entitlement_grant.created với status: "Delivered".
Xem entitlement_grant.failed là trạng thái cần xử lý. Grant thất bại nghĩa là khách hàng đã thanh toán nhưng chưa nhận được quyền truy cập. Hiển thị các grant này cho đội ngũ hỗ trợ hoặc kích hoạt việc cấp lại.
Ánh xạ revocation_reason vào các quy trình giữ chân khách hàng. Việc thu hồi subscription_on_hold có thể khôi phục vì khách hàng có thể cập nhật thẻ. Việc thu hồi manual là có chủ ý. Hãy xử lý chúng khác nhau trong thông báo gửi khách hàng.
Không thu hồi quyền truy cập khi có subscription.past_due. Sự kiện đó mở ra thời gian gia hạn, và khách hàng vẫn giữ quyền truy cập cho đến khi khoảng thời gian kết thúc. Hãy chờ subscription.on_hold hoặc subscription.cancelled.