API ngân hàng Pay2S: Hướng dẫn lấy biến động số dư

Minh họa API ngân hàng Pay2S kết nối tài khoản ngân hàng với website để theo dõi giao dịch tiền vào và tiền ra.

API ngân hàng Pay2S giúp website và ứng dụng truy vấn giao dịch ngân hàng để theo dõi tiền vào, tiền ra và xây dựng quy trình đối soát chuyển khoản. Thay vì kiểm tra từng giao dịch thủ công, bạn có thể lấy dữ liệu qua API, đối chiếu với đơn hàng và cập nhật trạng thái thanh toán theo quy tắc của hệ thống.

Nếu đang tích hợp Pay2S V1, bạn cần phân biệt API tạo thanh toán với API lấy giao dịch. Bài viết này hướng dẫn cách chọn đúng chức năng, tạo token, gửi request và xử lý dữ liệu biến động số dư.

Doanh nghiệp cần kết nối dữ liệu giao dịch với website, POS hoặc phần mềm quản lý có thể tìm hiểu giải pháp Open API Banking trước khi chọn phạm vi tích hợp.

Quy trình tích hợp gồm lấy Secret Key, tạo token, truy vấn giao dịch và kiểm tra kết quả trước khi đưa vào đối soát đơn hàng.

1. Phân biệt API biến động số dư và Collection Link V1

Hai thẻ minh họa Pay2S: tạo thanh toán V1 bằng mã QR và truy vấn danh sách giao dịch ngân hàng.
Chọn đúng API: tạo thanh toán hoặc lấy danh sách giao dịch.

Trong Pay2S Playground, mục Collection Link V1 dùng để tạo đơn hàng và liên kết thanh toán. API này gọi đến:

POST https://payment.pay2s.vn/v1/gateway/api/create

Để truy vấn giao dịch tiền vào hoặc tiền ra, bạn sử dụng API Giao Dịch:

POST https://api.pay2s.vn/userapi/transactions

Hai API phục vụ những công việc khác nhau:

Chức năng API phù hợp
Tạo đơn hàng và liên kết thanh toán Collection Link V1
Lấy danh sách giao dịch trong khoảng ngày API Giao Dịch
Nhận dữ liệu giao dịch do Pay2S chủ động gửi Webhook giao dịch

Tài liệu gọi luồng tạo thanh toán là Collection Link V1; endpoint lấy giao dịch được công bố riêng, không có /v1/ trong đường dẫn. Khi triển khai, hãy dùng đúng URL của từng chức năng. Bạn có thể đối chiếu tại tài liệu Collection Link V1 của Pay2S.

Với website đang dùng Collection Link V1, bạn có thể tạo thanh toán cho khách hàng, xử lý kết quả qua IPN của luồng thanh toán và sử dụng API giao dịch để đối soát dữ liệu tài khoản.

2. Cần chuẩn bị gì trước khi tích hợp API ngân hàng Pay2S?

Bốn thành phần chuẩn bị tích hợp Pay2S: ngân hàng, backend, Secret Key và công cụ gọi API.
Chuẩn bị tài khoản, thông tin xác thực và backend trước khi gọi API.

Trước khi bắt đầu, bạn nên chuẩn bị:

  • Tài khoản Pay2S và tài khoản ngân hàng cần theo dõi đã liên kết.
  • Secret Key trong mục tích hợp Website/Application.
  • Postman để kiểm tra request hoặc backend để gọi API.
  • Số tài khoản và khoảng ngày muốn truy vấn.

Trước khi lấy khóa tích hợp, hãy kiểm tra ngân hàng Pay2S hỗ trợ và điều kiện kết nối của tài khoản cần theo dõi.

Hãy thực hiện việc gọi API từ backend. Secret Key và token cần được lưu trong cấu hình bảo mật của máy chủ, tránh đặt trực tiếp trong JavaScript công khai trên website.

3. Lấy Secret Key và tạo pay2s-token

Sơ đồ chuyển Secret Key qua Base64 một lần để tạo pay2s-token dùng trong header xác thực.
Mã hóa toàn bộ Secret Key bằng Base64 đúng một lần để tạo pay2s-token.

Bước 1: Lấy đúng Secret Key

Đăng nhập Pay2S, mở Tích hợp → Website/Application, tìm dòng Secret key và sao chép giá trị tại đó.

Cần phân biệt Secret Key với Access key và Partner code. API giao dịch sử dụng token được tạo từ Secret Key.

Bước 2: Chuyển Secret Key sang Base64

