# Xem trước đơn

> Xem trước là **bản chạy thử của [Tạo đơn](https://developer.ghn.vn/vi/docs/order/create.md)**: cùng request body, cùng logic kiểm tra, cùng cách tính phí/thời gian giao — nhưng **không tạo đơn nào**. Dùng để hiển thị phí vận chuyển và thời gian giao dự kiến trước khi khách xác nhận.

Shares the request contract with [order/create](https://developer.ghn.vn/vi/docs/order/create.md)

## Endpoint

| Môi trường | URL |
| --- | --- |
| Production | `https://online-gateway.ghn.vn/shiip/public-api/v2/shipping-order/preview` |
| Staging | `https://dev-online-gateway.ghn.vn/shiip/public-api/v2/shipping-order/preview` |

**Method**: `POST`

## Headers

| Header | Bắt buộc | Mô tả |
| --- | --- | --- |
| `Content-Type` | Có | `application/json` |
| `Token` | Có | Token của shop (do GHN cấp) — [lấy token](https://developer.ghn.vn/vi/docs/token/get-token.md) |
| `ShopId` | Có | Shop ID (số nguyên) |

## Tham số

**Giống hệt [Tạo đơn](https://developer.ghn.vn/vi/docs/order/create.md#tham-so)** — cùng các trường, cùng quy tắc bắt buộc, cùng giá trị mặc định. Xem trang đó để có danh sách đầy đủ.

## Ví dụ Request

```bash
curl -X POST https://dev-online-gateway.ghn.vn/shiip/public-api/v2/shipping-order/preview \
  -H "Token: 5c1d8a9e-2f4b-11ed-..." \
  -H "ShopId: 92837" \
  -H "Content-Type: application/json" \
  -d '{
    "payment_type_id": 2,
    "required_note": "CHOXEMHANGKHONGTHU",
    "to_name": "Trần Minh Anh",
    "to_phone": "0987654321",
    "to_address": "72 Lê Thánh Tôn, P. Bến Nghé, Quận 1, TP. Hồ Chí Minh",
    "to_ward_name": "Phường Bến Nghé",
    "to_district_name": "Quận 1",
    "to_province_name": "TP. Hồ Chí Minh",
    "weight": 600,
    "length": 25,
    "width": 20,
    "height": 8,
    "service_type_id": 2,
    "content": "Áo thun unisex GHN - 2 chiếc"
  }'
```

## Response

Cùng cấu trúc với Tạo đơn, khác ở hai điểm: `order_code` **rỗng** (không tạo gì) và **không có** trường `message_display`.

### Thành công (HTTP 200)

_Lấy từ một lần gọi thật trên môi trường Staging._

```json
{
  "code": 200,
  "message": "Success",
  "data": {
    "order_code": "",
    "fee": {
      "main_service": 20900,
      "insurance": 0,
      "cod_fee": 0,
      "station_do": 0,
      "station_pu": 0,
      "return": 0,
      "r2s": 0,
      "return_again": 0,
      "coupon": 0,
      "document_return": 0,
      "double_check": 0,
      "double_check_deliver": 0,
      "pick_remote_areas_fee": 0,
      "deliver_remote_areas_fee": 0,
      "pick_remote_areas_fee_return": 0,
      "deliver_remote_areas_fee_return": 0,
      "cod_failed_fee": 0,
      "change_to_address_fee": 0,
      "change_return_address_fee": 0
    },
    "total_fee": 20900,
    "expected_delivery_time": "2026-07-16T16:59:59Z"
  }
}
```

### Các trường Response

| Trường | Kiểu | Mô tả |
| --- | --- | --- |
| `code` | Int | Mã HTTP (`200` nếu thành công) |
| `message` | String | Thông báo kết quả (`Success`) |
| `data.order_code` | String | Luôn rỗng với xem trước — không đơn nào được tạo |
| `data.fee` | Object | Chi tiết phí (VND) — cùng các thành phần như Tạo đơn |
| `data.total_fee` | Int | Tổng phí (VND) |
| `data.expected_delivery_time` | String | Thời gian giao dự kiến (ISO 8601) |

## Bảng mã lỗi

Giống [Tạo đơn](https://developer.ghn.vn/vi/docs/order/create.md#bang-ma-loi) — các lỗi xác thực, số điện thoại, quyền sở hữu và định tuyến đều hoạt động như nhau.
