Wenn Sie eine private Anfrage an Binance senden, wird die Nachricht signiert, um die Sicherheit der Anfragen zu erhöhen. Die Nachricht nimmt die lokale Zeit und sendet sie innerhalb der signierten Nachricht; wenn die lokale Zeit eine Differenz von mehr als 5 Sekunden zu den Binance-Servern hat, wird die Anfrage abgelehnt. Daher ist es wichtig zu überprüfen, dass Ihre lokale Zeit synchronisiert ist; Sie können dies mit der Zeitsynchronisationsmethode für Ihr Betriebssystem tun.
Die Logik ist wie folgt:
if (timestamp < (serverTime + 1000) && (serverTime - timestamp) <= recvWindow) {
// process request
} else {
// reject request
}
Es wird empfohlen, ein kleines recvWindow von 5000 oder weniger zu verwenden! Das Maximum darf 60000 Millisekunden nicht überschreiten.
Sie können die Binance-Serverzeit prüfen, indem Sie die Methode GetServerTime aufrufen, die die Zeit des Binance-Servers zurückgibt
Das RecvWindow ist standardmäßig 5000; dieser Wert kann über die Eigenschaft REST_API.BinanceOptions.RecvWindow erhöht werden.
Wenn Ihre Anwendung nicht garantieren kann, dass die lokale Uhr synchronisiert bleibt, zum Beispiel bei einem Headless-Server ohne zuverlässigen Zeitdienst, können Sie die Komponente die Abweichung ausgleichen lassen, anstatt dass jede private Anfrage abgelehnt wird. Setzen Sie REST_API.BinanceOptions.UseServerTimeOffset auf True (standardmäßig False) und rufen Sie die neue Methode SyncServerTime auf, wann immer Sie die Differenz zwischen der Binance-Serveruhr und Ihrer lokalen Uhr messen möchten, zum Beispiel einmal beim Start oder nach einem eigenen Zeitplan. SyncServerTime ruft GetServerTime auf, vergleicht die Zeit mit der lokalen Uhr und speichert die Differenz. Ab diesem Zeitpunkt enthält der Zeitstempel jeder signierten Anfrage diesen gespeicherten Offset.
Die gemessene Differenz steht über die schreibgeschützte Eigenschaft ServerTimeOffset zur Verfügung, in Millisekunden, positiv, wenn die Binance-Serveruhr Ihrer lokalen Uhr voraus ist. Es wird nichts automatisch gemessen oder angewendet, SyncServerTime muss explizit aufgerufen und UseServerTimeOffset muss aktiviert werden, sodass eine signierte Anfrage nur dann angepasst wird, wenn die Anwendung dies verlangt.