Công thức tạo token:

pay2s-token = Base64(Secret Key)

Hãy mã hóa toàn bộ chuỗi Secret Key đúng một lần.

Ví dụ minh họa:

Secret Key: example-secret
pay2s-token: ZXhhbXBsZS1zZWNyZXQ=

Nếu dùng PHP, bạn có thể tạo token từ biến môi trường:

$secretKey = getenv('PAY2S_SECRET_KEY');

if ($secretKey === false || $secretKey === '') {
    throw new RuntimeException('Chưa cấu hình PAY2S_SECRET_KEY');
}

$token = base64_encode($secretKey);

Base64 có thể giải mã ngược, vì vậy token cần được bảo vệ như Secret Key. Khi thay Secret Key, bạn cũng cần tạo lại token tương ứng. Xem hướng dẫn xác thực API giao dịch Pay2S để kiểm tra cách gửi header.

4. Cách gọi API lấy biến động số dư bằng Postman

API client gửi POST đến /userapi/transactions với body JSON và nhận phản hồi 200 OK.
Request lấy giao dịch gồm URL, header xác thực và body JSON.

Bước 1: Tạo request POST

Trong Postman, tạo request mới với:

Method: POST
URL: https://api.pay2s.vn/userapi/transactions

Bước 2: Thiết lập Headers

Thêm hai header:

Key Value
Content-Type application/json
pay2s-token Token Base64 đã tạo

Tại tab Authorization, chọn No Auth.

Giá trị của pay2s-token chỉ chứa token. Không thêm tiền tố Bearer, Basic hoặc dấu ngoặc kép vào giá trị header.

Bước 3: Nhập JSON Body

Chọn Body → raw → JSON, sau đó nhập:

{
  "bankAccounts": "0123456789",
  "begin": "01/10/2026",
  "end": "13/10/2026"
}

Thay số tài khoản minh họa bằng tài khoản cần truy vấn.

Ý nghĩa các tham số:

Tham số Kiểu dữ liệu Bắt buộc Ý nghĩa
bankAccounts String Không Số tài khoản muốn lọc giao dịch
begin String Có Ngày bắt đầu, định dạng dd/mm/yyyy
end String Có Ngày kết thúc, định dạng dd/mm/yyyy

Theo tài liệu, bạn có thể bỏ bankAccounts để lấy giao dịch của tất cả tài khoản trong phạm vi truy cập:

{
  "begin": "01/10/2026",
  "end": "13/10/2026"
}

Hãy giữ số tài khoản ở dạng chuỗi để bảo toàn các số 0 ở đầu.

Bước 4: Gửi request và kiểm tra phản hồi

Nhấn Send, sau đó kiểm tra cả mã trạng thái HTTP và nội dung JSON.

Trong phản hồi JSON, chú ý:

  • status: trạng thái xử lý yêu cầu.
  • messages: thông báo từ Pay2S.
  • transactions: danh sách giao dịch trả về.

Việc nhận được phản hồi HTTP thành công chưa đủ để quyết định cập nhật đơn hàng. Backend vẫn cần kiểm tra trạng thái nghiệp vụ và dữ liệu của từng giao dịch.

5. Ví dụ gọi API ngân hàng Pay2S bằng cURL

Cửa sổ cURL gửi request POST đến máy chủ Pay2S.
cURL giúp kiểm tra request API Pay2S từ môi trường dòng lệnh.

Bạn có thể tham khảo request sau. Cú pháp xuống dòng trong ví dụ dành cho Bash:

curl --request POST \
  'https://api.pay2s.vn/userapi/transactions' \
  --header 'Content-Type: application/json' \
  --header 'pay2s-token: YOUR_BASE64_TOKEN' \
  --data-raw '{
    "bankAccounts": "0123456789",
    "begin": "01/10/2026",
    "end": "13/10/2026"
  }'

Trong đó:

  • YOUR_BASE64_TOKEN là token được tạo từ Secret Key.
  • 0123456789 là số tài khoản minh họa.
  • begin và end cần được thay theo thời gian muốn tra cứu.

Khi đưa vào ứng dụng, hãy đọc token từ cấu hình backend để tránh lưu khóa trực tiếp trong mã nguồn.

6. Đọc dữ liệu biến động số dư trả về

Dữ liệu JSON được biểu diễn thành danh sách giao dịch Pay2S với IN, OUT và số tiền mẫu 250000.
Đọc các trường giao dịch để phân biệt tiền vào, tiền ra và nội dung chuyển khoản.

