Làm mới token

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

# Làm mới token

`POST https://api.pay2s.vn/api/v1/oauth/token`

## Xác thực

Client ID + Secret. 

## Tham số

Định dạng: **application/x-www-form-urlencoded**.

| Trường | Kiểu nhập | Yêu cầu |
|---|---|---|
| `grant_type` | string | Bắt buộc |
| `client_id` | string | Bắt buộc |
| `client_secret` | string | Bắt buộc |
| `refresh_token` | string | Bắt buộc |
| `scope` | string | Tùy chọn |

Body form-urlencoded. scope tùy chọn, chỉ được thu hẹp. Lưu cả access token và refresh token mới cùng lúc. Không chạy refresh song song; dùng lại refresh token đã tiêu thụ sẽ thu hồi kết nối. Không retry mù khi mất response.

## 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_client` hoặc `invalid_grant` khi thông tin ứng dụng/code/token không hợp lệ. 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 · Làm mới token

<div class="doc-api-actions" data-doc-api-actions><a class="try-button" data-doc-playground href="/playground/?api=oauth-refresh">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.** Body form-urlencoded. scope tùy chọn, chỉ được thu hẹp. Lưu cả access token và refresh token mới cùng lúc. Không chạy refresh song song; dùng lại refresh token đã tiêu thụ sẽ thu hồi kết nối. Không retry mù khi mất response.

`POST /api/v1/oauth/token`

Các giá trị form-urlencoded (minh họa dạng object, không gửi JSON):

```json
{
  "grant_type": "refresh_token",
  "client_id": "",
  "client_secret": "",
  "refresh_token": "",
  "scope": ""
}
```

HTTP 200. Response:

```json
{
  "access_token": "NEW_ACCESS_TOKEN",
  "token_type": "Bearer",
  "expires_in": 900,
  "refresh_token": "NEW_REFRESH_TOKEN",
  "scope": "accounts:read transactions:read"
}
```