SaaS

Thanh toán crypto cho SaaS

Công ty SaaS có thể nhận crypto thế nào: một hóa đơn mỗi kỳ thay cho thẻ lưu sẵn, luồng gia hạn, thanh toán một phần, kế toán bằng đô la và những điều không nên hứa với khách.

Phần mềm thuê bao được xây quanh một thẻ lưu sẵn và bị trừ tiền tự động. Crypto không vận hành như vậy: khách tự gửi từng khoản thanh toán. Nghe có vẻ là vấn đề, nhưng nhiều công ty SaaS bán cho những khách không thể hoặc không muốn trả bằng thẻ, và mô hình hiệu quả rất đơn giản: một hóa đơn cho mỗi kỳ thanh toán. Bài này chỉ cách xây dựng nó, nên kỳ vọng gì và khác gì so với thanh toán thẻ.

Vì sao công ty SaaS thêm crypto

Thẻ là mặc định, nên thêm crypto cần có lý do. Những lý do thường gặp:

  • Khách mà đường thẻ bỏ sót. Các nhóm ở nước nơi bộ xử lý của bạn không hoạt động, hoặc thẻ bị từ chối với phần mềm xuyên biên giới, vẫn có thể trả bằng stablecoin đô la.
  • Hóa đơn năm và hóa đơn lớn. Khách trả hóa đơn năm lớn thường thích chuyển khoản hơn thẻ, và chuyển stablecoin là cuối cùng, không phụ thuộc giờ chốt của ngân hàng.
  • Không có chargeback. Người gửi không thể hoàn tác thanh toán crypto, nên gian lận «friendly fraud» trên gói thuê bao không có thẻ hiện diện không còn là mối lo.
  • Người mua coi trọng quyền riêng tư và người dùng crypto. Công cụ cho lập trình viên, hạ tầng và hosting thường có người dùng giữ stablecoin và thích trả bằng chúng.

Hãy rõ giới hạn: crypto thêm một phương thức thanh toán cho những khách đó. Nó không thay thế thanh toán thẻ cho phần còn lại.

Mô hình: một hóa đơn mỗi kỳ

Thanh toán thẻ trừ tiền từ thẻ lưu sẵn theo lịch. Một khoản thanh toán crypto phải do khách khởi tạo, nên mô hình tự nhiên là hóa đơn trả trước:

  1. Ngay trước khi một kỳ kết thúc, hệ thống của bạn tạo hóa đơn cho kỳ tiếp theo.
  2. Khách nhận hóa đơn kèm liên kết thanh toán, mở trang thanh toán được lưu trữ, chọn tài sản và mạng rồi trả.
  3. Khi thanh toán hoàn tất, hệ thống của bạn đánh dấu hóa đơn đã thanh toán và gia hạn thuê bao.

Không có phương thức thanh toán lưu sẵn và không có trừ tiền tự động. Qvard không cung cấp thanh toán định kỳ hay thuê bao như một sản phẩm; logic gia hạn, nhắc nhở và thời gian gia hạn ân hạn thuộc về bạn. Với nhiều công cụ B2B và cho lập trình viên điều đó là đủ, và gói năm vốn thường được trả theo cách này. Xem hóa đơn crypto cho SaaS B2B để biết chi tiết về phía lập hóa đơn.

Tạo thanh toán cho một hóa đơn

Với mỗi hóa đơn, hãy tạo thanh toán từ backend bằng một POST tới https://api.qvard.com/api/v1/payment. Yêu cầu mang khóa của bạn trong header Authorization: Bearer và một JSON gồm:

  • id: số hóa đơn của bạn, dạng chuỗi. Nó được trả lại trong webhook, nên hãy dùng thứ bạn tra cứu được.
  • price: số tiền bằng đô la Mỹ.
  • paymentSystemId (tùy chọn): một phương thức thanh toán của dự án, nếu bạn muốn trang mở sẵn với một tài sản và mạng đã chọn.

Phản hồi là 201 kèm redirectUrl, địa chỉ của trang thanh toán được lưu trữ. Đặt liên kết đó vào email hóa đơn và vào trang thanh toán của khách. Nếu một yêu cầu được gửi hai lần với cùng id cho cùng phương thức thanh toán, bạn nhận lại khoản thanh toán hiện có, nên tác vụ chạy lại không tạo bản trùng.

Đặt giá gói bằng đô la. Khách trả khoản tương đương bằng tài sản họ chọn, theo tỷ giá cố định trong một giờ.

Luồng gia hạn từ đầu đến cuối

Một lần gia hạn cần hai đoạn mã nhỏ, hiển thị bên dưới: tác vụ tạo hóa đơn và thanh toán, và trình xử lý phản ứng khi đã trả.

Một lịch trình khả thi:

  • Bảy ngày trước khi hết kỳ: tạo hóa đơn và gửi liên kết qua email.
  • Ba ngày trước và vào ngày cuối: gửi nhắc nhở nếu vẫn còn mở.
  • Sau khi hết kỳ: giữ tài khoản hoạt động trong một thời gian ân hạn ngắn do bạn chọn, rồi hạ gói hoặc tạm ngưng. Đây là chính sách của bạn, không phải tính năng của cổng thanh toán.
  • Khi webhook đến: đánh dấu hóa đơn đã thanh toán và gia hạn thuê bao từ cuối kỳ trước, không phải từ ngày thanh toán, để người trả sớm không mất ngày.

