# Tích hợp API (/vi/in-store/integration/backend_integration)





Để merchant của bạn có thể sử dụng Tapaya Accept SDK, backend của bạn đăng ký từng merchant và yêu cầu một token
đăng nhập ngắn hạn cho mỗi phiên SDK. Cả hai lệnh gọi đều dùng Server Secret Token của bạn; xem
[xác thực Platform API](/platform-api#authentication) để tạo token này.

Onboarding merchant và lấy dữ liệu thanh toán hoạt động giống nhau cho mọi sản phẩm Tapaya và được mô tả trong
mục Tổng quan dùng chung: [API onboarding merchant](/platform-api/merchant_onboarding) và
[Báo cáo và thanh toán](/platform-api/reporting).

<Callout title="Định tuyến theo môi trường" type="info">
  Accept SDK tự động định tuyến các yêu cầu dựa trên cách SDK được khởi tạo:

  * **Sandbox (mặc định):** Kết nối tới môi trường sandbox tại `https://api.sandbox.tapaya.com`.
  * **Production:** Kết nối tới môi trường production tại `https://api.tapaya.com`.
</Callout>

## Xác thực merchant (tích hợp qua Accept SDK) [#merchant-authentication-accept-sdk-integrations]

<Callout title="Chỉ dành cho tích hợp qua Accept SDK" type="info">
  Bỏ qua phần này nếu bạn điều khiển trực tiếp ứng dụng **Tapaya Terminal** (intent/deeplink, không nhúng SDK);
  khi đó tài khoản đang đăng nhập trong Tapaya Terminal là bên bán chịu trách nhiệm giao dịch (merchant of record),
  và backend của bạn không bao giờ xác thực phiên merchant. Xem [Tích hợp không cần SDK](./card_terminal#integrate-without-the-sdk).
</Callout>

Để merchant của bạn có thể sử dụng Tapaya Accept SDK, bạn phải triển khai các endpoint sau trên backend của mình.

<div className="fd-steps [&_h3]:fd-step">
  ### Đăng ký merchant mới [#register-a-new-merchant]

  Trước khi một merchant có thể sử dụng SDK, merchant đó phải được đăng ký trong hệ thống Tapaya. Việc này thường được thực hiện khi người dùng
  đăng ký sử dụng dịch vụ của bạn. Bạn chỉ cần đăng ký merchant một lần. Có thể đăng ký trong Tapaya Platform
  UI hoặc qua API.

  **Endpoint:** `POST /merchant/auth/register`

  <CodeBlockTabs defaultValue="curl" groupId="http-client">
    <CodeBlockTabsList>
      <CodeBlockTabsTrigger value="curl">
        cURL
      </CodeBlockTabsTrigger>
    </CodeBlockTabsList>

    <CodeBlockTab value="curl">
      ```bash
      curl -X 'POST' 'https://api.tapaya.com/merchant/auth/register' \
      -H 'Content-Type: application/json' \
      -H 'Authorization: REPLACE_ME' \
      -d '{
              "merchantToken": "unique_merchant_id_from_your_db",
              "merchantName": "Acme Corp",
              "email": "admin@acme.com"
          }'
      ```
    </CodeBlockTab>
  </CodeBlockTabs>

  **Tham số:**

  | Trường                                                                  | Kiểu     | Bắt buộc | Mô tả                                                                                              |
  | ----------------------------------------------------------------------- | -------- | -------- | -------------------------------------------------------------------------------------------------- |
  | `merchantToken`                                                         | `string` |          | Định danh duy nhất và ổn định từ hệ thống của bạn (ví dụ: ID trong cơ sở dữ liệu) dùng để xác định |
  | merchant. Nếu không cung cấp, một token ngẫu nhiên sẽ được tạo cho bạn. |          |          |                                                                                                    |
  | `merchantName`                                                          | `string` |          | Tên dễ đọc để nhận diện merchant trong bảng điều khiển và báo cáo. Nếu không cung cấp,             |
  | mặc định là `merchantToken`.                                            |          |          |                                                                                                    |
  | `email`                                                                 | `string` | ✓        | Email quản trị viên của merchant, dùng để đăng nhập và cho các liên lạc quan trọng.                |

  **Phản hồi:**

  | Mã    | Mô tả                                |
  | ----- | ------------------------------------ |
  | `200` | Đăng ký merchant thành công          |
  | `400` | Lỗi kiểm tra tính hợp lệ của yêu cầu |
  | `401` | Không được phép truy cập             |
  | `409` | Xung đột: merchant đã được đăng ký   |

  **Nội dung phản hồi:**

  ```json
  {
      "merchantToken": "unique_merchant_id_from_your_db"
  }
  ```

  ### Tạo token đăng nhập [#generate-login-token]

  Để một thiết bị di động có thể khởi tạo SDK cho một merchant cụ thể, bạn phải tạo một token đăng nhập ngắn hạn.
  Ứng dụng di động của bạn sẽ yêu cầu token này từ backend của bạn, và backend sẽ yêu cầu nó từ Tapaya. Bạn cần một token
  mới mỗi lần SDK được [khởi tạo](./sdk_integration#initialization).

  **Endpoint:** `POST /merchant/auth/login`

  <CodeBlockTabs defaultValue="curl" groupId="http-client">
    <CodeBlockTabsList>
      <CodeBlockTabsTrigger value="curl">
        cURL
      </CodeBlockTabsTrigger>
    </CodeBlockTabsList>

    <CodeBlockTab value="curl">
      ```bash
      curl -X 'POST' 'https://api.tapaya.com/merchant/auth/login' \
      -H 'Content-Type: application/json' \
      -H 'Authorization: REPLACE_ME' \
      -d '{
              "merchantToken": "unique_merchant_id_from_your_db",
              "allowOnboarding": true,
              "employeeEmail": "john@acme.com"
          }'
      ```
    </CodeBlockTab>
  </CodeBlockTabs>

  **Tham số:**

  | Trường                                                                                                                               | Kiểu      | Bắt buộc | Mô tả                                                                                              |
  | ------------------------------------------------------------------------------------------------------------------------------------ | --------- | -------- | -------------------------------------------------------------------------------------------------- |
  | `merchantToken`                                                                                                                      | `string`  | ✓        | Định danh merchant của bên tích hợp; token xác thực sẽ được cấp                                    |
  | cho merchant này. Giống như trong `/auth/register`.                                                                                  |           |          |                                                                                                    |
  | `allowOnboarding`                                                                                                                    | `boolean` |          | `true` nếu người dùng được phép truy cập và cập nhật thông tin onboarding/KYB, đăng ký phương thức |
  | thanh toán mới và chấp thuận điều khoản và điều kiện thay mặt merchant. Phải là `true` ở lần gọi đầu tiên để                         |           |          |                                                                                                    |
  | merchant có thể đăng ký ít nhất một phương thức thanh toán. `false` nếu người dùng không được truy cập onboarding và chỉ có thể dùng |           |          |                                                                                                    |
  | các phương thức thanh toán đã được cấu hình. Mặc định là `true`.                                                                     |           |          |                                                                                                    |
  | `employeeEmail`                                                                                                                      | `string`  |          | Email của nhân viên đang sử dụng máy thanh toán.                                                   |

  **Phản hồi:**

  | Mã    | Mô tả                                |
  | ----- | ------------------------------------ |
  | `200` | Merchant đăng nhập thành công        |
  | `400` | Lỗi kiểm tra tính hợp lệ của yêu cầu |
  | `401` | Không được phép truy cập             |
  | `404` | Không tìm thấy                       |

  **Nội dung phản hồi:**

  ```json
  {
      "token": "EesrFq4PUK1WxHUj93hkrKASDFp8GxJ0"
  }
  ```

  Chuyển `token` này cho ứng dụng di động của bạn để [khởi tạo](./sdk_integration#initialization) SDK. Hãy truyền token
  tới ứng dụng di động một cách bảo mật và xóa nó ngay sau khi sử dụng. Token được gắn với merchant được xác định bởi
  `merchantToken`.

  <Callout title="Cảnh báo bảo mật" type="warn">
    Hãy đảm bảo bạn dùng đúng `merchantToken` khi lấy token cho SDK. Tapaya SDK dùng token này để đăng nhập
    thay mặt merchant, qua đó có quyền truy cập vào dữ liệu và tiền của họ.
  </Callout>
</div>
