Chuyển tới nội dung chính

Đơn Hàng & Vòng Đời Thanh Toán (Order & Payment Lifecycle)

Sứ Mệnh Của Bài Học

Bài toán của Vicore F&B (TP-LEMON):
Một đơn hàng E-commerce không chỉ đơn giản là "Khách mua xong rồi thôi". Thực tế phức tạp hơn nhiều:

  1. Khách dùng thẻ tín dụng mua hàng nhưng giao dịch bị ngân hàng treo (Pending).
  2. Thanh toán thành công, nhưng nhà kho báo mất hàng, nhân viên phải hủy đơn và hoàn tiền lại thẻ cho khách.
  3. Giao hàng đến nơi nhưng khách đi vắng, shipper phải hoàn hàng về kho.

Giải pháp:
Medusa sử dụng Order State Machine (Cỗ máy Trạng thái Đơn hàng) để tách bạch hai luồng xử lý hoàn toàn độc lập: Dòng tiền (Payment Flow)Dòng hàng (Fulfillment Flow). Bài học này sẽ giúp bạn hiểu cách quản lý đơn hàng sau khi Checkout.

1. Cấu Trúc Trạng Thái Của Đơn Hàng (Order States)

Khác với các hệ thống cũ thường chỉ có một cột "Status" duy nhất (Ví dụ: Đang chờ, Đang giao, Hoàn tất), Medusa theo dõi Đơn hàng qua 3 khía cạnh (3 trạng thái) diễn ra song song:

1.1. Status (Trạng thái Tổng thể)

Mô tả toàn cảnh vòng đời của Đơn hàng.

  • Pending: Đơn hàng vừa được tạo, đang chờ xử lý các bước tiếp theo.
  • Completed: Đơn hàng đã hoàn tất (Đã nhận đủ tiền VÀ đã giao xong hàng).
  • Canceled: Đơn hàng bị hủy do khách đổi ý hoặc hết hàng.
  • Requires Action: Đang xảy ra lỗi (ví dụ: giao dịch thẻ bị từ chối) cần Admin can thiệp.

1.2. Payment Status (Trạng thái Dòng tiền)

Quản lý ví tiền của khách hàng và công ty.

  • Awaiting: Chờ khách thanh toán (Thường dùng cho COD - Nhận hàng trả tiền).
  • Authorized: Thẻ tín dụng của khách đã bị "đóng băng" khoản tiền, nhưng tiền chưa thực sự chạy về tài khoản công ty.
  • Captured: Công ty chính thức kéo tiền (capture) từ thẻ của khách về tài khoản ngân hàng của Vicore.
  • Refunded: Tiền đã được trả lại cho khách.

1.3. Fulfillment Status (Trạng thái Dòng hàng)

Quản lý hàng hóa vật lý và shipper.

  • Not Fulfilled: Hàng vẫn đang nằm im trong kho.
  • Fulfilled: Hàng đã được bốc ra khỏi kho, đóng gói xong và đang nằm trên tay Shipper.
  • Shipped: Shipper đã xác nhận lấy hàng thành công và đang trên đường giao.
  • Delivered: Khách đã nhận được hàng.
  • Returned: Hàng giao thất bại hoặc khách trả lại đã nhập kho an toàn.

2. Vòng Đời Thanh Toán Chuẩn (Standard Payment Lifecycle)

Khi khách hàng thanh toán qua cổng như Stripe/VNPay, quy trình diễn ra hai bước (Two-step Payment) để đảm bảo an toàn tài chính:

Tại sao phải làm 2 bước (Authorize & Capture)? Nếu hàng trong kho bị chuột cắn hỏng không còn để giao, bạn chỉ cần báo Cancel (Hủy). Số tiền bị đóng băng (Authorized) sẽ tự động nhả về thẻ của khách ngay lập tức mà không phát sinh phí giao dịch (Refund fees) từ ngân hàng.

3. Quản Lý Đơn COD (Nhận hàng trả tiền)

Đối với đơn COD phổ biến ở Việt Nam, Payment Status ban đầu sẽ là Awaiting. Khi Shipper báo Delivered (Giao thành công) và nộp tiền mặt lại cho bưu cục, Admin sẽ vào hệ thống bấm nút Mark as Paid, lúc này Payment Status mới chuyển sang Captured và hoàn tất đơn hàng.

4. Tổng Kết

  • Sự độc lập giữa Payment StatusFulfillment Status giúp Medusa mô phỏng chính xác mọi tình huống thực tế của doanh nghiệp (Ví dụ: Đã thu tiền nhưng chưa giao hàng, hoặc Đã giao hàng nhưng chưa thu được tiền).
  • Nắm vững cơ chế Authorize/Capture giúp công ty tiết kiệm lượng lớn phí giao dịch hoàn trả từ các ngân hàng số.