Dưới đây là phản hồi minh họa đã rút gọn:

{
  "status": true,
  "messages": "Thành công",
  "transactions": [
    {
      "id": 10001,
      "transaction_date": "2026-10-13 09:30:00",
      "transaction_id": "DEMO10001",
      "account_number": "0123456789",
      "vaNumber": null,
      "bank": "ACB",
      "amount": 250000,
      "description": "THANHTOAN DH10001",
      "type": "IN",
      "checksum": "demo-checksum-10001"
    }
  ]
}

Các trường thường dùng khi xử lý giao dịch:

Trường Ý nghĩa
id ID giao dịch duy nhất trên Pay2S
transaction_date Thời gian giao dịch
transaction_id Mã giao dịch gốc từ ngân hàng
account_number Tài khoản nhận hoặc gửi tiền
vaNumber Số tài khoản ảo, có thể là null
bank Mã ngân hàng
amount Số tiền giao dịch, đơn vị VNĐ
description Nội dung chuyển khoản
type IN là nhận tiền, OUT là chuyển tiền
checksum Mã duy nhất của giao dịch do Pay2S tạo

Với ví dụ trên, hệ thống nhận được một giao dịch tiền vào 250.000 đồng, có nội dung THANHTOAN DH10001.

Lưu ý, amount là số tiền của giao dịch. Trường này không biểu thị số dư hiện tại của tài khoản. Đối chiếu tên trường theo cấu trúc phản hồi API giao dịch Pay2S trước khi ánh xạ vào ứng dụng.

7. Cách đối soát chuyển khoản với đơn hàng

Đối chiếu đơn DH10001 với giao dịch IN 250000 VND, kèm dấu xác nhận và khóa ID chống trùng.
Đối chiếu thông tin và kiểm tra trùng trước khi xác nhận thanh toán.

Để tự động xác nhận thanh toán, bạn nên xây dựng quy tắc đối chiếu rõ ràng.

Ví dụ, đơn hàng DH10001 cần thanh toán 250.000 đồng vào tài khoản 0123456789. Backend có thể kiểm tra:

  1. Giao dịch có type bằng IN.
  2. Tài khoản nhận tiền khớp với tài khoản của đơn hàng.
  3. Số tiền đáp ứng quy tắc thanh toán của đơn.
  4. Nội dung chuyển khoản chứa mã đơn đúng định dạng.
  5. Giao dịch chưa được sử dụng để xác nhận một đơn hàng khác.

Hãy lưu id giao dịch và đặt ràng buộc duy nhất trong cơ sở dữ liệu. Cách này giúp tránh ghi nhận tiền hoặc cập nhật thanh toán nhiều lần khi cùng một giao dịch xuất hiện trong các lần truy vấn.

Nếu khách chuyển thiếu tiền, thừa tiền hoặc ghi sai nội dung, hệ thống nên đưa giao dịch vào danh sách cần kiểm tra theo quy trình của cửa hàng.

Với đơn được tạo bằng Collection Link V1, hãy triển khai xử lý kết quả theo tài liệu IPN của luồng thanh toán. API giao dịch có thể hỗ trợ đối soát tài khoản và kiểm tra chênh lệch.

Nếu triển khai cho POS hoặc chuỗi cửa hàng, bạn có thể tham khảo cách ứng dụng API thanh toán ngân hàng tại điểm bán để gắn giao dịch với đơn hàng và quy trình vận hành.

8. Nhận biến động số dư tự động bằng Webhook

Pay2S gửi Webhook POST có token đến backend và nhận phản hồi 200 với success true.
Webhook gửi giao dịch đến backend để hệ thống tiếp nhận và xử lý tự động.

Ngoài việc chủ động gọi API, bạn có thể cấu hình Webhook để Pay2S gửi dữ liệu giao dịch đến endpoint của mình.

Các bước cấu hình cơ bản:

  1. Mở Webhooks → Thêm webhook.
  2. Chọn tài khoản ngân hàng đã liên kết.
  3. Chọn sự kiện nhận tiền, chuyển tiền hoặc tất cả.
  4. Nhập URL nhận dữ liệu của backend.
  5. Lưu token được cung cấp khi tạo Hook.

Bạn nên sử dụng HTTPS cho endpoint nhận dữ liệu.

Phân biệt token và tên trường của Webhook

Webhook giao dịch sử dụng header:

Authorization: Bearer YOUR_TOKEN_WEBHOOK

Đây là token của Webhook, cần phân biệt với pay2s-token dùng để truy vấn API giao dịch.

