Запитати ШІ
Українська UK
Перейти до Watbot

Підписи й Base64

Сторонні сервіси часто підписують свої запити або чекають підпису від вас, а дані передають у Base64. Для цього в коді є три функції.

hash_hmac

hash_hmac(algo, text, key, format)

Обчислює підпис HMAC від тексту за секретним ключем.

Параметр Тип Що передати
algo Рядок Алгоритм: 'md5', 'sha1', 'sha256', 'sha512' або 'md4'
text Рядок Що підписати
key Рядок Секретний ключ
format Рядок, необов'язково 'base64' — результат у Base64. Без параметра — у шістнадцятковому вигляді малими літерами

Повертає підпис рядком. Якщо algo, text або key порожні, повертає undefined.

Увага

Передавайте лише алгоритми зі списку. З іншою назвою, наприклад 'sha3', функція викине помилку TypeError: hash_hmac: unsupported algorithm "sha3"…. Якщо не перехопити її через try...catch, код зупиниться з цією помилкою.

Перевірити підпис вхідного запиту: сервіс магазину надсилає його в заголовку X-Signature, а секретний ключ зберігається в глобальній змінній бота.

var secret = getGlobalVariable('ключ_магазину');
var expected = hash_hmac('sha256', request.body, secret);

if (expected !== request.headers['x-signature']) {
    throw new Error('Неправильний підпис');
}

if (setContactById(request.data.contact_id)) {
    setContactVariable('статус_замовлення', request.data.status);
}

Якщо підпис не збігся, код зупиниться, і блок відповість на запит кодом 422.

base64_encode

base64_encode(text)

Кодує текст у Base64.

Параметр Тип Що передати
text Рядок Що закодувати. Кириличні літери кодуються в UTF-8

Повертає рядок у Base64.

var auth = 'Basic ' + base64_encode('flowers:secret-password');

base64_decode

base64_decode(text)

Розкодовує рядок із Base64.

Параметр Тип Що передати
text Рядок Рядок у стандартному Base64

Повертає розкодований текст або undefined, якщо рядок — не Base64.

var payload = base64_decode(request.data.payload);
var order = payload ? JSON.parse(payload) : null;