我正在尝试连接到CEX.IO比特币交易所的websocket。 Websocket连接没问题,但在验证时,我有错误:时间戳不在20秒范围内。我不知道这个错误是什么。
测试案例1& 2 for createSignature没问题(https://cex.io/websocket-api#authentication)。
计算签名和请求参数的代码
const WebSocket = require('ws');
const cexioWs = new WebSocket(
'wss://ws.cex.io/ws/',
{
perMessageDeflate: false
}
);
function createAuthRequest(apiKey, apiSecret) {
let curTime = Math.floor(Date.now() / 1000);
let hmac = crypto.createHmac('sha256', apiSecret);
hmac.update(curTime.toString());
hmac.update(apiKey);
let args =
{
e: "auth",
auth: {
key: apiKey,
signature: hmac.digest('hex'), //createSignature(curTime, apiKey, apiSecret),
timestamp: curTime
}
};
let authMessage = JSON.stringify(args);
console.log(args);
return authMessage;
}
cexioWs.on('message', (mess, error) => {
//console.log("connected");
console.log("cexio message");
console.log(mess);
let JSONMess = JSON.parse(mess);
if (JSONMess.e === "connected") {
cexioWs.send(createAuthRequest(key, secret));
cexioWs.send(JSON.stringify({
e: "subscribe",
roomss: [
"tickers"
]
}));
}
if (JSONMess.e === "ping") {
console.log("pong message");
cexioWs.send(JSON.stringify({e: "pong"}));
}
});
答案 0 :(得分:2)
这是工作代码:
buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath("org.springframework.boot:spring-boot-gradle-plugin:1.5.6.RELEASE")
}
}
apply plugin: 'java'
apply plugin: 'eclipse'
apply plugin: 'org.springframework.boot'
答案 1 :(得分:2)
不知道这是否有帮助,但我在两天内遇到了同样的问题,检查了一切,然后检查了一下,代码看起来非常好。后来我查看了我的实际时间,并将其与互联网时间进行了比较。我的电脑时间早于互联网时间提前4分钟,我的设置因互联网更新时间而关闭。
通过互联网同步我的电脑后,我运行了脚本并且运行正常。
故事的道德,确保您的PC的时间和互联网的时间是相同的。 古德勒克!