Webhook được gửi khi thanh toán hoàn tất. Endpoint của bạn phải trả lời đúng HTTP 200 (nếu không sẽ được thử lại: năm lần trong khoảng sáu phút) và an toàn khi chạy hai lần, việc mà bước markPaidIfOpen trong ví dụ đảm nhận. Xác minh chữ ký X-Qvard-Signature (HMAC-SHA256 bằng khóa bí mật của bạn); xem cách bảo mật webhook thanh toán crypto.

Node.jsrenew.js
// Called by your billing job a few days before a subscription period ends.
async function createRenewalInvoice(sub) {
  const invoice = await db.invoices.create({ subscriptionId: sub.id, amountUsd: sub.planPriceUsd, status: 'open' });

  const res = await fetch('https://api.qvard.com/api/v1/payment', {
    method: 'POST',
    headers: { Authorization: 'Bearer ' + process.env.QVARD_API_KEY, 'Content-Type': 'application/json' },
    body: JSON.stringify({ id: String(invoice.id), price: invoice.amountUsd })
  });
  const { redirectUrl } = await res.json();

  await mailer.send(sub.email, 'Your renewal invoice', 'Pay here: ' + redirectUrl);
}

// Called from the webhook handler when status is "completed".
async function onPaid(invoiceId) {
  const invoice = await db.invoices.markPaidIfOpen(invoiceId); // null if already paid
  if (invoice) await db.subscriptions.extend(invoice.subscriptionId, '1 month');
}

Thanh toán một phần, đổi gói và kế toán

Thanh toán thực tế có các trường hợp biên. Hãy quyết định trước khi ra mắt:

  • Thanh toán một phần. Nếu số tiền đến ít hơn đủ, trạng thái là partial và webhook hoàn tất không được gửi. Giữ hóa đơn mở, cho khách biết còn thiếu bao nhiêu và để họ gửi phần còn lại, hoặc hủy và hoàn tiền. Đừng gia hạn thuê bao với thanh toán một phần.
  • Nâng và hạ gói. Tính theo tỷ lệ là logic của bạn. Cách đơn giản nhất là xuất hóa đơn mới cho phần chênh lệch, hoặc áp dụng thay đổi từ kỳ sau.
  • Hoàn tiền. Thanh toán crypto không thể rút lại, nên hoàn tiền là khoản chuyển bạn tự gửi. Hãy ghi quy tắc vào điều khoản.
  • Kế toán. Ghi nhận doanh thu bằng đô la theo số tiền hóa đơn và giữ id thanh toán cạnh hóa đơn để đối soát. Hãy hỏi cố vấn của bạn về cách xử lý thuế và kế toán đối với khoản thu bằng crypto.

Giữ trạng thái hóa đơn ít và rõ: mở, đã trả, hủy.

Nên nói gì với khách và không nên hứa gì

Mô tả crypto một cách trung thực trên trang giá hoặc thanh toán của bạn:

  • bạn tự trả mỗi kỳ, bằng hóa đơn và liên kết thanh toán;
  • bạn nhận những tài sản và mạng nào (xem các đồng được hỗ trợ), và việc thanh toán phải thực hiện trên mạng đã chọn ở trang thanh toán;
  • quyền truy cập được gia hạn khi thanh toán hoàn tất, không phải khi khách nói đã trả;
  • quy tắc hoàn tiền của bạn trong một dòng.

Đừng hứa gia hạn tự động, ví crypto lưu sẵn hay thử lại kiểu thẻ; không thứ nào có trong mô hình này. Hãy hứa điều hiệu quả: hóa đơn rõ ràng, trang thanh toán và gia hạn ngay khi thanh toán hoàn tất.

Chi phí và hôm nay đã sẵn sàng gì

Không có phí đăng ký cho cổng thanh toán. Hoa hồng riêng cho dự án của bạn và theo trang bảng giá bắt đầu từ 1%, có thể giảm xuống 0,1%. Rút số dư về ví của bạn chỉ tốn phí mạng; rút về tài khoản ngân hàng bằng tiền pháp định không khả dụng.

Việc tích hợp qua API và cần lập trình viên; chưa có plugin thanh toán dựng sẵn, và khách tự quay lại trang của bạn sau khi trả tiền, nên hãy cho họ một trang thanh toán hiển thị trạng thái hóa đơn thực. Xem trường hợp sử dụng SaaS, tài liệu cho nhà phát triển và hóa đơn demo.

FAQ

Qvard có hỗ trợ thanh toán định kỳ hoặc thuê bao tự động không?

Không. Thanh toán crypto do khách gửi mỗi lần. Mô hình hiệu quả là một hóa đơn mỗi kỳ thanh toán, với logic gia hạn, nhắc nhở và thời gian ân hạn ở phía bạn.

Làm sao biết khách đã trả?

Qvard gọi webhook của bạn khi thanh toán hoàn tất, kèm id hóa đơn bạn đã gửi và trạng thái. Chỉ đánh dấu hóa đơn đã trả khi trạng thái là completed và làm trình xử lý an toàn khi chạy hai lần.

Nếu khách chỉ trả một phần hóa đơn thì sao?

Khoản thanh toán nhận trạng thái partial và webhook hoàn tất không được gửi. Giữ hóa đơn mở và yêu cầu phần còn lại, hoặc hủy và hoàn tiền. Đừng gia hạn thuê bao.

Tôi có thể đặt giá gói bằng đô la không?

Có. Giá được đặt bằng đô la Mỹ và khách trả khoản tương đương bằng tài sản và mạng họ chọn, theo tỷ giá cố định trong một giờ.

Bài viết liên quan

Bài viết liên quan