Контрольная подпись
Контрольная подпись (hash) в IntellectMoney используются для подтверждения источника запроса (Sign) и для защиты параметров от изменений (Hash / PurchaseHash).
Виды подписей
- Подпись авторизации запроса (заголовок
Sign). Используется вместе сAuthorization: Bearer {token}и подтверждает подлинность запроса. Для расчёта применяется алгоритм SHA-256 с секретным ключом для подписи (SignSecretKey). Подробнее об использование Bearer токена. - Подпись данных запроса (
Hash) и данных HTML-формы (PurchaseHash). Гарантирует целостность параметров запроса. Для расчёта применяется алгоритм MD5 с секретным ключом (SecretKey), указанным в настройках магазина на вкладке "Подключение магазина". По умолчанию секретный ключ отсутствует — его необходимо указать самостоятельно.
Общие правила
- Для каждого метода задана своя сигнатура (порядок полей) для
Sign,Hash,PurchaseHash, где в конец строки добавляется соответствующий секретный ключ. - Строка для подписи формируется путём конкатенации значений через двойное двоеточие (
::). - Если параметр присутствует в сигнатуре, но значение отсутствует, оставляйте пустой сегмент — то есть два разделителя подряд (
::::). Не подставляйте пустую строку ('') и не удаляйте поле из сигнатуры. - В конце сигнатуры добавляется ключ:
::SignSecretKeyдляSignи::SecretKeyдляHash/PurchaseHash. - Кодировка строки перед хешированием —
UTF-8(без BOM). Если в расширенных настройках магазина на вкладке "Подключение магазина" выбрана иная кодировка, используйте её же при расчёте подписи. - Вывод подписи — шестнадцатеричная строка в нижнем регистре (hex lowercase).
- Не выполняйте URL-кодирование перед подписанием: подписывайте значения в том виде, как они уходят в запросе (числа — с точкой, строки — без экранирования, регистр сохраняется).
Ниже приведены примеры для Postman — создание СКО и получение уведомления — где подробно показано, как рассчитывается подпись (hash). Другие запросы выполняются аналогично. В примере используются, только REQUIRED параметры. Рекомендуется тестировать работу методов с минимальным набором параметров и по мере необходимости добавлять опциональные.
Пример создания СКО
Postman
// Метод
POST https://api.intellectmoney.ru/merchant/createInvoice
// Заголовки запроса
"Accept": "application/json",
"Content-Type": "application/json",
"Authorization": "Bearer 9d97820c61424eb6ac0db414ccb7ac60",
"Sign": "6eef9f905341e119885264cd27e2263a7c4d9bb7f7bdf4c18f8962617a4986d0"
// Тело запроса
"EshopId": 450000,
"OrderId": "Номер заказа",
"RecipientAmount": "1.00",
"RecipientCurrency": "RUB",
"Email": "test@mail.ru",
"Hash": "490aab0630409a5eeede5028a78e624e"
Postman
// Сигнатура для заголовка Sign (метод CreateInvoice):
"EshopId::OrderId::ServiceName::RecipientAmount::RecipientCurrency::UserName::Email::SuccessUrl::::BackUrl::ResultUrl::ExpireDate::HoldMode::Preference::SignSecretKey"
// Сформированная строка для подписи (строго по сигнатуре, значения подставлены из примера, в конце — строка секретного ключа от токена):
var signature = "450000::Номер заказа::::1.00::RUB::::test@mail.ru::::::::::::::::VALUE_SIGN_SECRET_KEY"
// Расчёт подписи алгоритмом SHA-256 (входная строка в UTF-8, вывод — hex в нижнем регистре):
var hash = CryptoJS.SHA256(signature).toString();
// Получен хеш 6eef9f905341e119885264cd27e2263a7c4d9bb7f7bdf4c18f8962617a4986d0:
console.log(hash);
Postman
// Сигнатура для параметра Hash (метод CreateInvoice):
"EshopId::OrderId::ServiceName::RecipientAmount::RecipientCurrency::UserName::Email::SuccessUrl::::BackUrl::ResultUrl::ExpireDate::HoldMode::Preference::SecretKey"
// Сформированная строка для подписи (строго по сигнатуре, значения подставлены из примера, в конце — строка секретного ключа от магазина):
var signature = "450000::Номер заказа::::1.00::RUB::::test@mail.ru::::::::::::::::VALUE_SECRET_KEY"
// Расчёт подписи алгоритмом MD5 (входная строка в UTF-8, вывод — hex в нижнем регистре):
var hash = CryptoJS.MD5(signature).toString();
// Получен хеш 490aab0630409a5eeede5028a78e624e:
console.log(hash);
Postman
// Параметр PurchaseHash не указан в запросе и представлен для примера расчёта подписи.
// Сигнатура для параметра PurchaseHash (метод CreateInvoice):
"EshopId::OrderId::ServiceName::RecipientAmount::RecipientCurrency::SecretKey"
// Сформированная строка для подписи (строго по сигнатуре, значения подставлены из примера, в конце — строка секретного ключа от магазина):
var signature = "450000::Номер заказа::::1.00::RUB::VALUE_SECRET_KEY"
// Расчёт подписи алгоритмом MD5 (входная строка в UTF-8, вывод — hex в нижнем регистре):
var hash = CryptoJS.MD5(signature).toString();
// Получен хеш c52bb3280985dc4878b3ecd766d64189:
console.log(hash);
JSON
{
"OperationState": {
"Code": 0,
"Desc": "Успешно обработана"
},
"EshopId": 450000,
"Result": {
"State": {
"Code": 0,
"Desc": "Успешно обработан"
},
"InvoiceId": 3000000000,
"PaymentWays": [
{
"Id": 1,
"Amount": {
"Amount": 1.0,
"Currency": "RUB"
},
"InputType": "Acquiring",
"Preference": "BankCard",
"PreferenceTypes": [
"All",
"Popular",
"Online",
"NonComission",
"Flash"
],
"ServiceTimeOfEnrollmentType": "Flash",
"Commission": 0.0,
"IsVisible": true,
"IsActive": true,
"Position": 0
}
]
}
}
Пример уведомления по СКО
Postman
// Метод
POST https://example.ru
// Заголовки запроса
"Accept": "text/plain; charset=UTF-8",
"Content-Type": "application/x-www-form-urlencoded; charset=UTF-8"
// Тело запроса
"PaymentId": "3000000000",
"EshopId": "450000",
"OrderId": "Номер заказа",
"ServiceName": "",
"EshopAccount": "6000000000",
"RecipientOriginalAmount": "1.00",
"RecipientAmount": "1.00",
"RecipientCurrency": "RUB",
"PaymentStatus": "3",
"UserEmail": "test@mail.ru",
"PaymentData": "2025-01-01 12:00:00",
"Hash": "7243872fc9e4bc72d13a80bba5926346"
Postman
// Сигнатура для параметра Hash (уведомления для СКО):
"EshopId::OrderId::ServiceName::EshopAccount::RecipientAmount::RecipientCurrency::PaymentStatus::UserName::UserEmail::PaymentData::SecretKey"
// Сформированная строка для подписи (строго по сигнатуре, значения подставлены из примера, в конце — строка секретного ключа от магазина):
var signature = "450000::Номер заказа::::6000000000::1.00::RUB::3::::test@mail.ru::2025-01-01 12:00:00::VALUE_SECRET_KEY"
// Расчёт подписи алгоритмом MD5 (входная строка в UTF-8, вывод — hex в нижнем регистре):
var hash = CryptoJS.MD5(signature).toString();
// Получен хеш 7243872fc9e4bc72d13a80bba5926346:
console.log(hash);
// Если полученный хеш равен параметру Hash из уведомления по СКО — отправляем OK, иначе верификация не пройдена:
"7243872fc9e4bc72d13a80bba5926346" === Hash ? "OK" : null