Hmac256 Подпись неверная ошибка Google App Script - PullRequest
0 голосов
/ 10 января 2019

Я пытаюсь получить сделки из службы под названием 3Commas в Google Apps Script. Я работал с общедоступными конечными точками раньше, но я впервые пытался работать с подписанными конечными точками. В настоящее время я получаю сообщение об ошибке:

[19-01-09 16:46:24:592 EST] {"error":"signature_invalid","error_description":"Provided signature is invalid"}

Я предполагаю, что это проблема форматирования с моей стороны. Я использую jsSHA для создания части HMAC. Я попытался следовать примеру в документах. Но я еще не совсем понял. Любые предложения о том, что это может быть?

3Комментарии: https://github.com/3commas-io/3commas-official-api-docs#signed--endpoint-security

function main() {
  var key = 'apikey';
  var secret = 'apisecret';

  var baseUrl = "https://3commas.io/public/api";
  var endPoint = "/ver1/smart_trades";
  var pointParams = "?limit=10&offset=&account_id=&scope=&type="
  //base url + end point + params
  var queryString = baseUrl+endPoint+pointParams;

  var message = queryString;
  var secret = secret;
  var shaObj = new jsSHA("SHA-256", "TEXT");
  shaObj.setHMACKey(secret, "B64");
  shaObj.update(message);
  var signature = shaObj.getHMAC("B64");

  //headers
  var hparams = {
    'method': 'get',
    'headers': {'APIKEY': key,
                'Signature': signature},
    'muteHttpExceptions': true
  };
  //call
  var data = UrlFetchApp.fetch(queryString , hparams).getContentText();
  Logger.log(data)

}

1 Ответ

0 голосов
/ 10 января 2019

Как насчет этой модификации? Из 3Commas Docs в вашем вопросе я предлагаю следующие пункты модификации.

Очки модификации:

  • Кажется, что значение, которое требуется для шифрования, следует после https://3commas.io.
  • Вы можете зашифровать значения, используя метод computeHmacSha256Signature() в Class Utilities of GAS. В этом случае jsSHA не требуется использовать.
    • Но когда используется computeHmacSha256Signature(), значение становится массивом байтов шестнадцатеричного числа со знаком. Поэтому требуется преобразовать его в шестнадцатеричное без знака.

Модифицированный скрипт:

function main() {
  var key = 'apikey';
  var secret = 'apisecret';

  var baseUrl = "https://3commas.io"; // Modified
  var endPoint = "/public/api/ver1/smart_trades"; // Modified
  var pointParams = "?limit=10&offset=&account_id=&scope=&type="; // or "?limit=10"
  var queryString = endPoint + pointParams; // Modified
  var signature = Utilities.computeHmacSha256Signature(queryString, secret); // Added
  signature = signature.map(function(e) {return ("0" + (e < 0 ? e + 256 : e).toString(16)).slice(-2)}).join("");  // Added

  //headers
  var hparams = {
    'method': 'get',
    'headers': {'APIKEY': key,
                'Signature': signature},
    'muteHttpExceptions': true
  };
  //call
  var data = UrlFetchApp.fetch(baseUrl + queryString , hparams).getContentText(); // Modified
  Logger.log(data)
}

Примечание:

  • О var pointParams = "?limit=10&offset=&account_id=&scope=&type=", в случае использования конечной точки, предел, смещение, account_id, область и тип не являются обязательными. Так что это может быть var pointParams = "?limit=10". Если ошибка возникает, попробуйте.

Ссылки

Я не могу подтвердить, работает ли этот модифицированный скрипт. Я извиняюсь за эту ситуацию. Так что, если это не сработало, я прошу прощения. В то время, можете ли вы предоставить подробную информацию о ситуации?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...