ИСПРАВИТЬ ошибку остановки соединения при отправке входа в системуPython

Программы на Python
Ответить
Anonymous
 ИСПРАВИТЬ ошибку остановки соединения при отправке входа в систему

Сообщение Anonymous »

Я создаю проект для получения рыночных данных от Deribit FIX. Для этого я использую QuickFIX.
Вот мой блок кода toAdmin и fromAdmin, который обрабатывает логику подключения при входе в систему:

Код: Выделить всё

def toAdmin(self, message, sessionID):
"""Handles message authentication for outgoing admin messages."""
msg_type = fix.MsgType()
message.getHeader().getField(msg_type)

if msg_type.getValue() == fix.MsgType_Logon:
nonce = os.urandom(32)
timestamp_ms = str(int(time.time() * 1000))
nonce_b64 = base64.b64encode(nonce).decode('utf-8')
raw_data = f"{timestamp_ms}.{nonce_b64}"

signature_input = raw_data + self.client_secret
signature_hash = hashlib.sha256(signature_input.encode('utf-8')).digest()
signature_b64 = base64.b64encode(signature_hash).decode('utf-8')

message.setField(fix.Username(self.client_id))        # tag 553
message.setField(fix.Password(signature_b64))         # tag 554
message.setField(fix.RawDataLength(len(raw_data)))    # tag 95
message.setField(fix.RawData(raw_data))               # tag 96

logger.info("Sending Logon with Deribit authentication")
logger.info(f"Client ID: {self.client_id}")
logger.info(f"Client Secret (first 10): {self.client_secret[:10]}...")
logger.info(f"Timestamp: {timestamp_ms}")
logger.info(f"RawData length: {len(raw_data)}")
logger.info(f"RawData: {raw_data}")
logger.info(f"Signature (first 20): {signature_b64[:20]}...")
logger.info(f"Full Logon Message:\n{message.toString()}")

def fromAdmin(self, message, sessionID):
"""Handles incoming admin messages from Deribit."""
msg_type = fix.MsgType()
message.getHeader().getField(msg_type)

logger.info(f"Received admin message type: {msg_type.getValue()}")
logger.info(f"Full message:\n{message.toString()}")

if msg_type.getValue() == fix.MsgType_Logon:
logger.info("Logon acknowledgment received from Deribit!")

elif msg_type.getValue() == fix.MsgType_Logout:
text = fix.Text()
if message.isSetField(text):
message.getField(text)
logger.error(f"LOGOUT RECEIVED - Reason: {text.getValue()}")
else:
logger.error("LOGOUT RECEIVED - No reason provided")
logger.error(f"Full logout message:\n{message.toString()}")

elif msg_type.getValue() == fix.MsgType_Reject:
logger.error(f"REJECT RECEIVED:\n{message.toString()}")
if message.isSetField(fix.Text()):
text = fix.Text()
message.getField(text)
logger.error(f"Reject reason: {text.getValue()}")

else:
logger.debug(f"Admin message type: {msg_type.getValue()}")

def toApp(self, message, sessionID):
"""Handles outgoing application messages."""
logger.debug(f"Sending message to app: {message}")

def fromApp(self, message, sessionID):
"""Handles incoming application messages."""
try:
self.process_message(message, sessionID)
except Exception as e:
logger.error(f"Error processing message: {e}", exc_info=True)
Когда я запускаю проект, я вижу это в своем терминале:

Код: Выделить всё

2025-12-04 00:42:48,691 - INFO -  Sending Logon with Deribit authentication
2025-12-04 00:42:48,743 - INFO - connection stops on this idFIX.4.4:MYTRADER->DERIBITSERVER
На данный момент я проверил, что мои учетные данные Deribit API верны и имеют разрешения как на чтение, так и на запись.


Подробнее здесь: https://stackoverflow.com/questions/798 ... ding-logon
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»