~/VibeHandbook
PDF miễn phí

Chương 16 · 04

Kết Nối Thanh Toán

Nếu bạn muốn được trả tiền, con đường tiêu chuẩn cho một người xây dựng đơn độc là Stripe (hoặc Lemon Squeezy / Paddle nếu bạn muốn họ xử lý thuế bán hàng giúp bạn — với tư cách là bên bán hàng chính danh (), họ lấy phần trăm lớn hơn nhưng khiến nỗi đau đầu về thuế biến mất). Các cơ chế này lặp đi lặp lại và được ghi chép đầy đủ, khiến chúng trở thành lý tưởng để giao phó. Những mảnh ghép bạn cần:

  • Một luồng thanh toán (checkout) — Stripe Checkout là nhanh nhất; nó đưa cho bạn một trang thanh toán được host sẵn để bạn không bao giờ phải chạm vào chi tiết thẻ thô.
  • Hãy tưởng tượng một giống như công ty thanh toán gọi điện cho ứng dụng của bạn ngay khi một giao dịch bán hàng hoàn tất, thay vì ứng dụng của bạn phải liên tục hỏi "đã xong chưa?". Một webhook chính xác là như vậy: một điểm cuối ( — một trên máy chủ của bạn) mà nhà cung cấp thanh toán gọi để ứng dụng của bạn biết khi nào một khoản thanh toán thực sự thành công. Đây là phần mà người mới thường bỏ qua rồi sau đó thắc mắc tại sao đơn hàng không bao giờ được hoàn tất. Việc chuyển hướng (redirect) quay lại trang của bạn có thể bị đóng, chặn, hoặc giả mạo; webhook mới là nguồn sự thật duy nhất giữa máy chủ với máy chủ. Đừng bao giờ chỉ tin vào redirect; hãy tin vào webhook.
  • Một cách để lưu trữ quyền sử dụng (entitlements) — đánh dấu người dùng đã thanh toán trong cơ sở dữ liệu của bạn, để khi tải lại trang hoặc dùng thiết bị mới, họ vẫn thấy những gì họ đã mua.

Điểm mấu chốt là bạn tin vào mũi tên nào. Việc chuyển hướng người dùng quay lại trang của bạn có thể bị mất hoặc giả mạo; webhook mới là đường dây máy chủ-với-máy chủ thực sự mở khóa sản phẩm:

 ┌──────┐  1. click Buy   ┌───────────┐
 │ USER │────────────────▶│  YOUR APP │
 └──────┘                 └─────┬─────┘
    ▲                           │ 2. create checkout session
    │                           ▼
    │                    ┌─────────────┐
    │  3. pay on hosted  │   STRIPE    │
    └───────────────────▶│   Checkout  │
       (card details)    └──────┬──────┘
                                │
          ┌─────────────────────┴─────────────────────┐
          │ 4a. redirect back        4b. WEBHOOK call  │
          │     (can be lost/faked)      (server→server,│
          ▼                              signed, trusted)▼
   ┌──────────────┐                          ┌────────────────────┐
   │ thank-you    │   ✗ do NOT unlock here   │ YOUR APP /webhook   │
   │ page (UI only)│                         │ verify signature →  │
   └──────────────┘                          │ mark user PAID  ✓   │
                                             └────────────────────┘

Hãy nhờ AI dựng khung cả ba phần và giải thích việc xác minh chữ ký webhook, vì đó là bước duy nhất nhạy cảm về bảo mật — nếu thiếu nó, bất kỳ ai tìm được URL webhook của bạn cũng có thể giả mạo một sự kiện "thanh toán thành công" và mở khóa sản phẩm của bạn miễn phí. Hãy thử nghiệm mọi thứ trong chế độ thử nghiệm (test mode) của Stripe với các số thẻ thử nghiệm của họ (4242 4242 4242 4242 là con số nổi tiếng nhất) trước khi chuyển sang khóa thật, và dùng Stripe để chuyển tiếp các sự kiện webhook về máy cục bộ của bạn để bạn có thể xem chúng kích hoạt. Đừng bỏ qua buổi tổng duyệt ở chế độ thử nghiệm. Khoản tiền thật đầu tiên đi qua ứng dụng của bạn nên là một giao dịch mà bạn đã tận mắt thấy hoạt động cả chục lần rồi.

Muốn bản ngoại tuyến?

Tải trọn cuốn sách dưới dạng PDF hoặc EPUB — miễn phí.