Подписи и 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;