Перейти к содержанию

Контрольная подпись


Контрольная подпись (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
text/plain; charset=UTF-8
OK

Библиотека

Скачать коллекцию Postman с примером.