WebSocket Akışları

Bağlantı Zaman Aşımı

    - Sunucu, 60 saniyelik bir hareketsizlikten sonra WebSocket bağlantısını kapatır (Bağlantıyı canlı tutma).

    - Hareketsizlik, istemci tarafından gönderilen isteklerin yokluğu olarak tanımlanır.

Bağlantıyı Canlı Tutma

WebSocket bağlantısını aktif tutmak için şunları yapmanız gerekir:

    - Her 50 saniyede bir periyodik istek gönder.

    - Uygulamanızın mantığındaki olası bağlantı kopmalarını düzgün bir şekilde ele alın.

Yetkilendirme

giriiş

Herhangi bir WebSocket isteğini imzalamadan önce, Cryptomus kişisel hesabınızda bir API anahtarı oluşturmanız gerekir.

API anahtarı oluşturmaya ilişkin ayrıntılı talimatlar mevcuttur. Burada

Bağlantı için Tek Kullanımlık Jeton Alma

WebSocket sunucusuna bağlanmadan önce, tek kullanımlık bir kimlik doğrulama belirteci edinmeniz gerekir.

Tokeni göndermek suretiyle elde edebilirsiniz. ilgili talep

Bu belirteç 5 dakika boyunca veya ilk başarılı bağlantı kurulana kadar geçerlidir.

WebSocket Sunucusuna Bağlanıyor

WebSocket sunucusuna bağlanmak için

1. Tek seferlik bir indirim kazanın. kimlik doğrulama belirteci

2. Bağlantı kurulurken, sorgu parametresi olan `token` içinde belirteci belirtin.

Bağlantı URL'si örneği: wss://api-ws.cryptomus.com/ws?token=b0b1cacd26993392ecf072155bd1686c96e380ad12cefa564aa6665c85c77334

Token yalnızca bir kez kullanılabilir. Her yeni bağlantı için yeni bir token talep etmeniz gerekir.

Token doğrulama işlemi başarıyla tamamlandıktan sonra bağlantı kurulacak ve mevcut kanallara abone olabileceksiniz.

WebSocket Bağlantısı için Tek Kullanımlık Kimlik Doğrulama Belirteci Alma

WebSocket sunucusuna bağlanmak için tek kullanımlık bir kimlik doğrulama belirteci oluşturmanıza olanak tanır. Belirteç, ilk başarılı bağlantıya kadar veya süresi dolana kadar (5 dakika) geçerlidir.

GET /v2/user-api/exchange/account/web-socket/token Kopyala

Yetkilendirme Başlıkları

Gerekli yetkilendirme başlıkları hakkında tüm bilgiler mevcuttur. Burada

Cevap

{ "token": "168b34a3a12370740ff1654f0d0c4726ff1bba8c4675edc0d7553f15e5a2a094" }
Kopyala

Olası kodlar

200: Sipariş başarıyla oluşturuldu

404: Kullanıcı veya kaynak bulunamadı

500: Dahili sunucu hatası

Derinlik ölçeğinin sembolleri

Rica etmek

GET https://exchange-ws.cryptomus.com/api/v2/symbol-scales?symbol={symbol} Kopyala

Cevap


1{
2  "status": "success",
3  "message": "success",
4  "data": [
5    {
6      "scale": "0.01",
7      "index": 0 // index
8    },
9    ...
10  ]
11}
Kopyala

Piyasa listesi

Rica etmek

GET https://api-app.cryptomus.com/v1/exchange/market Kopyala

Cevap


1{
2  "result": [
3    {
4      "id": "01HSBPVS17CT2GN2FV34K3AMP9",
5      "symbol": "BTC_USDT",
6      "baseCurrency": "BTC",
7      "quoteCurrency": "USDT",
8      "baseMinSize": "0.0000100000000000",
9      "quoteMinSize": "0.1000000000000000",
10      "baseMaxSize": "10000000000.0000000000000000",
11      "quoteMaxSize": "99999999.0000000000000000",
12      "basePrec": "8",
13      "quotePrec": "6",
14      "baseCurrencyFullName": "Bitcoin",
15      "quoteCurrencyFullName": "Tether USD"
16    },
17    ...
18  ]
19}
Kopyala

