cex.io web socket身份验证时间戳错误

时间:2017-07-09 17:22:37

标签: javascript node.js websocket

我正在尝试连接到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"}));
    }
});

2 个答案:

答案 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的时间和互联网的时间是相同的。 古德勒克!