Авторизация и подпись
API-ключ
Каждый запрос к API передаёт API-ключ в заголовке Authorization:
Authorization: Bearer zp_9fJ2kLm0QxVb7RtY4sWn1cEhUoPaZd8i
Если ключ не передан или неверен, API ответит с кодом 401:
{"error": "unauthorized", "status": 401}
Подпись запроса создания платежа
Запрос создания платежа дополнительно подписывается параметром sign. Подпись защищает от подмены суммы и подтверждает, что запрос отправил владелец магазина.
sign = sha1(currency + amount + shopId + секретный_ключ)
Значения склеиваются в указанном порядке без разделителей. Результат — строка из 40 шестнадцатеричных символов в нижнем регистре.
Пример
| currency | rub |
|---|---|
| amount | 1500.00 |
| shopId | 482193 |
| Секретный ключ | s3cr3t-key |
| Строка для подписи | rub1500.00482193s3cr3t-key |
| sign | 56ca36a52215141d58343fed155d15786508f182 |
Подписывайте
amount ровно в том виде, в каком отправляете его в запросе. Рекомендуем всегда передавать сумму строкой с двумя знаками после точки: "1500.00".$sign = sha1($currency . $amount . $shopId . $secretKey);
import hashlib
sign = hashlib.sha1(f"{currency}{amount}{shop_id}{secret_key}".encode()).hexdigest()
const crypto = require("crypto");
const sign = crypto
.createHash("sha1")
.update(`${currency}${amount}${shopId}${secretKey}`)
.digest("hex");
sum := sha1.Sum([]byte(currency + amount + strconv.Itoa(shopID) + secretKey))
sign := hex.EncodeToString(sum[:])
Подпись уведомлений
Уведомления о платежах, которые мы отправляем на ваш сервер, подписаны тем же секретным ключом магазина (HMAC-SHA256). Как проверить подпись — в разделе Формат уведомлений.
Если ключ скомпрометирован
Если API-ключ или секретный ключ мог попасть к посторонним, напишите на support@zefirpay.com: мы выпустим новые ключи, а старые отзовём.