.NET

Cấu hình

Tham chiếu đầy đủ các tham số Config của .NET SDK

Config

Lớp Config (sealed class) là trung tâm cấu hình SDK. Tạo đối tượng Config với thông tin xác thực:

using SsiSdk;

var config = new Config("YOUR_CLIENT_ID")
{
    ApiKey = "YOUR_API_KEY",
    ApiSecret = "YOUR_API_SECRET",
    PrivateKey = "YOUR_PRIVATE_KEY",
};

Config có 2 constructor: Config() (rỗng, gán property sau) và Config(string clientId) (gán sẵn ClientId).

Tất cả tham số cấu hình

Mọi khoảng thời gian là số nguyên mili-giây (hậu tố Ms).

Tham sốKiểuMặc địnhMô tả
ClientIdstring""Client ID xác thực
ApiKeystring""API key từ SSI
ApiSecretstring""API secret từ SSI
PrivateKeystring""Private key cho ký lệnh giao dịch
ApiUrlstring"https://api.ssi.com.vn"URL REST API. Để trống hoặc khoảng trắng thì dùng mặc định.
StreamingUrlstring"wss://stream.ssi.com.vn/ws/v3"URL WebSocket streaming dữ liệu. Để trống thì dùng mặc định.
TradingApiDomainstring"https://api.ssi.com.vn"Host (hoặc URL đầy đủ) của Trading REST API. Nếu bằng mặc định thì dùng ApiUrl.
TradingWsDomainstring"wss://api.ssi.com.vn/ws/v3/trading"Host (hoặc URL đầy đủ) của Trading WebSocket (xem mục 7)
TimeoutMsint60000Timeout request HTTP/WebSocket (mili-giây)
MaxRetriesint5Số lần retry tối đa (chỉ áp dụng cho GET, xem bên dưới)
RetryDelayMsint2000Delay cơ sở cho retry và reconnect backoff (mili-giây)
RateLimitPerSecondint10Giới hạn request/giây phía client (0 = không giới hạn)
LogLevelstring"INFO"Mức log: DEBUG, INFO, WARNING, ERROR
Proxystring?nullProxy URL
UserAgentstring?nullUser-Agent gửi trên REST và WebSocket. null hoặc rỗng thì dùng mặc định của SDK.
AutoReconnectbooltrueTự reconnect socket streaming khi rớt
OtpPollIntervalMsint5000Khoảng cách giữa các lần poll duyệt Smart OTP (mili-giây)
OtpPollMaxWaitMsint60000Tổng thời gian chờ duyệt Smart OTP trước khi bỏ cuộc (mili-giây)
MaxBatchOrdersint20Số lệnh tối đa mỗi request batch. Giá trị nhỏ hơn 1 được đặt lại về 20.

Property chỉ đọc, suy ra từ các tham số trên:

