Создание подписи
Подпись создается с помощью HMAC SHA256. Для создания подписи необходимо использовать следующие поля в заданном порядке:
amount
currency_code
external_client_id
external_data
external_order_id
Сначала нужно сформировать строку из этих полей в следующем формате:
{amount};{currency_code};{external_client_id};{external_data};{external_order_id};
100.50;KZT;123456;{"key": "value"};123456;
Если какое-то из полей не передано, то оно должно быть заменено на пустую строку. Например, если external_client_id
и
external_data
не переданы, то строка будет выглядеть так:
{amount};{currency_code};;;{external_order_id};
100.50;KZT;;;123456;
Затем нужно взять секретный ключ (Api key) и сформировать подпись с помощью HMAC SHA256. Для получения секретного ключа зайдите в личный кабинет, в настройках кассы выберите Api keys, затем создайте новый ключ.
Важно! Секретный ключ API key показывается только один раз при создании.
Пример генерации подписи на PHP:
function hmacSignature(array $fields, array $fieldsOrder, string $apiKey): string
{
$signatureDataStr = "";
foreach ($fieldsOrder as $key) {
$signatureDataStr .= ($fields[$key] ?? "") . ";";
}
return hash_hmac('sha256', $signatureDataStr, $apiKey);
}
$signature = hmacSignature([
"amount" => 100.50,
"currency_code" => "KZT",
"external_client_id" => 123456,
"external_data" => json_encode(["key" => "value"]),
"external_order_id" => 123456,
], ["amount", "currency_code", "external_client_id", "external_data", "external_order_id"], "key_secret");
Пример генерации подписи на Python:
import hmac
import hashlib
import json
def hmac_signature(fields, fields_order, api_key):
signature_data_str = ""
for key in fields_order:
value = fields.get(key, "")
signature_data_str += str(value) + ";"
return hmac.new(api_key.encode('utf-8'), signature_data_str.encode('utf-8'), hashlib.sha256).hexdigest()
fields = {
"amount": 100.50,
"currency_code": "KZT",
"external_client_id": "123456",
"external_data": json.dumps({"key": "value"}, separators=(',', ':')), # Убедитесь, что JSON без пробелов
"external_order_id": 123456,
}
fields_order = ["amount", "currency_code", "external_client_id", "external_data", "external_order_id"]
api_key = "key_secret"
signature = hmac_signature(fields, fields_order, api_key)
Пример на node.js:
const crypto = require('crypto');
function hmacSignature(fields, fieldsOrder, apiKey) {
let signatureDataStr = "";
fieldsOrder.forEach(key => {
signatureDataStr += (fields[key] || "") + ";";
});
return crypto.createHmac('sha256', apiKey).update(signatureDataStr).digest('hex');
}
const signature = hmacSignature({
amount: 100.50,
currency_code: "KZT",
external_client_id: 123456,
external_data: JSON.stringify({ key: "value" }),
external_order_id: 123456,
}, ["amount", "currency_code", "external_client_id", "external_data", "external_order_id"], "key_secret");