6. Безопасность и авторизация
Для обеспечения безопасности и предотвращения CSRF-атак, любые POST-запросы выполняются с передачей специального дополнительного параметра – токена. Чтобы получить токен безопасности нужно выполнить запрос следующего вида:
6.1. Получение токена безопасности /info/settings/token/
Тип | Формат запроса 6.1 | |
GET | /info/settings/token/ | |
Формат запроса |
Результатом данного запроса будет объект
1 2 3 4 5 |
[ { "token" : "fd50e47596cff6c63c7ea0a633c0d2a8" } ] |
Полученное значение необходимо передавать в дополнительном POST-параметре tokenв каждом POST-запросе. Смена токена происходит раз в 24 часа. В настоящем описании API тех методов, которые выполняются POST-запросом, отдельно не упоминается параметр token, но помимо описанных параметров в каждом запросе, нужно передать параметр token.
Ниже приведен пример на PHP получения токена и выполнения запроса на добавление в список e-mail рассылки пользователя. (Запрос протокола 5.3.). Обратите внимание, что при отправке запросов используется Basic HTTP-авторизация.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 |
<?php $user="user"; # Логин в личном кабинете PayKeeper $password="pass"; # Соответствующий логину пароль $base64=base64_encode("$user:$password"); # Формируем base64 хэш $headers=Array(); array_push($headers,'Content-Type: application/x-www-form-urlencoded'); array_push($headers,'Authorization: Basic '.$base64); # Подготавливаем заголовок для авторизации $server_paykeeper="your.server.paykeeper.ru"; # укажите адрес вашего сервера PayKeeper # адрес your.server.paykeeper.ru - пример! # Готовим первый запрос на получение токена $uri="/info/settings/token/"; # Запрос на получение токена $curl=curl_init(); # curl должен быть установлен curl_setopt($curl,CURLOPT_RETURNTRANSFER,true); curl_setopt($curl,CURLOPT_URL,$server_paykeeper.$uri); curl_setopt($curl,CURLOPT_CUSTOMREQUEST,'GET'); curl_setopt($curl,CURLOPT_HTTPHEADER,$headers); curl_setopt($curl,CURLOPT_HEADER,false); $out=curl_exec($curl); # Инициируем запрос к API $php_array=json_decode($out,true); # Сохраняем результат в массив if (isset($php_array['token'])) $token=$php_array['token']; else die(); # Сохраняем полученный токен в $token # Готовим к выполнению запрос на добавление email в список рассылки $email="example@paykeeper.ru"; # Почта для добавления $uri="/change/organization/addreportemail/"; # Запрос 5.3 JSON API $curl=curl_init(); # curl должен быть установлен curl_setopt($curl,CURLOPT_RETURNTRANSFER,true); curl_setopt($curl,CURLOPT_URL,$server_paykeeper.$uri); curl_setopt($curl,CURLOPT_CUSTOMREQUEST,'POST'); curl_setopt($curl,CURLOPT_HTTPHEADER,$headers); curl_setopt($curl,CURLOPT_HEADER,false); curl_setopt($curl,CURLOPT_POSTFIELDS,"token=$token&email=$email"); $out=curl_exec($curl); # Инициируем запрос к API print_r(json_decode($out)); # Выводим результат запроса ?> |
Если запрос выполнен успешно, результатом будет объект следующего вида:
1 2 3 4 5 |
[ { "result": "success" } ] |
Если запрос выполнен успешно, результатом будет объект следующего вида:
1 2 3 4 5 6 |
[ { "result": "fail", "msg": "Данный почтовый адрес уже существует." } ] |
Результат добавления e-mail в список рассылки можно увидеть в личном кабинете:
6.2. Basic HTTP-авторизация
Чтобы обеспечить авторизацию и безопасность работы по протоколу JSON API, все запросы должны содержать заголовок Authorization: Basic.
1 |
Authorization: Basic anNvbjpqc29u |
В качестве логина и пароля используется логин и пароль для доступа в личный кабинет PayKeeper. Для использования протокола мы рекомендуем создать отдельного пользователя.
Ниже приведен пример на PHP выполнения запроса с HTTP-авторизацией на получение списка платёжных систем. (Запрос протокола 1.1.)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
<?php $server_paykeeper="demo.paykeeper.ru"; # указывается адрес вашего сервера PayKeeper $uri="/info/systems/list/"; # Запрос 1.1 JSON API $user="json"; # Логин в личном кабинете PayKeeper $password="json"; # Соответствующий логину пароль $base64=base64_encode("$user:$password"); # Формируем base64 хэш $curl=curl_init(); # curl должен быть установлен $headers=Array(); array_push($headers,'Authorization: Basic '.$base64); # Подготавливаем заголовок для авторизации curl_setopt($curl,CURLOPT_RETURNTRANSFER,true); curl_setopt($curl,CURLOPT_URL,$server_paykeeper.$uri); curl_setopt($curl,CURLOPT_CUSTOMREQUEST,'GET'); curl_setopt($curl,CURLOPT_HTTPHEADER,$headers); curl_setopt($curl,CURLOPT_HEADER,false); $out=curl_exec($curl); # Инициируем запрос к API print_r(json_decode($out)); # Декодируем ответ и выводим ?> |
Если запрос выполнен корректно, будет выведен объект следующего вида:
1 2 3 4 5 6 7 8 9 10 11 12 |
[ { "id": "6", "system_description": "AlfaBank", "site_description": "Альфабанк" }, { "id": "127", "system_description": "TestPayments", "site_description": "Тестовый Платёж" } ] |
Если заголовок HTTP-авторизации не направлен или сформирован некорректно, в ответ сервер отправит титульную страницу.
6.3. Получение JWT-токена для взаимодействия с сервисами /info/settings/service-token/
Тип | Формат запроса 6.3 | |
GET | /info/settings/service-token/ | |
Параметр | Назначение | |
1. | service | Идентификатор сервиса, для доступа к которому нужно получить JWT-токен |
Формат запроса |
Результатом данного запроса будет объект
1 2 3 4 |
{ "result": "success", "token": "eyJ0eXAiOiJKV1QiLCJ...lUhd0oCiYYkvgZRQi1Il6_sOIU" } |