# In đơn

## Endpoint

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

**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ố

- **order_codes** (String[]): Danh sách mã vận đơn GHN đưa vào token in. **Tối đa 10,000** mã mỗi request. Mỗi mã phải là đơn tồn tại và thuộc tài khoản của bạn — **tất-cả-hoặc-không**: chỉ một mã sai hoặc không thuộc về bạn là toàn bộ request thất bại và không token nào được tạo
- **item_index** (Int[]): Với đơn nhiều sản phẩm: vị trí (đánh số từ 0) của các sản phẩm cần in. Mặc định: in tất cả

## Ví dụ Request

```bash
curl -X POST https://dev-online-gateway.ghn.vn/shiip/public-api/v2/a5/gen-token \
  -H "Token: 5c1d8a9e-2f4b-11ed-..." \
  -H "ShopId: 92837" \
  -H "Content-Type: application/json" \
  -d '{
    "order_codes": ["LADT8L", "LADFYR"]
  }'
```

## Response

### 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": {
    "token": "1b744cae-8005-11f1-b50f-ba37616041ec"
  }
}
```

### 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.token` | String | Token in cho các đơn đã yêu cầu. Gắn token vào URL in bên dưới để mở nhãn vận đơn |

### Cách dùng token

Mở nhãn in bằng cách gắn token vào một trong các URL sau (trang in do hệ thống in của GHN phục vụ). Chọn khổ giấy bạn cần:

| Khổ | URL Production |
| --- | --- |
| A5 | `https://online-gateway.ghn.vn/a5/public-api/printA5?token=<token>` |
| 80×80 mm | `https://online-gateway.ghn.vn/a5/public-api/print80x80?token=<token>` |
| 52×70 mm | `https://online-gateway.ghn.vn/a5/public-api/print52x70?token=<token>` |

Trên môi trường Staging, dùng cùng đường dẫn trên `https://dev-online-gateway.ghn.vn`. Token hết hạn sau khoảng **30 phút** — hãy tạo ngay trước khi in.

### Lỗi — đơn không tồn tại / không thuộc về bạn (HTTP 400)

_Lấy từ một lần gọi thật trên môi trường Staging (mã đơn không tồn tại)._ Tất-cả-hoặc-không: một mã sai là toàn bộ request bị hủy với `data: null` — không token nào được tạo.

```json
{
  "code": 400,
  "message": "Lỗi gọi API: corev2_tenant_order_detail - Đơn hàng không tồn tại",
  "data": null,
  "code_message": "ORDER_NOT_FOUND",
  "code_message_value": "Không tìm thấy thông tin đơn hàng. Vui lòng thử lại sau."
}
```

## Bảng mã lỗi

| code_message | HTTP | Khi nào |
| --- | --- | --- |
| `ORDER_NOT_FOUND` | 400 | Một mã đơn không tồn tại hoặc không thuộc tài khoản của bạn. Toàn bộ lô bị hủy; không token nào được tạo |
| `CLIENT_NOT_OWNER_OF_SHOP` | 400 | Một đơn thuộc shop mà tài khoản của bạn không phải thành viên |
| Vượt giới hạn (`Not support over 10000 orders`) | 400 | Quá 10,000 mã trong một request |
| `SERVER_ERROR_COMMON` | 500 | Lỗi hệ thống |
