# Tạo shop theo mô hình redirect

## Mô hình kết nối <a href="#voip-sdk" id="voip-sdk"></a>

<figure><img src="https://4211996220-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F9CUTEBoYNqJaZqxNp3Eh%2Fuploads%2FD7TE8qadUDnqLR2HdEf4%2FChart_Partner_etelecom.png?alt=media&#x26;token=89bf30f3-2b30-43d5-9c52-5d7498603908" alt=""><figcaption></figcaption></figure>

## Kết nối tài khoản shop <a href="#ket-noi-tai-khoan-shop" id="ket-noi-tai-khoan-shop"></a>

Việc kết nối được thực hiện theo mô hình redirect. Đối tác cần chuẩn bị một địa chỉ url để nhận redirect sau khi shop được khởi tạo thành công:

```
export REDIRECT_URL="https://example.com/redirect?token=87209412&shop_id=12414"
```

Quá trình kết nối với shop:

1. Gửi request đến .Shop/AuthorizeShop.
2. Redirect đến địa chỉ url được cung cấp bởi `auth_url`, chờ shop xác thực tài khoản và nhận redirect từ eTelecom.
3. Gửi lại request với `shop_id` nhận được.
4. Lưu `shop_id` và `auth_token` để sử dụng trong các API khác.

```json
curl $BASE_URL.Shop/AuthorizeShop \
    -H "Content-Type: application/json" \
    -H "Authorization: Bearer $API_KEY" \
    -d '{
        "email": "<địa chỉ email>",
        "phone": "<số điện thoại>",
        "name": "<tên>",
        "redirect_url": "'$REDIRECT_URL'"
    }'
```

**Cấu trúc body của request:**

<table><thead><tr><th width="176.33333333333331">Tham số</th><th width="135">Kiểu dữ liệu</th><th>Mô tả</th></tr></thead><tbody><tr><td>email<br><mark style="color:red;">required</mark></td><td>string</td><td>Địa chỉ email tài khoản shop muốn tạo</td></tr><tr><td><p>phone</p><p><mark style="color:red;">required</mark></p></td><td>string</td><td>Số điện thoại tài khoản shop muốn tạo</td></tr><tr><td><p>name</p><p><mark style="color:red;">required</mark></p></td><td>string</td><td>Tên tài khoản shop muốn tạo</td></tr><tr><td>redirect_url<br><mark style="color:red;">required</mark></td><td>string</td><td>Redirect sau khi shop đăng nhập thành công</td></tr></tbody></table>

**200 OK `type=shop_request`**

```json
{
  "code": "ok",
  "msg": "",
  "type": "shop_request",
  "auth_token": "request:Ut8zhsaQp_kwKi2u2gEch_9R3yiQvpFUnB5mE_MRfks",
  "expires_in": 900,
  "auth_url": "https://partner-auth.etelecom.vn/login?token=request:Ut8zhsaQp_kwKi2u2gEch_9R3yiQvpFUnB5mE_MRfks"
}
```

Kết quả này nghĩa là shop sẽ được yêu cầu đăng nhập để xác nhận tài khoản. Kết quả trả về sẽ cung cấp một địa chỉ url bằng field `auth_url` để đối tác redirect shop đến và xác thực tài khoản.

Sau khi thực hiện xác thực tài khoản, eTelecom sẽ redirect về địa chỉ url đối tác cung cấp kèm với `shop_id`, theo cấu trúc: `$REDIRECT_URL?token=<token>&shop_id=<shop_id>`.

### Lấy thông tin `shop_key` <a href="#ket-noi-lan-thu-hai-tro-di" id="ket-noi-lan-thu-hai-tro-di"></a>

Thông tin `shop_id` được trả về trong `redirect_url` khi đối tác tạo shop thành công ở bước kết nối tài khoản shop

```json
# Sử dụng shop_id (bắt buộc)
curl $BASE_URL.Shop/AuthorizeShop \
    -H "Content-Type: application/json" \
    -H "Authorization: Bearer $API_KEY" \
    -d '{
        "shop_id": "<id của shop do eTelecom cung cấp>",
        "redirect_url": "'$REDIRECT_URL'"
    }'
```

Đối tác vẫn cần cung cấp `redirect_url` vì có thể xảy ra tình huống shop cần đăng nhập lại. Lúc này `redirect_url` sẽ được sử dụng để eTelecom redirect về sau khi shop đăng nhập thành công.

