Аутентификация запросов в системе Moneygate
В этом разделе руководства представлены протоколы аутентификации запросов в системе Moneygate.
Предварительно выполненные действия
Мерчант зарегистрировался в системе Moneygate.
Общие сведения
Система Moneygate использует один из двух протоколов аутентификации, который определяется методом HTTP-запроса:
- GET
- POST
Оба протокола используют следующие элементы:
- Передача UUID-токена идентификации в HTTP-заголовке
X-Auth-Token - Передача электронной подписи в HTTP-заголовке
X-Auth-Signв кодировке Base64
Аутентификация POST запросов
Алгоритм аутентификации POST запросов состоит из следующих шагов:
- Шаг 1 – Вычислить электронную подпись raw-строки тела запроса (request body) по криптографическому алгоритму SHA-256 with RSA в кодировке Base64
Пример для Linux shell
Ниже представлен пример вычисления электронной подписи тела запроса:
echo -n '{
"id": "449bc546-e589-4aca-83fd-b41c2e03fbde",
"service_id": 6001,
"data": {
"callback_url": "https://example.merchant-side.com/send-status-here",
"amount": 100000,
"currency": "TRY"
}
}' | openssl dgst -sha256 -sign moneygate.key | base64
В приведенной команде moneygate.key - файл закрытого ключа RSA системы мерчанта.
В результате выполнения команды будет выведена электронная подпись в кодировке Base64:
wK/KdRlYzTEumjQjyJBU9S0Iz2c/h+wL9YJBR9zAr4/29HgUkCb2yb7XY9SPle0NlUc+FkkjOeUx
EexONPt9ateb33LZjCNNXsQpxsMkJCv5Fqq7k2yRxgL+LegfZXrjU4xLYg88X7jvJR9CgWTkqJWn
PS3ras1H79rhlT4hV6OvvdLPH21xhkCC1QjJP3OiBkRqLEAA1nvYKHgx8Wug8VvceuQL5zKzuZdB
khKISj3mvKTxKJEl5S4Lp/RMpNibdaGICo4B2nAAwHhuMPB6o/C02Makc86NRVEPqEvQymGXUrrM
K89XYAr0xyNwiqk80juSyfz2pSfHIc9m4kHgZg==
- Шаг 2 – Установить в заголовок
X-Auth-Tokenтокен идентификации мерчанта - Шаг 3 – Установить в заголовок
X-Auth-Signполученную электронную подпись
После чего HTTP-запрос готов к отправке.
Пример для Linux shell
Ниже представлен пример подписанного POST-запроса:
curl --location 'https://moneygate.master.blowfish.api4ftx.cloud/v1/host-to-host/deposit-orders/new' \
--header 'X-Auth-Token: 2817ea0c-bddf-4b7c-9e40-932a386b6b46' \
--header 'X-Auth-Sign: wK/KdRlYzTEumjQjyJBU9S0Iz2c/h+wL9YJBR9zAr4/29HgUkCb2yb7XY9SPle0NlUc+FkkjOeUxEexONPt9ateb33LZjCNNXsQpxsMkJCv5Fqq7k2yRxgL+LegfZXrjU4xLYg88X7jvJR9CgWTkqJWnPS3ras1H79rhlT4hV6OvvdLPH21xhkCC1QjJP3OiBkRqLEAA1nvYKHgx8Wug8VvceuQL5zKzuZdBkhKISj3mvKTxKJEl5S4Lp/RMpNibdaGICo4B2nAAwHhuMPB6o/C02Makc86NRVEPqEvQymGXUrrMK89XYAr0xyNwiqk80juSyfz2pSfHIc9m4kHgZg==' \
--header 'Content-Type: application/json' \
--header 'Accept: application/json' \
--data '{
"id": "449bc546-e589-4aca-83fd-b41c2e03fbde",
"service_id": 6001,
"data": {
"callback_url": "https://example.merchant-side.com/send-status-here",
"amount": 100000,
"currency": "TRY"
}
}'
Аутентификация GET запросов
Алгоритм аутентификации GET запросов состоит из следующих шагов:
- Шаг 1 – Сгенерировать случайную строку, которая будет использоваться в качестве имитовставки запроса
- Шаг 2 – Вычислить электронную подпись имитовставки по криптографическому алгоритму SHA-256 with RSA в кодировке Base64
Пример для Linux shell
Ниже представлен пример вычисления электронной подписи имитовставки:
echo -n '449bc546-e589-4aca-83fd-b41c2e03fbde' | openssl dgst -sha256 -sign moneygate.key | base64
В приведенной команде:
moneygate.key- файл закрытого ключа RSA системы мерчанта449bc546-e589-4aca-83fd-b41c2e03fbde- сгенерированная имитовставка запроса
В результате выполнения команды будет выведена электронная подпись в кодировке Base64:
ZqSncJY4WOWNYUU2DV5iwPeEwe16l0DPUlQZDU47wNxFS+yOhwr/hWzdk5jt9xdxfC8+5FZ/8O8p
5GoWGzXUooO3KWoSDCcdjzjiwd0wHev0oQfnasGCLyD2nCoXT8ozSDvF/n74RAWNNuXztN6f62cv
V42GP/uwUfKioTSvy451l9P+c3rOgILs0X5zX7NEYZ09SOy3fVg73lyPaJ5ohpVDOb3yaIupIEBz
hSOyLqx+g/wxnda9hIkxX1MlmqZk36nbH7x/OMvLiVrh14fFNj6bgQHDU6qh9lGXeej6J0XJ055g
FI9Yl8rmfPfY6qc6vEHy+OaX10y4EO042BXdiw==
- Шаг 3 – Установить в заголовок
X-Auth-Tokenтокен идентификации мерчанта - Шаг 4 – Установить в заголовок
X-Request-IDимитовставку запроса - Шаг 5 – Установить в заголовок
X-Auth-Signэлектронную подпись
После чего HTTP-запрос готов к отправке.
Пример для Linux shell
Ниже представлен пример подписанного GET-запроса:
curl --location 'https://moneygate.master.blowfish.api4ftx.cloud/v1/balance' \
--header 'X-Auth-Token: 2817ea0c-bddf-4b7c-9e40-932a386b6b46' \
--header 'X-Request-ID: 449bc546-e589-4aca-83fd-b41c2e03fbde' \
--header 'X-Auth-Sign: ZqSncJY4WOWNYUU2DV5iwPeEwe16l0DPUlQZDU47wNxFS+yOhwr/hWzdk5jt9xdxfC8+5FZ/8O8p5GoWGzXUooO3KWoSDCcdjzjiwd0wHev0oQfnasGCLyD2nCoXT8ozSDvF/n74RAWNNuXztN6f62cvV42GP/uwUfKioTSvy451l9P+c3rOgILs0X5zX7NEYZ09SOy3fVg73lyPaJ5ohpVDOb3yaIupIEBzhSOyLqx+g/wxnda9hIkxX1MlmqZk36nbH7x/OMvLiVrh14fFNj6bgQHDU6qh9lGXeej6J0XJ055gFI9Yl8rmfPfY6qc6vEHy+OaX10y4EO042BXdiw==' \
--header 'Accept: application/json'
Аутентификация webhook-запросов
Система Moneygate посылает в систему мерчанта webhook-запросы (обратные вызовы) по методу POST. При этом для аутентификации такого запроса используется единственный элемент – электронная подпись в HTTP-заголовке X-Auth-Sign в кодировке Base64. В остальном протокол аналогичен протоколу аутентификации POST-запросов.
- Шаг 1 – Вычислить электронную подпись raw-строки тела запроса (request body) по криптографическому алгоритму SHA-256 with RSA в кодировке Base64
- Шаг 2 – Установить в заголовок
X-Auth-Signэлектронную подпись
После чего HTTP-запрос отправляется в систему мерчанта.
Пример для Linux shell
Ниже представлен пример подписанного webhook-запроса:
curl --location 'https://example.merchant-side.com/send-status-here' \
--header 'X-Auth-Sign: v2KAtlX9WLlrr3vaWfVG1dFdevZ9tlar7me1nFVIdV+WzT7PWqIu5J+6MZw9OZTw9qahPUeomDECHrBOVCZ5QHEfyALDoqfQ7+f4OSLhMB5/6GZWeU3JCNGlqq6HdM2G2tRgVtL8koYiwIQU3SUTi7/i3CVCRKC9AerGrtm7Df3Fn8WgI3ay3P/gCnEH1hMYQYGlg7illyhIEYLg84z9zbTs22nRSkLHHsXGlGAMbQvdB4cbnzewudlVog0844SepT/170TxXp51q6L4vM4Gqr72AMDp2i5VG52fOAZLYfTrMeBIGzbsDgVD/6yB8Wu1Q6bzaW4G+HlSEhYe0KgQ==' \
--header 'Content-Type: application/json' \
--header 'Accept: application/json' \
--data '{
"id": "449bc546-e589-4aca-83fd-197890679617",
"status": "В ожидании",
"status_code": 2
}'
Верификация электронной подписи webhook-запросов
Пример для Linux shell
Ниже представлен пример верификации тела webhook-запроса:
# Запись тела запроса в файл request_body.raw
echo -n '{
"id": "449bc546-e589-4aca-83fd-197890679617",
"status": "В ожидании",
"status_code": 2
}' > request_body.raw
# Вычисление электронной подписи тела запросе закодированной Base64
# с последующей записью в файл signature.sha256
openssl dgst -sha256 -sign moneygate.key request_body.raw | base64 > signature.sha256
# Декодирование электронной подписи в двоичный вид
# с последующей записью в файл signature.sha256.bin
base64 --decode signature.sha256 > signature.sha256.bin
# Верификация электронной подписи тела запроса
openssl dgst -sha256 -verify moneygate.key.pub -signature signature.sha256.bin request_body.raw
Результат успешной верификации электронной подписи:
Verified OK
В приведенных командах:
moneygate.key- закрытый ключ системы Moneygatemoneygate.key.pub- публичный ключ системы Moneygate