diff --git a/src/main/java/com/binance/connector/client/SpotClient.java b/src/main/java/com/binance/connector/client/SpotClient.java index 2582aa63..91a7ccce 100644 --- a/src/main/java/com/binance/connector/client/SpotClient.java +++ b/src/main/java/com/binance/connector/client/SpotClient.java @@ -23,11 +23,13 @@ import com.binance.connector.client.impl.spot.Wallet; import com.binance.connector.client.utils.ProxyAuth; +import java.util.function.Supplier; public interface SpotClient { void setShowLimitUsage(boolean showLimitUsage); void setProxy(ProxyAuth proxy); void unsetProxy(); + void setTimeSupplier(Supplier timeSupplier); AutoInvest createAutoInvest(); C2C createC2C(); Convert createConvert(); diff --git a/src/main/java/com/binance/connector/client/impl/SpotClientImpl.java b/src/main/java/com/binance/connector/client/impl/SpotClientImpl.java index 713a9c6f..ba80d078 100644 --- a/src/main/java/com/binance/connector/client/impl/SpotClientImpl.java +++ b/src/main/java/com/binance/connector/client/impl/SpotClientImpl.java @@ -24,9 +24,12 @@ import com.binance.connector.client.impl.spot.VIPLoans; import com.binance.connector.client.impl.spot.Wallet; import com.binance.connector.client.utils.ProxyAuth; +import com.binance.connector.client.utils.TimeSupplier; import com.binance.connector.client.utils.signaturegenerator.HmacSignatureGenerator; import com.binance.connector.client.utils.signaturegenerator.SignatureGenerator; +import java.util.function.Supplier; + public class SpotClientImpl implements SpotClient { private final String apiKey; private final SignatureGenerator signatureGenerator; @@ -70,6 +73,11 @@ public void setShowLimitUsage(boolean showLimitUsage) { public void setProxy(ProxyAuth proxy) { this.proxy = proxy; } + + @Override + public void setTimeSupplier(Supplier timeSupplier) { + TimeSupplier.INSTANCE.setTimeProvider(timeSupplier); + } @Override public void unsetProxy() { diff --git a/src/main/java/com/binance/connector/client/utils/RequestHandler.java b/src/main/java/com/binance/connector/client/utils/RequestHandler.java index fc286496..f9b00e12 100644 --- a/src/main/java/com/binance/connector/client/utils/RequestHandler.java +++ b/src/main/java/com/binance/connector/client/utils/RequestHandler.java @@ -56,7 +56,7 @@ public String sendSignedRequest(String baseUrl, String urlPath, Map() : parameters; - parameters.putIfAbsent("timestamp", UrlBuilder.buildTimestamp()); + parameters.putIfAbsent("timestamp", TimeSupplier.INSTANCE.buildTimestamp()); parameters.put("signature", this.signatureGenerator.getSignature(UrlBuilder.joinQueryParameters(parameters))); String fullUrl = UrlBuilder.buildFullUrl(baseUrl, urlPath, parameters); diff --git a/src/main/java/com/binance/connector/client/utils/TimeSupplier.java b/src/main/java/com/binance/connector/client/utils/TimeSupplier.java new file mode 100644 index 00000000..5be5e375 --- /dev/null +++ b/src/main/java/com/binance/connector/client/utils/TimeSupplier.java @@ -0,0 +1,22 @@ +package com.binance.connector.client.utils; + +import java.util.function.Supplier; + +public class TimeSupplier { + + public static final TimeSupplier INSTANCE = new TimeSupplier(); + + private Supplier timeProvider; + + public TimeSupplier() { + timeProvider = System::currentTimeMillis; + } + + public void setTimeProvider(Supplier timeProvider) { + this.timeProvider = timeProvider; + } + + public String buildTimestamp() { + return String.valueOf(timeProvider.get()); + } +} diff --git a/src/main/java/com/binance/connector/client/utils/websocketapi/WebSocketApiRequestHandler.java b/src/main/java/com/binance/connector/client/utils/websocketapi/WebSocketApiRequestHandler.java index 47d964ea..f9b350f6 100644 --- a/src/main/java/com/binance/connector/client/utils/websocketapi/WebSocketApiRequestHandler.java +++ b/src/main/java/com/binance/connector/client/utils/websocketapi/WebSocketApiRequestHandler.java @@ -6,6 +6,7 @@ import com.binance.connector.client.utils.ParameterChecker; import com.binance.connector.client.utils.UrlBuilder; import com.binance.connector.client.utils.WebSocketConnection; +import com.binance.connector.client.utils.TimeSupplier; import com.binance.connector.client.utils.signaturegenerator.SignatureGenerator; import org.json.JSONObject; @@ -60,7 +61,7 @@ public void request(RequestType requestType, String method, JSONObject parameter ParameterChecker.checkParameterType(this.apiKey, String.class, "apiKey"); parameters = JSONParser.addKeyValue(parameters, "apiKey", this.apiKey); if (!parameters.has("timestamp")) { - parameters.put("timestamp", UrlBuilder.buildTimestamp()); + parameters.put("timestamp", TimeSupplier.INSTANCE.buildTimestamp()); } // signature