#authentication #google-apps-script #kraken.com
Вопрос:
Я пытаюсь преобразовать аутентификацию API python kraken в скрипт Google, чтобы использовать его в электронной таблице Google, но безрезультатно.
# python sample
def get_kraken_signature(urlpath, data, secret):
postdata = urllib.parse.urlencode(data)
encoded = (str(data['nonce']) postdata).encode()
message = urlpath.encode() hashlib.sha256(encoded).digest()
mac = hmac.new(base64.b64decode(secret), message, hashlib.sha512)
sigdigest = base64.b64encode(mac.digest())
return sigdigest.decode()
api_sec = "kQH5HW/8p1uGOVjbgWA7FunAmGO8lsSUXNsu3eow76sz84Q18fWxnyRzBHCd3pd5nE9qa99HAZtuZuj6F1huXg=="
data = {
"nonce": "1616492376594",
"ordertype": "limit",
"pair": "XBTUSD",
"price": 37500,
"type": "buy",
"volume": 1.25
}
signature = get_kraken_signature("/0/private/AddOrder", data, api_sec)
print("API-Sign: {}".format(signature))
# prints API-Sign: 4/dpxb3iT4tp/ZCVEwSnEsLxx0bqyhLpdfOpc6fn7OR8 UClSV5n9E6aSS8MPtnRfp32bAb0nmbRn6H8ndwLUQ==
Я закончил с этим, но это не возвращает тот же результат.
# google script sample from my sheet
function get_kraken_sinature(url, data, nonce, secret) {
var message = url Utilities.computeDigest(Utilities.DigestAlgorithm.SHA_256, Utilities.base64Encode(nonce data));
var base64Secret = Utilities.base64Decode(secret);
var mac = Utilities.computeHmacSignature(Utilities.MacAlgorithm.HMAC_SHA_512, message, secret);
return Utilities.base64Encode(mac);
}
signature = get_kraken_signature("/0/private/AddOrder", data, api_sec)
print("API-Sign: {}".format(signature))
# prints API-Sign: Jn6Zk8v41uvMWOY/RTBTrb7zhGxyAOTclFFe7lySodBnEnXErfJgIcQb90opFwccuKDd0Nt1l71HT3V9 P8pUQ==
Оба примера кода должны делать одно и то же и должны выводить идентичный ключ API-подписи. Они не находятся на этой стадии, и мне интересно, почему это так.
Комментарии:
1. Когда ваш скрипт python работает и вы хотите преобразовать свой скрипт python в скрипт Google Apps, можете ли вы предоставить примеры входных и выходных значений для вашего скрипта python? И, похоже, в вашем скрипте Google Apps запрос не виден. В этом случае ваш скрипт для запроса к API работает нормально, когда функция
get_kraken_sinature
может возвращать правильное значение. Правильно ли я понимаю?2. Спасибо за ответ, я добавил значения параметров и выходные данные. И да, вы правы !
3. Спасибо, что ответили. Судя по вашему ответу, я хотел бы ответить на него. Но на данном этапе, к сожалению, я не могу ответить на ваш вопрос, потому что ваш вопрос закрыт. Теперь я проголосовал за повторное рассмотрение вашего вопроса. Но для этого необходимо также проголосовать от других пользователей. Так что не могли бы вы подождать с повторным ответом на свой вопрос? Когда ваш вопрос будет вновь открыт, я хотел бы ответить на него.
4. Пожалуйста, избегайте неспецифических терминов, таких как «не работает». Всегда будьте конкретны в том, что не работает. Я отредактировал этот термин.
5. @Tanaike Не стесняйтесь делать запрос на повторное открытие в чате или socvr, если он не открыт.
Ответ №1:
Я считаю, что ваша цель заключается в следующем.
- Вы хотите преобразовать свой скрипт на python в скрипт Google приложений.
- В своем скрипте Google Apps вы уже подтвердили, что скрипт для запроса работает нормально. Вы хотите преобразовать
get_kraken_signature
свой скрипт python в скрипт Google Apps.
В этом случае, как насчет следующего измененного сценария?
Измененный сценарий:
function get_kraken_sinature(url, data, nonce, secret) {
var str = Object.entries(data).map(([k, v]) => `${k}=${v}`).join("amp;");
var message = Utilities.newBlob(url).getBytes().concat(Utilities.computeDigest(Utilities.DigestAlgorithm.SHA_256, nonce str));
var mac = Utilities.computeHmacSignature(Utilities.MacAlgorithm.HMAC_SHA_512, message, Utilities.base64Decode(secret));
return Utilities.base64Encode(mac);
}
// Please run this function.
function main() {
const data = {
"nonce": "1616492376594",
"ordertype": "limit",
"pair": "XBTUSD",
"price": 37500,
"type": "buy",
"volume": 1.25
};
var url = "/0/private/AddOrder";
var nonce = "1616492376594";
var secret = "kQH5HW/8p1uGOVjbgWA7FunAmGO8lsSUXNsu3eow76sz84Q18fWxnyRzBHCd3pd5nE9qa99HAZtuZuj6F1huXg==";
var res = get_kraken_sinature(url, data, nonce, secret);
console.log(res)
}
Рекомендации:
Комментарии:
1. Чувак, ты мой спаситель. Я знал, что неправильно использую методы. Эти махинации с кодированием не укладываются у меня в голове, поэтому я очень ценю ваш ответ. Я собираюсь взглянуть на ваше решение, чтобы оно пришло мне в голову. Еще раз спасибо 🙂