Yêu cầu cấp quyền

Nội dung Markdown đầy đủ của trang tài liệu.

# Yêu cầu cấp quyền

`GET https://api.pay2s.vn/api/v1/oauth/authorize`

## Xác thực

Đăng nhập Pay2S. 

## Tham số

Định dạng: **query URL**.

| Trường | Kiểu nhập | Yêu cầu |
|---|---|---|
| `client_id` | string | Bắt buộc |
| `redirect_uri` | string | Bắt buộc |
| `response_type` | string | Bắt buộc |
| `scope` | string | Bắt buộc |
| `state` | string | Bắt buộc |
| `code_challenge` | string | Bắt buộc |
| `code_challenge_method` | string | Bắt buộc |

Mở bằng trình duyệt, không gọi fetch. Callback nhận code, state, iss; từ chối nhận error=access_denied. redirect_uri phải trùng URL HTTPS đã đăng ký. state dài 16–512 ký tự. PKCE bắt buộc S256.

## Cách thử

Mở Playground bằng nút đầu trang, nhập thông tin của ứng dụng hoặc Access Token đã được cấp. [Hướng dẫn toàn bộ luồng](/docs/oauth/quickstart/). Code mẫu cURL, Node.js và PHP nằm dưới form Playground.

## Lỗi cần xử lý

`invalid_request`, `invalid_scope`, `invalid_redirect_uri`, `app_not_approved`, `personal_app_owner_only`. Xem [bảng lỗi](/docs/oauth/errors/).


## Request và response tham khảo

Các mẫu dưới đây giữ cấu trúc trường và kiểu dữ liệu. Khóa, chữ ký, URL phiên đã được thay bằng placeholder; danh sách chỉ giữ tối đa hai phần tử và dữ liệu ảnh/PDF/XML dài được rút gọn. Không sao chép placeholder để gọi API thật.

### OAuth · Yêu cầu cấp quyền

<div class="doc-api-actions" data-doc-api-actions><a class="try-button" data-doc-playground href="/playground/?api=oauth-authorize">Thử API trong Playground ↗</a><a class="try-button experience-button" data-doc-experience hidden>Trải nghiệm ↗</a></div>

**Đối chiếu mã nguồn backend; giá trị minh họa.** Mở bằng trình duyệt, không gọi fetch. Callback nhận code, state, iss; từ chối nhận error=access_denied. redirect_uri phải trùng URL HTTPS đã đăng ký. state dài 16–512 ký tự. PKCE bắt buộc S256.

`GET /api/v1/oauth/authorize`

Tham số path/query (không gửi JSON body):

```json
{
  "client_id": "",
  "redirect_uri": "",
  "response_type": "code",
  "scope": "accounts:read transactions:read",
  "state": "",
  "code_challenge": "",
  "code_challenge_method": "S256"
}
```

HTTP 302. Response chuyển hướng HTTP (object dưới đây chỉ mô tả Location, không phải JSON API trả về):

```json
{
  "redirect": "https://pay2s.vn/client/oauth-consent?id=EXAMPLE"
}
```