Örnek Uygulama


1const WebSocket = require('ws');
2
3class CryptomusWebSocket {
4    constructor(token) {
5        this.token = token;
6        this.socket = new WebSocket('wss://api-ws.cryptomus.com/ws?token=${this.token}');
7        this.setupConnection();
8    }
9
10    setupConnection() {
11        this.socket.on('open', () => {
12            console.log('Connected to Cryptomus WebSocket');
13            this.startPing();
14        });
15
16        this.socket.on('message', (data) => {
17            console.log('Received:', data.toString());
18        });
19    }
20
21    ping() {
22        if (this.socket.readyState === WebSocket.OPEN) {
23            this.socket.send(JSON.stringify({
24                id: 0,
25                method: "ping",
26                params: []
27            }));
28        }
29    }
30
31    startPing() {
32        setInterval(() => {
33            this.ping();
34        }, 50 * 1000); // Every 50 seconds
35    }
36}
37
38// Usage
39const token = "your_auth_token_here";
40const client = new CryptomusWebSocket(token);
41            
Kopyala

1import asyncio
2import websockets
3import json
4
5class CryptomusWebSocket:
6    def __init__(self, token):
7        self.token = token
8        self.socket = None
9    
10    async def connect(self):
11        self.socket = await websockets.connect(f"wss://api-ws.cryptomus.com/ws?token={self.token}")
12        print('Connected to Cryptomus WebSocket')
13    
14    async def ping(self):
15        await self.socket.send(json.dumps({
16            "id": 0,
17            "method": "ping",
18            "params": []
19        }))
20    
21    async def start_ping(self):
22        while True:
23            await asyncio.sleep(50)  # Every 50 seconds
24            await self.ping()
25    
26    async def listen(self):
27        async for message in self.socket:
28            print(f"Received: {message}")
29    
30    async def run(self):
31        await self.connect()
32        
33        # Start ping task
34        ping_task = asyncio.create_task(self.start_ping())
35        
36        # Listen for messages
37        await self.listen()
38
39# Usage
40token = "your_auth_token_here"
41client = CryptomusWebSocket(token)
42asyncio.run(client.run())
43            
Kopyala

Tüm uç noktalar zamanı Unix zaman damgası biçiminde döndürür.

İstek Mesajı Yapısı

İsimParametre türüTanım
idIntegerİsteğinize yanıt verilmesi için benzersiz olması gerekir.
methodStringİstek adı
paramsArrayMetodun parametrelerini buraya girin.

Parametre türü

Integer

Tanım

İsteğinize yanıt verilmesi için benzersiz olması gerekir.

Parametre türü

String

Tanım

İstek adı

Parametre türü

Array

Tanım

Metodun parametrelerini buraya girin.

Geçersiz JSON gönderilmesi durumunda WebSocket bağlantısı sonlandırılacaktır.

Mesaj ve istek türleri

- İstek (`ping`, `candles_request`, vb.)

- Abonelik (`candles_subscribe`, `lastprice_subscribe`, vb.). Aynı veri türüne yeniden abone olmak iptal edilecektir.

Yanıt Mesajı

İsimParametre türüTanım
idIntegerİstek tanımlayıcısı
dataNullİstek başarısız olursa, aşağıdaki gibi bir sonuç elde edilir. Başarılı olması durumunda ise her yöntem için yanıt yapısı aşağıda gösterilmiştir.
errorNullBaşarılı olursa. Bir hata oluşursa.
messageString
codeIntegerHata kodu

Parametre türü

Integer

Tanım

İstek tanımlayıcısı

Parametre türü

Null

Tanım

İstek başarısız olursa, aşağıdaki gibi bir sonuç elde edilir. Başarılı olması durumunda ise her yöntem için yanıt yapısı aşağıda gösterilmiştir.