Docs Rivya AI

Hướng dẫn thanh toán và checkout trong Rivya

Hiểu checkout gói và credit pack trong Rivya, redirect Stripe, cầu nối /payment, webhooks, cập nhật billing và kiểm tra sau khi mua.

Đánh giá lần cuối vào 2026/04/28

Dùng hướng dẫn payment checkout này khi bạn cần hiểu điều gì xảy ra sau khi mua một plan hoặc credit pack trong Rivya.

Điểm mọi người thường hiểu sai về payment trong Rivya là:

Stripe hoàn tất payment không phải là bước cuối. Sản phẩm vẫn phải bắt kịp và phản ánh thay đổi đó đúng cách.

Đó là lý do checkout flow không kết thúc trên Stripe, và cũng không kết thúc ngay khi trình duyệt quay lại.

Payment flow có ba giai đoạn thật

Hiện tại, checkout dễ hiểu hơn nếu bạn tách thành ba giai đoạn:

  1. Rivya tạo checkout session
  2. người dùng hoàn tất Stripe Checkout
  3. Rivya chờ trạng thái sản phẩm trở nên đáng tin cậy lại

Giai đoạn thứ ba chính là lý do /payment tồn tại.

Checkout có thể bắt đầu từ đâu

Checkout hiện bắt đầu từ những nơi đã khớp với ý định của người dùng:

  • Pricing
  • /settings/billing
  • /settings/credits

Hai dạng mua chính là:

  • checkout subscription plan
  • checkout credit-pack một lần

Đó là các quyết định thương mại khác nhau, nhưng vẫn hội tụ về cùng một đường xác nhận.

Plan checkout và credit-pack checkout giống nhau, nhưng không phải một

Plan checkout có dạng subscription.

Credit-pack checkout giống một lần nạp thêm vào wallet.

Sự khác biệt này quan trọng vì sau payment, Rivya cần biết nên refresh:

  • trạng thái subscription
  • hay trạng thái wallet

Đó là lý do cùng một khoảnh khắc Stripe success vẫn có thể đưa bạn trở lại các bề mặt sản phẩm khác nhau sau đó.

Vì sao /payment tồn tại

/payment không phải là trang receipt theo nghĩa thông thường.

Nó là một cầu nối xử lý.

Nhiệm vụ của nó là:

  • đọc Stripe session_id
  • kiểm tra bản ghi payment phía sản phẩm đã settled chưa
  • tiếp tục polling trong một khoảng ngắn nếu cần
  • chỉ sau đó mới redirect bạn về đúng phần của app

Vì vậy nó giống một trang đồng bộ trạng thái hơn là một trang nội dung.

Khi nào payment "thật sự xong" từ góc nhìn sản phẩm?

Từ góc nhìn người dùng, payment có vẻ hoàn tất khi Stripe báo thành công.

Từ góc nhìn sản phẩm, payment chỉ thật sự hoàn tất khi trạng thái tài khoản đã cập nhật rõ trong Rivya.

Điều đó thường có nghĩa là:

  • bản ghi payment được đánh dấu paid hoặc completed
  • hiệu ứng subscription hoặc wallet đã hiển thị
  • bạn có thể quay lại billing hoặc credits mà không thấy trạng thái cũ

Đây là lý do thật sự khiến sản phẩm chờ ở /payment thay vì lập tức ném người dùng trở lại app.

Vì sao webhooks vẫn quan trọng dù /payment có polling

/payment không thay thế Stripe webhooks.

Webhooks vẫn là thứ cập nhật trạng thái backend bền vững.

Trang /payment tồn tại để trải nghiệm có thể chờ đến khi trạng thái đó được phản ánh đủ đáng tin trước khi redirect.

Đó là khác biệt giữa:

  • "Stripe đã xử lý một việc gì đó"
  • và "Rivya hiện đã phản ánh rõ thay đổi đó"

Bạn đi đâu sau payment

Đường quay lại được cố ý gắn với thứ vừa thay đổi.

Nếu giao dịch liên quan đến subscription, bạn thường được đưa về billing.

Nếu giao dịch là credit pack, bạn thường được đưa về credits.

Đó không phải routing trang trí. Nó khớp với câu hỏi người dùng thường có ngay sau khi trả tiền:

  • plan của tôi đã cập nhật chưa?
  • hay wallet của tôi đã cập nhật chưa?

Timeout hoặc failure thật sự có nghĩa là gì

Nếu /payment timeout hoặc fail, điều đó không tự động có nghĩa là payment đã biến mất.

Thường hơn, nó có nghĩa là một trong các việc này:

  • bản ghi payment phía sản phẩm chưa settled
  • redirect đang chờ trạng thái vẫn còn đang bắt kịp
  • trang account vẫn sẽ trông cũ nếu người dùng bị redirect quá sớm

Đó là lý do trạng thái timeout tốt hơn một trạng thái fake success. Nó nói rõ với người dùng rằng phần xác nhận sản phẩm vẫn chưa hoàn tất.

Cách tốt nhất để kiểm tra payment đã vào thật chưa

Sau checkout, đường xác minh sạch nhất là:

  1. để /payment chạy hết flow của nó
  2. kiểm tra /settings/billing nếu giao dịch là plan
  3. kiểm tra /settings/credits nếu giao dịch là pack
  4. kiểm tra Hướng dẫn trung tâm thông báo Rivya nếu tài khoản vẫn có vẻ chưa đồng bộ

Cách này thường tốt hơn việc refresh ngẫu nhiên nhiều trang rồi đoán.

Payment cũng trở thành ký ức của tài khoản

Payment không chỉ là một hành động checkout. Nó cũng trở thành một phần của account history qua các sự kiện bền vững như:

  • subscription started
  • subscription renewed
  • payment failed
  • credit package added

Đó là lý do notifications cũng quan trọng ở đây. Đóng tab Stripe không phải là kết thúc câu chuyện của tài khoản.

Một mental model dễ nhớ hơn

Cách đơn giản nhất để nghĩ về checkout trong Rivya là:

  • Stripe xử lý chuyển động tiền
  • /payment xử lý việc quay lại phía sản phẩm

Nếu giữ hai vai trò này tách biệt, toàn bộ flow sẽ dễ suy luận hơn.

Đọc tiếp

Checklist trạng thái checkout

Khi một giao dịch mua trông chưa xong hoặc gây nhầm lẫn, hãy kiểm tra:

  • Xác nhận Checkout bắt đầu từ đâu: public pricing, billing settings hay credits settings.
  • Kiểm tra Stripe đã hoàn tất payment và đưa người dùng về /payment chưa.
  • Chờ Rivya refresh trạng thái subscription, pack, invoice và wallet trước khi bắt đầu tác vụ trả phí khác.
  • Dùng trang billing cho subscriptions và trang credits cho packs hoặc wallet history.
  • Đừng xem browser redirect là bằng chứng rằng webhook và trạng thái account đã settled.

Kiểm tra lại trước khi thanh toán lại

Hãy kiểm tra lại trước khi retry payment nếu người dùng thấy plan cũ, thiếu credits, nhiều cửa sổ Checkout trùng nhau, payment failed hoặc receipt Stripe thành công nhưng Rivya vẫn chưa phản ánh.

Mục lục