Thanh toán theo số lượng chỗ tính phí khách hàng dựa trên số người dùng trong tài khoản của họ. Dodo Payments triển khai hình thức này bằng hệ thống add-on: một sản phẩm subscription cơ bản cộng với một add-on tính phí theo từng chỗ, trong đó quantity biểu thị số lượng chỗ.
Implementation Tutorial
Hướng dẫn từng bước kèm ví dụ mã.
Add-ons Documentation
Tìm hiểu về hệ thống bổ trợ hỗ trợ thanh toán theo chỗ ngồi.
Subscription Management
Quản lý đăng ký theo chỗ ngồi và thay đổi gói.
Webhooks
Theo dõi thay đổi chỗ ngồi bằng webhook đăng ký.
Thanh Toán Theo Số Ghế Là Gì?
Thanh toán theo số lượng seat tính phí khách hàng dựa trên số người dùng truy cập sản phẩm của bạn. Thay vì một khoản phí cố định, giá sẽ tăng theo quy mô nhóm.Các Trường Hợp Sử Dụng Thông Dụng
Lợi Ích Của Định Giá Theo Số Ghế
Dành cho doanh nghiệp của bạn:- Doanh thu tăng khi khách hàng phát triển
- Khách hàng có thể dự toán ngân sách một cách ổn định
- Lộ trình nâng cấp rõ ràng từ cá nhân lên nhóm rồi đến doanh nghiệp
- Giá trị vòng đời cao hơn khi các nhóm mở rộng
- Chỉ trả tiền cho số người dùng họ có
- Dễ hiểu và dự toán chi phí
- Thêm hoặc xóa người dùng khi cần
- Mức giá công bằng, phù hợp với quy mô nhóm
Cách hoạt động
Dodo Payments triển khai thanh toán theo số lượng chỗ bằng hệ thống Add-ons. Một subscription tính phí theo số lượng chỗ gồm hai phần:
Tổng tiền hàng tháng của khách hàng là:
Chiến Lược Định Giá
Chọn chiến lược định giá theo số ghế phù hợp với doanh nghiệp của bạn:Chiến Lược 1: Cơ Bản + Tiện Ích Theo Ghế
Bao gồm một số ghế nhất định trong kế hoạch cơ bản, tính phí cho các ghế bổ sung.Chiến lược 2: Định giá hoàn toàn theo từng chỗ
Tính một mức phí cố định cho mỗi chỗ mà không có phí cơ bản.Chiến lược 3: Định giá theo cấp dựa trên số chỗ
Các gói cơ bản khác nhau với mức phí theo từng chỗ khác nhau.Chiến lược 4: Gói chỗ
Bán chỗ theo gói thay vì bán từng chỗ riêng lẻ.Thiết lập thanh toán theo số lượng chỗ
Bước 1: Lập kế hoạch định giá
Trước khi triển khai, hãy xác định cấu trúc định giá của bạn:1
Define Base Plan
Quyết định những gì được bao gồm trong subscription cơ bản:
- Giá cơ bản (có thể là $0 đối với mô hình thuần túy tính theo seat)
- Số seat được bao gồm
- Các tính năng khả dụng ở cấp này
2
Set Seat Pricing
Xác định chi phí của seat add-on:
- Giá cho mỗi chỗ bổ sung
- Mọi chiết khấu theo số lượng (thông qua nhiều add-on)
- Số lượng chỗ tối đa (nếu có)
3
Consider Billing Frequency
Điều chỉnh giá theo số lượng chỗ phù hợp với chu kỳ thanh toán của bạn:
- Subscription hàng tháng → khoản phí theo chỗ hàng tháng
- Subscription hàng năm → khoản phí theo chỗ hàng năm (thường được giảm giá)
Bước 2: Tạo Seat Add-on
Trong dashboard Dodo Payments:- Đi đến Products → Add-Ons
- Nhấp vào Create Add-On
- Cấu hình add-on:
Bước 3: Tạo Subscription cơ bản
Tạo sản phẩm subscription của bạn:- Đi đến Products → Create Product
- Chọn Subscription
- Cấu hình giá và thông tin chi tiết
- Trong phần Add-Ons, đính kèm seat add-on của bạn
Bước 4: Đính kèm Add-on vào sản phẩm
Liên kết seat add-on với subscription của bạn:- Chỉnh sửa sản phẩm subscription
- Cuộn đến phần Add-Ons
- Nhấp vào Add Add-Ons
- Chọn seat add-on của bạn
- Lưu thay đổi
Sản phẩm subscription của bạn hiện hỗ trợ định giá theo số lượng chỗ. Khách hàng có thể mua bất kỳ số lượng chỗ bổ sung nào trong quá trình checkout.
Quản lý chỗ
Thêm chỗ vào Subscription mới
Khi tạo một phiên checkout, hãy chỉ định số lượng chỗ:Thay đổi số lượng chỗ trong Subscription hiện có
Sử dụng Change Plan API để điều chỉnh số chỗ. Mảngaddons đặt tổng số chỗ mới (không phải phần chênh lệch).
Xóa chỗ
Để giảm số lượng chỗ, hãy chỉ định quantity thấp hơn:Xóa tất cả chỗ bổ sung
Truyền một mảngaddons trống để xóa tất cả add-on:
Proration khi thay đổi số chỗ
Khi thay đổi số chỗ được áp dụng giữa chu kỳ, Dodo Payments tính khoản phí ngay lập tức qua ba bước:Cách mỗi mode tính credit
Với
difference_immediately, khách hàng chỉ trả phần chênh lệch giữa giá gói cũ và giá gói mới. Đây là nguồn gốc của tên gọi này, đồng thời là lý do số tiền không đổi bất kể thay đổi được thực hiện vào thời điểm nào trong cycle.
Nếu khoản credit lớn hơn khoản phí của chu kỳ mới, phần chênh lệch được giữ dưới dạng credit ở cấp subscription và tự động áp dụng cho các lần gia hạn trong tương lai.
Ví dụ thực tế: Thêm 5 chỗ
Một tình huống được chạy qua cả bốn mode để các con số có thể so sánh trực tiếp.
Trong cả ba mode áp dụng ngay, khách hàng nhận được trọn một tháng mới với giá $130 để đổi lại khoản họ thanh toán hôm nay.
Vì sao thời điểm quan trọng với prorated_immediately
Cùng một thay đổi sẽ tốn nhiều hơn nếu được thực hiện càng muộn trong chu kỳ, vì phần thời gian còn lại để credit lại càng ít.
Khách hàng nhận được một tháng mới đầy đủ trong mọi dòng. Chỉ có sự phân bổ giữa phần “đã thanh toán” và phần “thanh toán hôm nay” thay đổi.
Để thay đổi seat có cùng chi phí bất kể được thực hiện vào thời điểm nào, hãy sử dụng
difference_immediately.
Ví dụ thực tế: “Khoản phí bất ngờ”
Đây là trường hợp thường khiến merchant bất ngờ nhất. Thêm một seat add-on nhỏ vào cuối chu kỳ có thể tạo ra khoản phí lớn hơn nhiều so với giá của add-on.
Thêm một seat $10/tháng có chi phí $55.00 với
prorated_immediately. Khách hàng được tính phí cho trọn một tháng mới ở mức $60 và được credit $5 còn lại của tháng cũ, đồng thời ngày gia hạn của họ được đặt lại.
Để các lần thêm seat nhỏ giữa cycle chỉ có chi phí bằng giá seat và không phát sinh thêm khoản nào, hãy sử dụng difference_immediately.
Ví dụ thực tế: Xóa chỗ (Downgrade)
Khi gói mới có giá thấp hơn khoản credit, phần dư được giữ dưới dạng subscription credit và tự động áp dụng cho các lần gia hạn trong tương lai của subscription này. Khoản này không được thêm vào Customer Wallet và không phải là credit entitlement.Khoản credit bao phủ toàn bộ subscription, gồm gói cơ bản và tất cả add-on, không chỉ các seat bị xóa.
Đọc Preview Response
previewChangePlan trả về chính xác các line item sẽ được tính phí. Mỗi line item có một proration_factor:
Proration được tính chính xác đến từng giây dựa trên thời điểm thay đổi, không làm tròn đến ngày gần nhất. Các ví dụ trên sử dụng số ngày tròn theo ranh giới ngày để dễ hiểu.
Preview trước khi thay đổi
Luôn preview proration trước khi thực hiện thay đổi:Theo dõi chỗ bằng Webhooks
Theo dõi các thay đổi số chỗ bằng cách lắng nghe subscription webhook:Các Event liên quan
Ví dụ Webhook Handler
Thực thi giới hạn số chỗ
Ứng dụng của bạn phải thực thi giới hạn số chỗ. Dodo Payments theo dõi việc thanh toán, nhưng bạn kiểm soát quyền truy cập.- Hard Limit
- Soft Limit with Warning
- Auto-Upgrade
Ngăn chặn nghiêm ngặt việc thêm người dùng vượt quá số lượng chỗ.
Mẫu nâng cao
Các loại chỗ khác nhau
Cung cấp các loại chỗ khác nhau với mức giá khác nhau:Chiết khấu chỗ hàng năm
Cung cấp mức giá chỗ hàng năm được giảm:Yêu cầu số chỗ tối thiểu
Yêu cầu số lượng chỗ tối thiểu cho một số plan nhất định:Best Practices
Best Practices về định giá
- Giao tiếp rõ ràng: Hiển thị nổi bật giá theo từng chỗ trên trang định giá
- Chỗ được bao gồm: Cân nhắc bao gồm một vài chỗ trong giá cơ bản để giảm trở ngại
- Chiết khấu theo số lượng: Cung cấp mức giá thấp hơn cho mỗi chỗ đối với các nhóm lớn hơn để giành được hợp đồng doanh nghiệp
- Ưu đãi hàng năm: Giảm giá các plan hàng năm để cải thiện dòng tiền và khả năng giữ chân khách hàng
Best Practices về kỹ thuật
- Cache số lượng chỗ: Cache số lượng chỗ của subscription cục bộ để tránh gọi API trong mỗi request
- Đồng bộ thường xuyên: Định kỳ đồng bộ số lượng chỗ cục bộ với Dodo Payments qua API
- Xử lý lỗi: Nếu thay đổi số chỗ thất bại, hiển thị thông báo lỗi rõ ràng và các tùy chọn retry
- Audit Trail: Ghi log mọi thay đổi số chỗ để xử lý tranh chấp thanh toán và tuân thủ
Best Practices về trải nghiệm người dùng
- Phản hồi theo thời gian thực: Hiển thị ngay tác động chi phí khi điều chỉnh seat
- Các bước xác nhận: Yêu cầu xác nhận trước khi thay đổi thanh toán
- Minh bạch về Proration: Giải thích rõ các khoản phí prorated trước khi áp dụng
- Dễ dàng hạ cấp: Đừng khiến việc giảm seat trở nên khó khăn (điều này giúp xây dựng lòng tin)
Khắc phục sự cố
Seat count mismatch between app and billing
Seat count mismatch between app and billing
Triệu chứng: App hiển thị số lượng chỗ khác với subscription.Nguyên nhân:
- Webhook chưa được nhận hoặc xử lý
- Race condition trong quá trình thay đổi số chỗ
- Dữ liệu cache chưa được cập nhật
- Triển khai webhook handler cho
subscription.plan_changed - Thêm nút “Sync with billing” để fetch subscription hiện tại
- Đặt cache TTL nhằm đảm bảo làm mới thường xuyên
Unexpected mid-cycle charge amount
Unexpected mid-cycle charge amount
Triệu chứng: Khách hàng bối rối trước số tiền bị tính giữa chu kỳ.Nguyên nhân: Sử dụng
prorated_immediately vào cuối chu kỳ thanh toán (xem ví dụ Khoản phí bất ngờ ở trên).Giải pháp:- Luôn sử dụng
previewChangePlantrước khi thực hiện thay đổi - Hiển thị phân tích rõ ràng: “Thêm X seat sẽ tốn $Y hôm nay”
- Chuyển sang
difference_immediatelynếu bạn muốn khoản phí luôn khớp với phần chênh lệch giá
Add-on not appearing in checkout
Add-on not appearing in checkout
Triệu chứng: Seat add-on không khả dụng trong checkout.Nguyên nhân:
- Add-on chưa được đính kèm vào sản phẩm
- Add-on đã được lưu trữ hoặc xóa
- Sản phẩm và add-on không cùng loại tiền tệ
- Xác minh add-on đã được đính kèm trong cài đặt sản phẩm
- Kiểm tra trạng thái add-on trong dashboard Add-Ons
- Đảm bảo loại tiền tệ khớp hoàn toàn
Cannot reduce seats below current usage
Cannot reduce seats below current usage
Triệu chứng: Khách hàng muốn giảm số chỗ nhưng vẫn còn người dùng được gán.Giải pháp:
- Hiển thị những người dùng phải bị xóa trước khi giảm số chỗ
- Triển khai quy trình: Xóa người dùng → Giảm số chỗ
- Cân nhắc thời gian gia hạn trước khi thực thi việc giảm số chỗ
Tài liệu liên quan
Seat-Based Pricing Tutorial
Hướng dẫn triển khai đầy đủ kèm code.
Add-ons
Tìm hiểu chuyên sâu về hệ thống add-on.
Plan Changes & Proration
Xử lý các thay đổi subscription.
Subscription Webhooks
Theo dõi các event của subscription.