Отправка POST запросов к API ONLYOFFICE

Потребовалось провести небольшую интеграцию проекта использующего REST API с решением на 1С. Опыта работы с REST API не было никакого, поэтому в ходе реализации интеграции столкнулся с небольшими трудностями которые в последствии успешно решил. Знания полученные по ходу проекта интеграции хорошо бы сохранить, так как они меют свойство быстро забываться при отсутствии практики, поэтому решил поделиться ими в блоге.

Итак для работы с API OnlyOffice нам нужно получить токен. Заголовок который мы должны послать серверу выгляит следующим образом.

POST /api/2.0/authentication.json HTTP/1.1 
Host: portal.onlyoffice.com 
Accept: application/json,application/xml 
Accept-Encoding: gzip, deflate 
userName=yourusername&password=yourpassword

где ourusername и yourpassword ваш логин и пароль соответственно.

<?php
$url = 'http://192.168.1.221/api/2.0/authentication';
$params = array(
'userName' => '*********@mail.ru', // Логин или почта через которую регистрировались
'password' => '*********', // Пароль
);
$result = file_get_contents($url, false, stream_context_create(array(
'http' => array(
'method' => 'POST',
'header' => array('Accept: application/json', 'Content-type: application/x-www-form-urlencoded'),
'content' => http_build_query($params)
)
)));
$obj=json_decode($result, true);
$token = $obj['response']['token'];
print_r($token);

Вообще получить токе можно воспользовавшись как функцией file_get_contents() так и с помощью curl. Рассмотрим первый вариант.
Тоже самое но с помощью curl выгдяти так:

<?php
ini_set('display_errors',1);
error_reporting(E_ALL);
#Формируем ссылку для запроса
$link='http://192.168.1.221/api/2.0/authentication';

$curl=curl_init(); #Сохраняем дескриптор сеанса cURL
#Устанавливаем необходимые опции для сеанса cURL
curl_setopt($curl,CURLOPT_RETURNTRANSFER,true);
curl_setopt($curl,CURLOPT_USERAGENT,'Mozilla/5.0 (Windows NT 6.1; rv:26.0) Gecko/20100101 Firefox/26.0');
curl_setopt($curl,CURLOPT_URL,$link);
curl_setopt($curl,CURLOPT_CUSTOMREQUEST,'POST');
curl_setopt($curl,CURLOPT_POSTFIELDS,'userName=********@mail.ru&password=*******'); 
curl_setopt($curl,CURLOPT_HTTPHEADER, array('Accept:application/json', 'Host: 192.168.1.221', 'Accept-Encoding: gzip'));
curl_setopt($curl,CURLOPT_HEADER, false);

$out=curl_exec($curl); #Инициируем запрос к API и сохраняем ответ в переменную
curl_close($curl); #Завершаем сеанс cURL

/**
* Данные получаем в формате JSON, поэтому, для получения читаемых данных,
* нам придётся перевести ответ в формат, понятный PHP
*/
$Response=json_decode($out,true);
$token = $Response['response']['token'];

print_r($token);

Разумеется вместо адреса http://192.168.1.221/ выдолжны будете ввести свой.

Далее опишем пример из API создание пользователя.

Сначала вариант с file_get_contents(), отметим, что код нужно добавить к вышеприведенным в соответствии с используемым методом.

#Добавляем пользователя
$urlAdd = 'http://192.168.1.221/api/2.0/people.json';
#Формируем параметры запроса, описываем параметры пользователя которого хотим добавить
$userdAdd = array('isVisitor' =>'false',
'email' => 'makhmood1@ya.ru',
'firstname' => 'Mahmood',
'lastname' => 'Abbas',
'title'=> 'Tiger',
'location' => 'Irak',
'sex' => 'male',
'birthday' => '1989-05-13T06:30:00.0000000-07:00', 
'worksfrom' => '2014-09-13T06:30:00.0000000-07:00',
'comment' => '89282000000'
);

$opt = array('http' => array(
'method' => 'POST',
'header' => "Accept: application/json\r\n".
"Content-type: application/x-www-form-urlencoded\r\n".
"Authorization: 4mWmJ5td7eXICAjj6fpXNj0m2U+RdC8EO8Zwh4ojHFTjHQYKjfaPN7Kidq6qclpqMSYRFBYc8/muXqq+CKdHvboMebFL+VB64YN4qvqTa9J7bKx3a2uIT+6/srpwhYCC\r\n",
'content' => http_build_query($userdAdd)
) );

$context = stream_context_create($opt);
$addMember = file_get_contents($urlAdd, false, $context);
var_dump($addMember);
?>

Теперь покажем как использовать метод curl

#Формируем параметры запроса, описываем параметры пользователя которого хотим добавить
$userdAdd = array('isVisitor' =>'false',
'email' => 'makhmood@ya.ru',
'firstname' => 'Mahmood',
'lastname' => 'Abbas',
'title'=> 'Tiger',
'location' => 'Irak',
'sex' => 'male',
'birthday' => '1989-05-13T06:30:00.0000000-07:00', 
'worksfrom' => '2014-09-13T06:30:00.0000000-07:00',
'comment' => '89282000000'
);

#Формируем ссылку для запроса
$linkPeople='http://192.168.1.221/api/2.0/people';

$headr = array('Content-type: application/json', 'Authorization: 4mWmJ5td7eXICAjj6fpXNj0m2U+RdC8EO8Zwh4ojHFTjHQYKjfaPN7Kidq6qclpqMSYRFBYc8/muXqq+CKdHvboMebFL+VB64YN4qvqTa9J7bKx3a2uIT+6/srpwhYCC', 'Host: 192.168.1.221');

$curl=curl_init(); #Сохраняем дескриптор сеанса cURL
#Устанавливаем необходимые опции для сеанса cURL
curl_setopt($curl,CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl,CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 6.1; rv:26.0) Gecko/20100101 Firefox/26.0');
curl_setopt($curl,CURLOPT_URL, $linkPeople);
curl_setopt($curl,CURLOPT_CUSTOMREQUEST,'POST');
curl_setopt($curl,CURLOPT_POSTFIELDS, json_encode($userdAdd));
curl_setopt($curl,CURLOPT_HTTPHEADER, $headr);
curl_setopt($curl,CURLOPT_HEADER, true);

$out=curl_exec($curl); #Инициируем запрос к API и сохраняем ответ в переменную
$code=curl_getinfo($curl,CURLINFO_HTTP_CODE); #Получим HTTP-код ответа сервера
curl_close($curl);

$code=(int)$code;
$errors=array(
301=>'Moved permanently',
400=>'Bad request',
401=>'Unauthorized',
403=>'Forbidden',
404=>'Not found',
500=>'Internal server error',
502=>'Bad gateway',
503=>'Service unavailable'
);
try
{
#Если код ответа не равен 200 или 204 - возвращаем сообщение об ошибке
if($code>=400)
throw new Exception(isset($errors[$code]) ? $errors[$code] : 'Undescribed error',$code);
}
catch(Exception $E)
{
die('Ошибка: '.$E->getMessage().PHP_EOL.'Код ошибки: '.$E->getCode());
}
?>

Мы сделали ни что иное как добавили в заголовок запроса наш токен.

Таким образом в случае успешного выполнения запроса вы получите в ответ JSON массив с параметрами созданного пользователя. Заметьте так же, что если пользователь с указанным e-mail уже создан, то будет вываливаться ошибка Internal server error 500.

Добавить комментарий

Ваш e-mail не будет опубликован.