Coinbase GDAX NodeJS - 无效的API密钥

时间:2017-09-29 02:36:17

标签: node.js fetch cryptojs coinbase-api gdax-api

我正在尝试编写一个脚本,取消我在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();

2 个答案:

答案 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

希望有所帮助...