Тестирование Coinbase API с помощью Postman: разбивка на страницы выдает ошибку

#api #authentication #pagination #coinbase-api

#API #аутентификация #разбивка на страницы #coinbase-api

Вопрос:

Я тестирую конечные точки Coinbase API с помощью Postman, и проблема заключается в том, когда мне нужно разбить на страницы

Чтобы настроить Postman, я следовал инструкциям, доступным здесь и далее:

  1. добавлены переменные
    • coinbase-api-base
    • coinbase-api-key
    • coinbase-api-secret
    • coinbase-api-timestamp
    • coinbase-api-signature
  2. Добавлен сценарий предварительного запроса для генерации подписи запроса
 // 1. Import crypto-js library

var CryptoJS = require("crypto-js");

// 2. Create the JSON request object var req = { timestamp: Math.floor(Date.now() / 1000), // seconds since Unix epoch method:
pm.request.method, path: pm.request.url.getPath(), body: '', // empty
for GET requests message: undefined, secret:
pm.collectionVariables.get("coinbase-api-secret"), // read value from
collection variable hmac: undefined, signature: undefined, };

// 3. Create the message to be signed req.message = req.timestamp   req.method   req.path   req.body;

// 4. Create HMAC using message and API secret req.hmac = CryptoJS.HmacSHA256(req.message, req.secret);

// 5. Obtain signature by converting HMAC to hexadecimal String req.signature = req.hmac.toString(CryptoJS.enc.Hex);

// 6. Log the request console.info("request: ", req);

// 7. Set Postman request's authentication headers for Coinbase REST API call pm.collectionVariables.set("coinbase-api-timestamp",
req.timestamp); pm.collectionVariables.set("coinbase-api-signature",
req.signature);
 

все хорошо работало для простого запроса, такого как:

ПОЛУЧИТЬ {{coinbase-api-base}}/v2/accounts

затем, если я добавлю в основной параметр запроса (как описано здесь):

предел = 50

чтобы изменить разбивку на страницы по умолчанию, я получаю сообщение об ошибке аутентификации….

«ошибки»: [ { «id»: «authentication_error»,
«message»: «недопустимая подпись»
}

вопросы:

как я могу это исправить?

как тело запроса может работать с подписью запроса…

любое предложение о помощи приветствуется

Спасибо

Ответ №1:

Редактировать: как говорится ниже, я не уверен, что API базовых учетных записей поддерживает подкачку, хотя я могу ошибаться, документы CB, по меньшей мере, противоречивы. Похоже, что история учетных записей (бухгалтерская книга) и удержания все же сохраняются.

https://docs.cloud.coinbase.com/exchange/reference/exchangerestapi_getaccounts

получить функцию учетных записей в Node.js API не предоставляет параметр args там, где это делает регистр (см. Ниже).:

 getAccounts(callback) {
  return this.get(['accounts'], callback);
}
 

Документация для API, который поддерживает подкачку, обратите внимание, что он предоставляет вам раздел параметров запроса, недоступный в документации по учетным записям:

https://docs.cloud.coinbase.com/exchange/reference/exchangerestapi_getaccountledger

Глядя на api узла, вам все равно нужно добавить параметры строки запроса в тело, чтобы подписать:

вызывающая функция:

 return this.get(
  ['accounts', accountID, 'ledger'],
  { qs: args },
  callback
);
 

функция подписи:

 let body = '';
if (options.body) {
body = JSON.stringify(options.body);
} else if (options.qs amp;amp; Object.keys(options.qs).length !== 0) {
    body = '?'   querystring.stringify(options.qs);
}
const what = timestamp   method.toUpperCase()   path   body;
const key = Buffer.from(auth.secret, 'base64');
const hmac = crypto.createHmac('sha256', key);
const signature = hmac.update(what).digest('base64');
return {
  key: auth.key,
  signature: signature,
  timestamp: timestamp,
  passphrase: auth.passphrase,
};
 

Ответ №2:

Вы не можете добавить ограничение к телу запроса, запросы GET никогда не включают в себя какое-либо тело.

Вы должны добавить его в качестве параметра строки запроса, например (это всего лишь пример):

 GET {{coinbase-api-base}}/v2/accounts?limit=50   
 

Комментарии:

1. Спасибо. Я, вероятно, спросил это неправильно 😉 Я не вставил тело запроса… Я добавил ограничение в URL, и вдруг кажется, что моя подпись, сгенерированная с помощью сценария предварительного запроса, недействительна… но без параметров в URL он работает нормально…