Tên trường giữa hai luồng cũng khác nhau:

API truy vấn giao dịch Webhook giao dịch
account_number accountNumber
transaction_date transactionDate
description content
type transferType
amount transferAmount

Receiver cần kiểm tra token trước khi xử lý mảng transactions. Sau khi lưu dữ liệu thành công hoặc đưa vào hàng đợi bền vững, hãy phản hồi HTTP 200 kèm JSON:

{
  "success": true
}

Webhook có thể được gửi lại, vì vậy cơ chế chống xử lý trùng vẫn cần được áp dụng. Bạn có thể kết hợp Webhook để nhận thông báo và API truy vấn để đối soát định kỳ. Xem tài liệu kỹ thuật Webhook giao dịch Pay2S khi xây dựng endpoint tiếp nhận.

Nếu nhiều nhân sự cần theo dõi tiền về, giải pháp chia sẻ biến động số dư giúp bạn xem thêm cách tổ chức thông báo theo nhu cầu vận hành.

9. Những lỗi thường gặp khi tích hợp

Ba nhóm lỗi tích hợp Pay2S: token, giới hạn request 429 và ID giao dịch trùng.
Kiểm tra token, điều phối request và chống xử lý trùng khi tích hợp API Pay2S.

Token không hợp lệ

Kiểm tra xem bạn đã lấy đúng Secret Key, mã hóa Base64 đúng một lần và gửi đúng header pay2s-token hay chưa.

Các nguyên nhân dễ gặp gồm:

  • Sao chép nhầm Access key.
  • Gửi nguyên Secret Key chưa chuyển đổi.
  • Mã hóa Base64 hai lần.
  • Token có khoảng trắng hoặc ký tự xuống dòng.
  • Tiếp tục dùng token cũ sau khi thay Secret Key.

Không thấy giao dịch cần tìm

Kiểm tra số tài khoản, khoảng ngày truy vấn và dữ liệu trên Pay2S. Định dạng ngày gửi lên phải là dd/mm/yyyy.

Nếu giao dịch có trên Pay2S nhưng ứng dụng không hiển thị, hãy kiểm tra thêm điều kiện lọc và cách đọc mảng transactions trong backend.

Gặp lỗi 429 Too Many Requests

Tài liệu API giao dịch công bố giới hạn tối đa 60 request/phút. Khi vượt giới hạn, hệ thống trả lỗi 429 Too Many Requests.

Bạn nên điều phối các tác vụ gọi API, tránh nhiều tiến trình truy vấn đồng thời và tăng khoảng chờ khi gặp lỗi giới hạn.

Đơn hàng được xác nhận nhiều lần

Kiểm tra cơ chế chống trùng theo ID giao dịch. Việc ghi nhận giao dịch và cập nhật đơn hàng nên được thực hiện trong cùng giao dịch cơ sở dữ liệu để hạn chế xử lý đồng thời gây sai lệch.

10. Câu hỏi thường gặp về API ngân hàng Pay2S

Biểu tượng hỏi đáp cạnh máy chủ Pay2S, bao quanh bởi ngân hàng, giao dịch IN OUT, khóa và thông báo.
Những điểm cần hiểu trước khi triển khai API ngân hàng Pay2S.

API ngân hàng Pay2S có lấy được cả tiền vào và tiền ra không?

API giao dịch có trường type để phân biệt IN và OUT. Ứng dụng có thể dựa vào trường này để xử lý giao dịch nhận tiền hoặc chuyển tiền.

Có bắt buộc gửi số tài khoản không?

Theo tài liệu, bankAccounts là tham số tùy chọn. Bỏ trường này để lấy giao dịch của tất cả tài khoản trong phạm vi truy cập; begin và end vẫn bắt buộc.

Có cần tạo chữ ký HMAC khi lấy danh sách giao dịch không?

Request lấy danh sách giao dịch sử dụng header pay2s-token. Chữ ký HMAC của Collection Link V1 thuộc luồng tạo thanh toán riêng.

API giao dịch có trả về số dư hiện tại không?

Phản hồi được mô tả trong hướng dẫn này là danh sách giao dịch phát sinh. Không dùng amount của một giao dịch làm số dư tài khoản.

Nên bắt đầu kiểm tra ở đâu?

Bạn có thể mở Pay2S Playground mục Danh sách giao dịch để xem cấu trúc request và response, sau đó thực hiện các bước cấu hình token và truy vấn bằng Postman theo hướng dẫn trên.

Leave your comment