Skip to main content

Tổng quan

Thay vì liên tục gọi REST API để kiểm tra các cập nhật, bạn có thể mở một kết nối Socket.IO và để PHS chủ động đẩy dữ liệu đến bạn ngay khi dữ liệu thay đổi. Đây là phương thức được khuyến nghị để xây dựng:
  • Priceboard cập nhật theo thời gian thực
  • Theo dõi trạng thái lệnh theo thời gian thực (đặt lệnh / khớp lệnh / hủy lệnh / sửa lệnh)
  • Cập nhật sức mua và danh mục đầu tư theo thời gian thực
hai kết nối socket riêng biệt — chúng không được gộp chung thành một:
Hai kết nối này sử dụng host, path và định dạng message khác nhau. Việc nhầm lẫn giữa hai kết nối là lỗi tích hợp phổ biến nhất — xem phần Troubleshooting bên dưới.

Điều kiện cần thiết

  • Thư viện Socket.IO client. Các ví dụ bên dưới sử dụng socket.io-client cho Node.js.
  • Đối với kết nối Order / Asset, cần có access_token từ login endpoint.
  • Số tài khoản giao dịch phụ để đăng ký nhận các cập nhật về lệnh và tài sản của chính tài khoản đó.

Kết nối 1: Market Data

Kết nối đến cổng dữ liệu thị trường của PHS và nhận dữ liệu giá theo thời gian thực cho bất kỳ mã chứng khoán nào mà bạn đăng ký. Không yêu cầu xác thực.
Để theo dõi một mã chứng khoán khác, gọi lại socket.emit("subscribe", ...) với mã chứng khoán khác trong topic. Để dừng theo dõi một mã chứng khoán, sử dụng cùng topic đó với socket.emit("unsubscribe", ...).

Kết nối 2: Order / Asset

Kết nối đến cổng tài khoản của PHS và nhận các cập nhật về lệnh, sức mua và danh mục đầu tư của chính tài khoản. Yêu cầu access_token.
Chọn đúng path tương ứng với loại tài khoản. /realtime/eqt/socket.io (tài khoản cơ sở/tiền mặt) và /realtime/fno/socket.io (tài khoản phái sinh) không thể thay thế cho nhau — đăng ký trên sai path sẽ không trả về dữ liệu.

Tìm hiểu về event account

Tất cả các cập nhật liên quan đến tài khoản — thay đổi lệnh, thay đổi sức mua và thay đổi danh mục — đều được gửi thông qua cùng một event account. Không có các event riêng biệt như OM, CI hoặc SE. Thay vào đó, cần kiểm tra trường eventtype bên trong payload để xác định loại cập nhật nhận được:
Một lỗi rất phổ biến là viết socket.on("OM", ...) và chờ event này được kích hoạt trực tiếp. Điều này sẽ không xảy ra — luôn lắng nghe socket.on("account", ...) và kiểm tra eventtype bên trong payload.

Tham chiếu các trường dữ liệu

Các bảng bên dưới liệt kê những trường thường được sử dụng nhất. Tên trường được giữ nguyên theo cách đặt tên ngắn (legacy naming) — sử dụng phần này như bảng tra cứu.

Các trường instrument (Market Data)

Các trường trade (Giao dịch khớp lệnh)

Các trường account khi eventtype = OM (cơ sở) hoặc OO (phái sinh)

Tài khoản cơ sở (FLEX) và tài khoản phái sinh (FDS) sử dụng tên trường hơi khác nhau cho cùng một khái niệm (ví dụ: orderpriceorder_price). Hãy sử dụng đúng tên trường tương ứng với loại tài khoản của bạn.

Troubleshooting


Thực hành tốt nhất

  • Lưu access_token và mọi client secret trên server, tuyệt đối không đặt trong JavaScript phía trình duyệt.
  • Gọi unsubscribe đối với các mã chứng khoán hoặc tài khoản mà bạn không còn cần theo dõi để giảm lưu lượng không cần thiết.
  • Sử dụng một kết nối cho mỗi gateway và subscribe nhiều topic trên cùng một kết nối, thay vì mở một kết nối mới cho từng mã chứng khoán.
  • Tuyệt đối không commit token thật vào source control — hãy coi token bị lộ giống như mật khẩu bị lộ.