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ểu | Mặc định | Mô tả |
|---|---|---|---|
ClientId | string | "" | Client ID xác thực |
ApiKey | string | "" | API key từ SSI |
ApiSecret | string | "" | API secret từ SSI |
PrivateKey | string | "" | Private key cho ký lệnh giao dịch |
ApiUrl | string | "https://api.ssi.com.vn" | URL REST API. Để trống hoặc khoảng trắng thì dùng mặc định. |
StreamingUrl | string | "wss://stream.ssi.com.vn/ws/v3" | URL WebSocket streaming dữ liệu. Để trống thì dùng mặc định. |
TradingApiDomain | string | "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. |
TradingWsDomain | string | "wss://api.ssi.com.vn/ws/v3/trading" | Host (hoặc URL đầy đủ) của Trading WebSocket (xem mục 7) |
TimeoutMs | int | 60000 | Timeout request HTTP/WebSocket (mili-giây) |
MaxRetries | int | 5 | Số lần retry tối đa (chỉ áp dụng cho GET, xem bên dưới) |
RetryDelayMs | int | 2000 | Delay cơ sở cho retry và reconnect backoff (mili-giây) |
RateLimitPerSecond | int | 10 | Giới hạn request/giây phía client (0 = không giới hạn) |
LogLevel | string | "INFO" | Mức log: DEBUG, INFO, WARNING, ERROR |
Proxy | string? | null | Proxy URL |
UserAgent | string? | null | User-Agent gửi trên REST và WebSocket. null hoặc rỗng thì dùng mặc định của SDK. |
AutoReconnect | bool | true | Tự reconnect socket streaming khi rớt |
OtpPollIntervalMs | int | 5000 | Khoảng cách giữa các lần poll duyệt Smart OTP (mili-giây) |
OtpPollMaxWaitMs | int | 60000 | Tổng thời gian chờ duyệt Smart OTP trước khi bỏ cuộc (mili-giây) |
MaxBatchOrders | int | 20 | Số 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:
| Property | Mô tả |
|---|---|
TradingApiUrl | URL 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ệ. |
TradingWsUrl | URL 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ànhTimeoutMs,RetryDelay(giây,double) đã thànhRetryDelayMs(mili-giây,int), vàConfig.DeviceIdđã bị bỏ (SDK dùng mã máy của hệ điều hành làmdeviceIdkhi 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.
RateLimitPerSecondlà giới hạn phía client; thông tin rate limit của server nằm ởauth.RateLimitvà trongRateLimitException.
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ọn | Kiểu | Mặc định | Mô tả |
|---|---|---|---|
RequestTimeoutMs | int? | null | Thờ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. |
SignatureEncoding | string | "auto" | "auto", "base64" hoặc "hex". Giá trị khác ném ValidationException. |
HandshakeGraceMs | int | 500 | Thời gian chờ frame từ chối sau khi kết nối |
RespectRateLimit | bool | true | Chờ khi server báo đã hết hạn mức |
MaxRateLimitWaitMs | int | 2000 | Thời gian chờ tối đa cho rate limit |
PingIntervalMs | int? | 30000 | Chu kỳ ping. null hoặc 0 tắt vòng ping. |
UserAgent | string? | null | null dùng Config.UserAgent |
Lưu ý: comment XML của
RequestTimeoutMstrong 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
MaxBatchOrderslà 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/ApiSecretsẽ làm luồng xác thực thất bại (AuthenticationException). - Thiếu
PrivateKeysẽ ảnh hưởng các nghiệp vụ ký lệnh giao dịch (REST và Trading WebSocket). - Cấu hình
RateLimitPerSecondphù 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,RetryDelayMsphù hợp với tải thực tế.