我正在尝试编写一个脚本,取消我在GDAX上的所有订单。根据{{3}},我需要向/删除发送DELETE请求。但我认为在我做之前我需要先the documentation for Cancel an Order。
当我在Node中使用fetch提交请求时,我收到了以下回复: {message:'无效的API密钥'}
以下是我正在处理的代码示例,其中保密内容当然已被替换:
var crypto = require('crypto');
var fetch = require('fetch');
const coinbaseSecret = 'abc...';
const coinbaseAPIKey = 'abc...';
const coinbasePassword = 'abc...';
const coinbaseRestAPIURL = "https://api-public.sandbox.gdax.com";
function start(){
getTime(function(time){
cancelAll(time, function(){
console.log('done');
});
});
}
function getTime(callback){
fetch.fetchUrl(coinbaseRestAPIURL + '/time', null, function(error, meta, body){
var response = JSON.parse(body.toString());
console.log('response', response);
var timeStamp = response.epoch;
callback(timeStamp);
});
}
function cancelAll(timeStamp, callback) {
// Refer to https://docs.gdax.com/#cancel-an-order
var signature = getSignature('DELETE', '/delete', "");
console.log('signature', signature);
var headers = {
'Content-Type': 'application/json',
'CB-ACCESS-KEY': coinbaseAPIKey,
'CB-ACCESS-SIGN': signature,
'CB-ACCESS-TIMESTAMP': timeStamp, //Date.now() / 1000,
'CB-ACCESS-PASSPHRASE': coinbasePassword
};
console.log('headers', headers);
fetch.fetchUrl(coinbaseRestAPIURL + '/delete', {
method: 'DELETE',
headers: headers
}, function(error, meta, body){
var response = JSON.parse(body.toString());
console.log('response', response);
callback();
})
}
function getSignature(method, requestPath, body) {
// Refer to https://docs.gdax.com/#signing-a-message
const secret = coinbaseSecret;
const timestamp = Date.now() / 1000;
const what = timestamp + method + requestPath + body;
const key = Buffer(secret, 'base64');
const hmac = crypto.createHmac('sha256', key);
const signature = hmac.update(what).digest('base64');
return signature;
}
start();
答案 0 :(得分:0)
在使用PHP调用时我得到了相同的拒绝,并在创建密钥时尝试了几种权利/ IP白名单组合,没有人工作。
然而,相同的代码适用于沙箱,所以我认为它可能不是代码中的问题,除非,sandbox和live需要不同的标题,这将是非常令人惊讶的。沙箱也不能正常工作,当我写这个时,自动收报机端点不断返回“内部服务器错误”......
尚未找到解决方案。
答案 1 :(得分:0)
转到Gdax-Node Github repo并查看他们的代码和示例。
1)通过配置api详细信息创建authenticatedClient, 2)然后只需使用authedClient对象和calncelAllOrders方法:
authedClient.cancelAllOrders({product_id: 'BTC-USD'}, callback);
你可以用一个函数来包装它来调用'x'次(它在文档中说明),或者如果你愿意,你可以冷静地想一些更好的东西。
注意: - 确保你拉github repo并且不要直接从npm安装,因为有一些bug和问题已经在git repo上修复但没有被推到npm。
...所以在下载gdax软件包时请使用npm install coinbase/gdax-node
。
希望有所帮助...