CartGiỏ hàng khách hàng

Thêm sản phẩm vào giỏ

Thêm một sản phẩm (biến thể) vào giỏ hàng.

Endpoint

PUT /site/customercarts/{uuid}/additem

Headers

KeyValueBắt buộcMô tả
SiteTenantId{tenant_id}CóID của công ty/tenant.
SiteAuthorization{jwt_token}KhôngToken khách hàng (nếu đã đăng nhập).

Path Parameters

TênKiểuBắt buộcMô tả
uuidstringCóUUID của giỏ hàng (nhận được khi tạo giỏ hàng).

Workflow & Logic

  1. Kiểm tra product_variant_id và uom_quantity là số.
  2. Nếu sản phẩm là combo (type = 5), bắt buộc gửi selections (danh sách biến thể thành phần đã chọn); tổng số lượng chọn phải khớp với cấu hình combo.
  3. Nếu pricing_context_type khác default (VD: flash_sale), hệ thống kiểm tra giới hạn số lượng của chương trình (tính cả số lượng đã có trong giỏ).
  4. Nếu trong giỏ đã có dòng cùng product_variant_id, uom_id, weight_preset_id và cùng ngữ cảnh giá → cộng dồn số lượng; ngược lại thêm dòng mới. Sản phẩm combo luôn tạo dòng mới.
  5. Tính lại giá, khuyến mãi và trả về giỏ hàng.

Quyền truy cập giỏ hàng

Giỏ hàng được tìm theo uuid trong shop hiện tại. Nếu giỏ đã gắn với một khách hàng, khách hàng khác đang đăng nhập sẽ nhận lỗi error_cart_not_found. Khách chưa đăng nhập vẫn dùng được giỏ bằng uuid, vì vậy cần giữ uuid bí mật (VD: lưu trong cookie).

Request Body

{
  "product_variant_id": 101,
  "uom_id": 0,
  "uom_name": "",
  "uom_quantity": 2,
  "selected_options": [
    { "option_id": 1, "option_value_id": 5 }
  ],
  "weight_preset_id": "",
  "pricing_context_type": "default",
  "pricing_context_id": 0
}
TrườngKiểuBắt buộcMô tả
product_variant_idintegerCóID biến thể sản phẩm.
uom_quantityintegerCóSố lượng theo đơn vị tính.
uom_idintegerKhôngID đơn vị tính (0 = đơn vị cơ bản). Xem product_uoms trong Product Object.
uom_namestringKhôngTên đơn vị tính.
selected_optionsarrayKhôngTùy chọn (màu, size...) của biến thể.
weight_sale_mode, weight_preset_id, weight_preset_name, weight_preset_factorKhôngThông tin bán theo cân (với sản phẩm bán theo khối lượng).
pricing_typeintegerKhôngKiểu tính giá.
selectionsarrayVới comboCác biến thể thành phần đã chọn của combo.
pricing_context_typestringKhôngNgữ cảnh giá: default (mặc định), flash_sale, order_window.
pricing_context_idintegerKhôngID chương trình tương ứng (VD: ID flash sale).
pricing_context_namestringKhôngTên chương trình (hiển thị).

Response Schema

HTTP 200 - Thành công

Trả về giỏ hàng đã được tính lại giá và khuyến mãi (các trường cơ bản + details, total_item, total_weight, promotionengine, ...). Xem Customer Cart Object và mô tả details[] tại Lấy báo giá giỏ hàng.

HTTP 422 - Lỗi dữ liệu

Mã lỗiMô tả
error_cart_not_foundKhông tìm thấy giỏ hàng.
error_cart_data_item_missing_propertyThiếu product_variant_id hoặc uom_quantity.
error_combo_requires_selectionsSản phẩm combo nhưng không gửi selections.
error_combo_invalid_quantity, error_combo_selection_invalid_structure, error_combo_selection_variant_invalid, error_combo_selection_quantity_mismatchselections của combo không hợp lệ.
error_additemLưu giỏ hàng thất bại.

Khi vượt giới hạn số lượng của flash sale/khung giờ đặt hàng, API trả mã lỗi tương ứng của chương trình (kèm thông điệp mô tả).

On this page