**Cấu trúc body của request:**

<table><thead><tr><th width="191">Tham số</th><th width="162">Kiểu dữ liệu</th><th>Mô tả</th></tr></thead><tbody><tr><td><p>shop_id</p><p><mark style="color:red;">required</mark></p></td><td>string</td><td>ID của shop</td></tr><tr><td><p>redirect_url</p><p><mark style="color:red;">required</mark></p></td><td>string</td><td>Redirect sau khi shop đăng nhập thành công</td></tr></tbody></table>

**200 OK `type=shop_key`**

```json
{
  "code": "ok",
  "msg": "",
  "type": "shop_key",
  "auth_token": "shop1052570182707778180:KgGTCsQHSzfKBt8la63c7E6NRqqnD5RVRMrb0aJwa8jZCEbGCmJ7Q01aVwyZeGeR",
  "expires_in": -1
}
```

Kết quả này nghĩa là đối tác đã có thể tạo tổng đài hoặc gửi zns với tư cách shop. Hãy lưu lại `auth_token` ứng với tài khoản của shop để sử dụng tiếp tục, thông tin này chính là `shop_key`

{% hint style="info" %}
**Lưu ý:** cần lưu ý rằng kể cả khi shop đã từng kết nối với eTelecom, nhưng shop vẫn có thể được yêu cầu đăng nhập lại. Tình huống này xảy ra khi shop đã gỡ liên kết với tài khoản của đối tác. Lúc này, response sẽ có `type=shop_request` và `auth_url` được trả về, đối tác cần redirect về địa chỉ này để shop đăng nhập lại.
{% endhint %}

**Cấu trúc thuộc tính dữ liệu trả về:**

<table><thead><tr><th width="248.33333333333331">Tham số</th><th width="259">Kiểu dữ liệu</th><th>Mô tả</th></tr></thead><tbody><tr><td>auth_token</td><td>string</td><td>Mã ủy quyền</td></tr><tr><td>auth_url</td><td>string</td><td>Đường dẫn ủy quyền</td></tr><tr><td>code</td><td>string</td><td>Trạng thái thành công hay thất bại</td></tr><tr><td>expires_in</td><td>int</td><td>Thời gian hết hạn</td></tr><tr><td>meta</td><td>object</td><td>Thuộc tính nếu có</td></tr><tr><td>msg</td><td>string</td><td>Mô tả api</td></tr></tbody></table>

### Kiểm tra `shop_key` <a href="#kiem-tra-shop-key" id="kiem-tra-shop-key"></a>

Để kiểm tra `shop_key` nhận được là đúng, đối tác có thể gửi request đến:

{% openapi src="<https://4211996220-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F9CUTEBoYNqJaZqxNp3Eh%2Fuploads%2FPioshmLP8r8z5BiNIuvH%2Fswagger_partner_v2.json?alt=media&token=cc33298f-4b27-4180-9cdf-89d6e1ed3935>" path="$BASE\_URL.Shop/CurrentShop" method="post" %}
[swagger\_partner\_v2.json](https://4211996220-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F9CUTEBoYNqJaZqxNp3Eh%2Fuploads%2FPioshmLP8r8z5BiNIuvH%2Fswagger_partner_v2.json?alt=media\&token=cc33298f-4b27-4180-9cdf-89d6e1ed3935)
{% endopenapi %}

**Request:**

```json
export API_KEY=<api_key>
curl $BASE_URL.Shop/CurrentShop \
    -H "Content-Type: application/json" \
    -H "Authorization: Bearer $SHOP_KEY" \
    -d '{}'
```

**Response:**

```json
{
    "id": "string",
    "image_url": "string",
    "name": "string",
    "type": "unknown",
    "website": "string"
}
```

**Cấu trúc thuộc tính dữ liệu trả về:**

<table><thead><tr><th width="248.33333333333331">Tham số</th><th width="188">Kiểu dữ liệu</th><th>Mô tả</th></tr></thead><tbody><tr><td>id</td><td>string</td><td>ID của tài khoản</td></tr><tr><td>name</td><td>string</td><td>Tên tài khoản</td></tr><tr><td>type</td><td>string</td><td>Loại tài khoản:<br><mark style="color:red;"><code>Partner</code></mark><br><mark style="color:red;"><code>Shop</code></mark></td></tr></tbody></table>
