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