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" }  | 
					


