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
| Key | Value | Bắt buộc | Mô tả |
|---|---|---|---|
SiteTenantId | {tenant_id} | Có | ID của công ty/tenant. |
SiteAuthorization | {jwt_token} | Không | Token khách hàng (nếu đã đăng nhập). |
Path Parameters
| Tên | Kiểu | Bắt buộc | Mô tả |
|---|---|---|---|
uuid | string | Có | 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.
- Kiểm tra
addresskhông rỗng vàregion_id> 0. - Tính tổng tiền hàng (
price_sell) và tổng khối lượng của giỏ. - 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. - 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ường | Kiểu | Bắt buộc | Mô tả |
|---|---|---|---|
address | string | Có | Địa chỉ giao hàng. |
region_id | integer | Có | ID Tỉnh/Thành phố. |
sub_region_id | integer | Không | ID 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ường | Kiểu | Mô tả |
|---|---|---|
total_price | integer | Tổng tiền hàng của giỏ (dùng để tính phí). |
total_weight_grams | integer | Tổng khối lượng (gram). |
price_shipping | integer | Phí ship của rate được chọn mặc định (rẻ nhất). |
price_shipping_original | integer | Phí ship gốc của rate được chọn. |
selected_rate_id | integer | ID rate được chọn mặc định (0 nếu không có rate phù hợp). |
selected_shipping_profile_id | integer | ID cấu hình vận chuyển của rate được chọn. |
rates | array | Danh sách rate phù hợp, sắp xếp theo shipping_price tăng dần. |
rates[].id | integer | ID rate (truyền vào shipping_profile_rate_id). |
rates[].name, rates[].code, rates[].description | string | Thông tin hiển thị của rate. |
rates[].eta_hours_from, rates[].eta_hours_to, rates[].eta_note | Thời gian giao dự kiến (giờ) và ghi chú. | |
rates[].shipping_price | integer | Phí ship của rate. |
errors | array | Danh 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ỗi | Mô tả |
|---|---|
error_cart_not_found | Không tìm thấy giỏ hàng. |
error_shipping_address_and_region_required | Thiếu address hoặc region_id. |
error_calculate_shipping_price_response_no_data, error_calculate_shipping_price_request_error | Không tính được phí vận chuyển. |