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

Giỏ hàng & Vòng Đời Checkout (Fundamentals)

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

Bài toán của Vicore F&B (TP-LEMON):
Một khách hàng thêm 3 chai TP-LEMON 500ml vào giỏ hàng. Khách nhập mã giảm giá 10%, chọn giao hàng Hỏa tốc nội thành (phí 30k), và chọn thanh toán bằng thẻ tín dụng. Ngay trước khi bấm nút "Thanh toán", khách sực nhớ ra và sửa giỏ hàng thành 5 chai. Hệ thống phải tự động tính lại toàn bộ thuế, phí vận chuyển và kiểm tra xem mã giảm giá còn hợp lệ không.

Giải pháp:
Giỏ hàng (Cart) không chỉ là mảng lưu trữ sản phẩm, nó là cỗ máy tính toán thời gian thực mạnh mẽ nhất của Medusa. Bài học này sẽ mổ xẻ vòng đời từ lúc khởi tạo giỏ hàng cho đến khi hoàn tất quá trình Checkout để biến thành một Đơn hàng (Order).

1. Giỏ Hàng (Cart) Là Gì?

Trong Medusa, Cart là một thực thể tạm thời (temporary entity). Nhiệm vụ duy nhất của nó là thu thập mọi thông tin cần thiết từ người dùng, tính toán tổng tiền, và chuyển hóa (transform) thành Đơn hàng (Order) khi thanh toán thành công.

Một Cart chứa các thành phần sau:

  • Line Items: Danh sách các Biến thể sản phẩm (Variants) và Số lượng.
  • Region: Quốc gia/Khu vực tính thuế và loại Tiền tệ (VND/USD).
  • Shipping Address & Billing Address: Thông tin nhận hàng và xuất hóa đơn.
  • Shipping Method: Phương thức giao hàng khách chọn (Tiêu chuẩn, Hỏa tốc).
  • Promotions/Discounts: Các mã giảm giá đang áp dụng.
  • Payment Sessions: Các phiên kết nối tạm thời với cổng thanh toán (Stripe, VNPay).

2. Vòng Đời Checkout (Checkout Flow)

Để biến một Cart thành Order, nó phải trải qua một quy trình Checkout tiêu chuẩn gồm các bước tuần tự. Nếu khách hàng quay lại bước trước để sửa dữ liệu, hệ thống sẽ tự động vô hiệu hóa các bước sau để tính toán lại.

3. Tính Toán Thời Gian Thực (Real-time Calculation)

Mỗi khi có một sự thay đổi nhỏ trong Cart (ví dụ: Tăng số lượng từ 3 lên 5 chai), Medusa sẽ kích hoạt Refresh logic:

  1. Kiểm tra Tồn kho: Đảm bảo kho vẫn còn đủ 5 chai TP-LEMON.
  2. Tính lại Line Items: Lấy (Base Price * 5) hoặc (Giá Price List B2B * 5).
  3. Cập nhật Khuyến mãi: Kiểm tra xem số lượng 5 chai có kích hoạt chương trình freeship hay không.
  4. Tính lại Phí vận chuyển: Nếu 5 chai vượt quá trọng lượng quy định, cước phí có thể tăng lên.
  5. Tính lại Thuế: Áp dụng thuế 10% VAT trên tổng giá trị mới.
  6. Xóa bỏ Payment Session cũ: Bắt buộc khách hàng phải khởi tạo lại phiên thanh toán với tổng số tiền mới nhất.

4. Tổng Kết

  • Cart là một thực thể trung gian thu thập dữ liệu và xử lý tính toán cực kỳ phức tạp.
  • Checkout Flow là một quy trình nghiêm ngặt nhiều bước. Việc thay đổi dữ liệu ở bước đầu (như đổi địa chỉ) sẽ tự động làm mới (invalidate) các bước sau (như phí ship và thuế) để đảm bảo tính chính xác của hóa đơn tài chính.