Lorsque vous effectuez une requête privée vers Binance, le message est signé pour renforcer la sécurité des requêtes. Le message inclut l'heure locale et l'envoie dans le message signé ; si l'heure locale présente un écart supérieur à 5 secondes avec les serveurs Binance, la requête sera rejetée. Il est donc important de vérifier que votre heure locale est synchronisée, ce que vous pouvez faire en utilisant la méthode de synchronisation de l'heure de votre système d'exploitation.
La logique est la suivante :
if (timestamp < (serverTime + 1000) && (serverTime - timestamp) <= recvWindow) {
// process request
} else {
// reject request
}
Il est recommandé d'utiliser une petite recvWindow de 5000 ou moins ! La valeur maximale ne peut pas dépasser 60000 millisecondes.
Vous pouvez vérifier l'heure du serveur Binance en appelant la méthode GetServerTime, qui retournera l'heure du serveur Binance
La RecvWindow est par défaut à 5000, cette valeur peut être augmentée en utilisant la propriété REST_API.BinanceOptions.RecvWindow.
Si votre application ne peut pas garantir que l'horloge locale reste synchronisée, par exemple un serveur sans interface graphique ne disposant d'aucun service de temps fiable, vous pouvez laisser le composant corriger ce décalage au lieu de voir chaque requête privée rejetée. Définissez REST_API.BinanceOptions.UseServerTimeOffset sur True (par défaut False) et appelez la nouvelle méthode SyncServerTime chaque fois que vous souhaitez mesurer la différence entre l'horloge du serveur Binance et votre horloge locale, par exemple une fois au démarrage ou selon la fréquence de votre choix. SyncServerTime appelle GetServerTime, la compare à l'horloge locale, puis enregistre la différence. À partir de là, l'horodatage de chaque requête signée inclut ce décalage enregistré.
La différence mesurée est disponible via la propriété en lecture seule ServerTimeOffset, exprimée en millisecondes, positive lorsque l'horloge du serveur Binance est en avance sur votre horloge locale. Rien n'est mesuré ni appliqué automatiquement, SyncServerTime doit être appelée explicitement et UseServerTimeOffset doit être activée, de sorte qu'une requête signée n'est ajustée que lorsque l'application le demande.