# Lấy OTP

> Đối tác (affiliate) gọi Lấy OTP cho số điện thoại của chủ shop, GHN gửi OTP qua SMS tới số đó, sau đó đối tác dùng OTP này để tạo shop cho — hoặc tự thêm mình làm nhân viên của — shop của chủ. API này là bước 1: kích hoạt gửi OTP qua SMS.

## Endpoint

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

**Method**: `POST`

## Headers

| Header | Bắt buộc | Mô tả |
| --- | --- | --- |
| `Content-Type` | Có | `application/json` |
| `Token` | Có | Token của bạn (đối tác), do GHN cấp. Tài khoản của bạn phải đang hoạt động — [lấy token](https://developer.ghn.vn/vi/docs/token/get-token.md) |
| `ShopId` | Không | Chọn ngữ cảnh shop của bạn; nếu bỏ trống, shop mặc định của tài khoản bạn được dùng. Shop được chọn phải đang hoạt động và thuộc về bạn, nếu không request sẽ bị từ chối |

## Tham số

- **phone** (String): SĐT của chủ shop (khách hàng của bạn) sẽ nhận OTP qua SMS. Phải đã thuộc một tài khoản GHN đã đăng ký, và không được là tài khoản của chính bạn
- **language** (String): Ngôn ngữ của `code_message_value` trong response lỗi. Mặc định `vi`.<br>`vi`: Tiếng Việt<br>`en`: Tiếng Anh

## Ví dụ Request

```bash
curl -X POST https://dev-online-gateway.ghn.vn/shiip/public-api/v2/shop/affiliateOTP \
  -H "Token: 5c1d8a9e-2f4b-11ed-..." \
  -H "ShopId: 92837" \
  -H "Content-Type: application/json" \
  -d '{
    "phone": "0987654321"
  }'
```

## Response

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

OTP qua SMS được gửi tới số điện thoại lưu trên tài khoản GHN của chủ shop (thường trùng với số bạn gửi lên).

```json
{
  "code": 200,
  "message": "Success",
  "data": {
    "TTL": 600
  }
}
```

### 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.TTL` | Int | Thời gian sống của OTP, tính bằng giây. Hãy gửi OTP sang bước tiếp theo trước khi hết hạn |

### Lỗi — thiếu phone (HTTP 400)

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

```json
{
  "code": 400,
  "message": "Key: 'myRequest.Phone' Error:Field validation for 'Phone' failed on the 'required' tag",
  "data": null,
  "code_message": "USER_ERR_COMMON",
  "code_message_value": "Sai thông tin đầu vào. Vui lòng thử lại."
}
```

## Bảng mã lỗi

| Điều kiện | HTTP | code_message |
| --- | --- | --- |
| Thiếu `phone` hoặc dữ liệu không hợp lệ | 400 | `USER_ERR_COMMON` |
| Số điện thoại là tài khoản của chính bạn (`Không thể tự liên kết tài khoản của chính mình`) | 400 | `USER_ERR_COMMON` |
| Số điện thoại chưa đăng ký tài khoản GHN (`SDT chưa được đăng ký tài khoản GHN`) | 400 | `USER_ERR_COMMON` |
| Lỗi hệ thống (ví dụ gửi OTP SMS thất bại) | 500 | `SERVER_ERROR_COMMON` |
