CartGiỏ hàng khách hàng

Tính phí vận chuyển

Lấy danh sách phương án vận chuyển (rate) và phí ship cho giỏ hàng theo địa chỉ giao hàng.

Endpoint

POST /site/customercarts/{uuid}/checkshippingprice

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

Dùng ở bước checkout để hiển thị các phương án vận chuyển cho khách chọn. ID của rate được chọn truyền vào shipping_profile_rate_id khi gọi Lấy báo giá giỏ hàng và Checkout.

  1. Kiểm tra address không rỗng và region_id > 0.
  2. Tính tổng tiền hàng (price_sell) và tổng khối lượng của giỏ.
  3. Tìm các cấu hình vận chuyển đang bật của shop áp dụng cho khu vực (region_id, sub_region_id), tính phí từng rate theo giá cố định, bậc giá trị đơn hoặc bậc khối lượng.
  4. Sắp xếp các rate theo phí tăng dần; rate rẻ nhất được chọn mặc định (selected_rate_id).

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

{
  "address": "12 Nguyễn Huệ, P. Bến Nghé",
  "region_id": 1,
  "sub_region_id": 10
}
TrườngKiểuBắt buộcMô tả
addressstringCóĐịa chỉ giao hàng.
region_idintegerCóID Tỉnh/Thành phố.
sub_region_idintegerKhôngID Quận/Huyện.

Response Schema

HTTP 200 - Thành công

{
  "total_price": 350000,
  "total_weight_grams": 1200,
  "distance_meters": 0,
  "address": "12 Nguyễn Huệ, P. Bến Nghé",
  "region_id": 1,
  "sub_region_id": 10,
  "price_shipping_original": 30000,
  "price_shipping": 30000,
  "note": "",
  "selected_rate_id": 5,
  "selected_shipping_profile_id": 2,
  "rates": [
    {
      "shipping_profile_id": 2,
      "shipping_profile_name": "Giao hàng tiêu chuẩn",
      "id": 5,
      "name": "Nội thành",
      "code": "NT",
      "description": "",
      "eta_hours_from": 24,
      "eta_hours_to": 48,
      "eta_note": "",
      "shipping_carrier_id_list": [],
      "shipping_price_original": 30000,
      "shipping_price": 30000,
      "shipping_price_base": 30000,
      "shipping_price_surcharge": 0,
      "surcharge_details": []
    }
  ],
  "date_created": 1740300000,
  "errors": []
}
TrườngKiểuMô tả
total_priceintegerTổng tiền hàng của giỏ (dùng để tính phí).
total_weight_gramsintegerTổng khối lượng (gram).
price_shippingintegerPhí ship của rate được chọn mặc định (rẻ nhất).
price_shipping_originalintegerPhí ship gốc của rate được chọn.
selected_rate_idintegerID rate được chọn mặc định (0 nếu không có rate phù hợp).
selected_shipping_profile_idintegerID cấu hình vận chuyển của rate được chọn.
ratesarrayDanh sách rate phù hợp, sắp xếp theo shipping_price tăng dần.
rates[].idintegerID rate (truyền vào shipping_profile_rate_id).
rates[].name, rates[].code, rates[].descriptionstringThông tin hiển thị của rate.
rates[].eta_hours_from, rates[].eta_hours_to, rates[].eta_noteThời gian giao dự kiến (giờ) và ghi chú.
rates[].shipping_priceintegerPhí ship của rate.
errorsarrayDanh sách lỗi (nếu có).

Nếu không có rate phù hợp với khu vực, rates rỗng và selected_rate_id = 0.

HTTP 422 - Lỗi dữ liệu

Mã lỗiMô tả
error_cart_not_foundKhông tìm thấy giỏ hàng.
error_shipping_address_and_region_requiredThiếu address hoặc region_id.
error_calculate_shipping_price_response_no_data, error_calculate_shipping_price_request_errorKhông tính được phí vận chuyển.

On this page