Формат работы с API
Адрес для отправки запросов
Как сформировать
<адрес сервера> + /api/v1 + <адрес для отправки запросов нужного метода>
Адрес сервера
- Для тестирования https://test.integration.merchantscan.ru/
- Для реальных операций https://integration.datascope.pro/
Аутентификация
В заголовках запросов необходимо передавать подпись запроса.
| Название | Тип | Описание |
|---|---|---|
X-CLIENT-SIGNATURE | string | Подпись запроса (см. ниже) |
Подпись запроса
Подпись нужна, чтобы проверять подлинность и целостность запросов. Сервис проверяет, что запросы пришли именно от вас (и дошли целиком), вы проверяете таким же образом запросы от сервиса.
Для формирования и проверки подписи нужен публичный и секретный ключ.
Генерация ключевой пары
Вам нужно сгенерировать на своей стороне пару ключей с алгоритмом подписи RSA.
Формирование подписи тела запроса
Вместе с запросом в сервис необходимо передавать подпись. Подписывать необходимо тело запроса целиком,
также токен (ключ в массиве token) и параметры пути (ключи в массиве такие же, как в open-api, если они есть).
Собранные данные для подписи необходимо отсортировать по ключу массива, сериализовать в JSON и дальше подписать.
Используйте для подписи ваш секретный ключ. Сформируйте подпись с алгоритмом SHA-256. Полученную подпись необходимо передавать в формате Base64.
Примеры формирования данных для подписи
Операция "Одобрить площадку"
- В данной операции тело запроса пустое, есть параметр пути
marketplace_id. Соответственно данные для подписи в отсортированном порядке будут такие:
{
"marketplace_id": "my-id",
"token": "my-bearer-token"
}
Операция "Создать площадку"
- В данной операции есть тело запроса, но нет параметров пути. Соответственно данные для подписи в отсортированном порядке будут такие:
{
"external_id": "1111",
"mcc_code": "5511",
"name": "merchant name",
"priority": "1",
"tags": ["tag1", "tag2"],
"tin": "772539671511",
"token": "my-bearer-token",
"url": "https://example.ru/"
}
Проверка входящих запросов от сервиса
Все исходящие запросы сервис подписывает с помощью своего секретного ключа. Подписывается только тело запроса.
С помощью публичного ключа сервиса вам необходимо проверять подписи запросов от сервиса на своей стороне. Используется алгоритм SHA-256. Подпись передается в формате Base64.
Публичные ключи сервиса:
Пример генерации и проверки подписи
# Генерация приватного ключа
$ openssl genrsa -out private.pem 2048
# Генерация публичного ключа из приватного
$ openssl rsa -in private.pem -pubout > public.pem
# Формирование содержимого файла myfile.txt
$ echo test > myfile.txt
# Генерация подписи
$ openssl dgst -sha256 -sign private.pem -out sha256.sign myfile.txt
# Готовая подпись для передачи
$ base64 sha256.sign
# Проверка подписи
$ openssl dgst -sha256 -verify public.pem -signature sha256.sign myfile.txt
Verified OK