PropertyMô tả
TradingApiUrlURL gốc (scheme://host[:port]) mà các path trading và account được gửi tới. Từ TradingApiDomain; ném ValidationException nếu không phải URL http(s) hoặc host hợp lệ.
TradingWsUrlURL WebSocket của kênh trading, suy ra từ TradingWsDomain: thêm wss:// nếu thiếu scheme và /ws/v3/trading nếu thiếu path.

ToString() che thông tin nhạy cảm: ApiKey bị mask, ApiSecret và PrivateKey hiển thị ***. Dù vậy, vẫn không nên log Config.

Thay đổi so với bản cũ: TimeoutSeconds đã thành TimeoutMs, RetryDelay (giây, double) đã thành RetryDelayMs (mili-giây, int), và Config.DeviceId đã bị bỏ (SDK dùng mã máy của hệ điều hành làm deviceId khi gửi batch).

Retry và rate limit

  • Chỉ request GET được retry. Với 429 trên GET, SDK tự chờ theo Retry-After, nếu không có thì chờ 1 giây rồi tăng gấp đôi, tối đa 3 lần retry và mỗi lần chờ tối đa 30 giây.
  • POST, PUT, DELETE không bao giờ được gửi lại (đặt lệnh, huỷ lệnh, batch, FCO), vì lệnh lặp có thể bị tạo hai lần. Sau timeout, kết quả là không xác định: kiểm tra sổ lệnh trước khi gửi lại.
  • RateLimitPerSecond là giới hạn phía client; thông tin rate limit của server nằm ở auth.RateLimit và trong RateLimitException.

TradingWsOptions

Tuỳ chọn cho TradingWs.ConnectAsync(auth, options) (namespace SsiSdk). Nếu không truyền thì dùng mặc định. Chi tiết hành vi xem Trading WebSocket.

Tuỳ chọnKiểuMặc địnhMô tả
RequestTimeoutMsint?nullThời gian chờ response của một lệnh. Qua TradingWs.ConnectAsync, null thành Config.TimeoutMs (hoặc 10000 nếu giá trị đó nhỏ hơn hoặc bằng 0). TradingWsClient tạo trực tiếp dùng 10000.
SignatureEncodingstring"auto""auto", "base64" hoặc "hex". Giá trị khác ném ValidationException.
HandshakeGraceMsint500Thời gian chờ frame từ chối sau khi kết nối
RespectRateLimitbooltrueChờ khi server báo đã hết hạn mức
MaxRateLimitWaitMsint2000Thời gian chờ tối đa cho rate limit
PingIntervalMsint?30000Chu kỳ ping. null hoặc 0 tắt vòng ping.
UserAgentstring?nullnull dùng Config.UserAgent

Lưu ý: comment XML của RequestTimeoutMs trong mã nguồn SDK vẫn ghi "10000 when unset"; bảng trên phản ánh đúng theo code.

Cấu hình nâng cao

Debug logging

var config = new Config("YOUR_CLIENT_ID")
{
    ApiKey = "YOUR_API_KEY",
    ApiSecret = "YOUR_API_SECRET",
    LogLevel = "DEBUG",
};

Tuỳ chỉnh retry & rate limit

var config = new Config("YOUR_CLIENT_ID")
{
    ApiKey = "YOUR_API_KEY",
    ApiSecret = "YOUR_API_SECRET",
    MaxRetries = 3,
    RetryDelayMs = 1000,
    RateLimitPerSecond = 5,
};

Smart OTP và batch

var config = new Config("YOUR_CLIENT_ID")
{
    ApiKey = "YOUR_API_KEY",
    ApiSecret = "YOUR_API_SECRET",
    PrivateKey = "YOUR_PRIVATE_KEY",
    OtpPollIntervalMs = 3000,   // poll Smart OTP mỗi 3 giây
    OtpPollMaxWaitMs = 90000,   // chờ duyệt tối đa 90 giây
    MaxBatchOrders = 20,        // giới hạn số lệnh mỗi batch
};

API reference ghi giới hạn batch phía server là 50 lệnh mỗi request, trong khi mặc định của SDK là 20. Nâng MaxBatchOrders là quyết định của bên gọi: xem Lệnh hàng loạt.

Proxy

var config = new Config("YOUR_CLIENT_ID")
{
    ApiKey = "YOUR_API_KEY",
    ApiSecret = "YOUR_API_SECRET",
    Proxy = "http://proxy.example.com:8080",
};

Khuyến nghị

  • Giữ thông tin khóa (ApiKey, ApiSecret, PrivateKey) trong biến môi trường hoặc secret manager (Azure Key Vault, AWS Secrets Manager, ...) — không hardcode hoặc commit vào Git.
  • Thiếu ApiKey/ApiSecret sẽ làm luồng xác thực thất bại (AuthenticationException).
  • Thiếu PrivateKey sẽ ảnh hưởng các nghiệp vụ ký lệnh giao dịch (REST và Trading WebSocket).
  • Cấu hình RateLimitPerSecond phù hợp với chính sách hệ thống.
  • Chỉ bật LogLevel = "DEBUG" trong môi trường phát triển.
  • Đặt TimeoutMs, MaxRetries, RetryDelayMs phù hợp với tải thực tế.

Trên trang này