0

我正在尝试编写一个脚本来取消我在 GDAX 上的所有订单。根据取消订单的文档,我需要向 /delete 发送 DELETE 请求。但我假设在我可以这样做之前,我需要先签署消息

当我在 Node 中使用 fetch 提交请求时,我得到以下响应:{ message: 'Invalid API Key' }

这是我正在处理的代码示例,当然替换了机密内容:

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();

4

1 回答 1

0

前往Gdax-Node Github repo并查看他们的代码和示例。

1)通过使用您的 api 详细信息配置它来创建一个 authenticatedClient,2)然后只需使用 authedClient 对象和 calncelAllOrders 方法:

authedClient.cancelAllOrders({product_id: 'BTC-USD'}, callback);

你可以用一个函数来包装它来调用“x”次(它在文档中说明),或者如果你愿意的话,你可以想到一些更高级的东西。

注意:- 确保您拉取 github 存储库并且不要直接从 npm 安装,因为在 git 存储库中已修复了一些错误和问题,但未推送到 npm。

...所以npm install coinbase/gdax-node在下载 gdax 包时使用。

希望对您有所帮助...

于 2018-01-03T12:59:38.943 回答