Создание сайтов и интернет-магазинов

Data-driven подход. Исследование спроса. Исследование конкурентов.

Интеграция сайта с CRM

Ваш центр управления бизнесом. Интеграция сайта на Joomla с Битрикс 24 и AmoCRM.

Разработка Joomla

Разработка модулей, плагинов для Joomla 4. Интеграции по API.

Саратовский железнодорожный мост, логотип джумла и текст HttpFactory

Написал перевод-компиляцию 3-х статей на хабре, которая будет полезна разработчикам при интеграции Joomla со сторонними сервисами по API. Дублирую текст себе.

Обычно когда мы хотим сделать внешний запрос мы используем для этих целей cURL. Настройка cURL довольно громоздкая, да и в принципе проблематично держать в голове все необходимые настройки. Также есть сервера без поддержки cURL, а значит Ваш код не будет работать. В этих случаях нужен запасной вариант.

С использованием Joomla довольно легко настроить cURL и все необходимые резервные варианты подключений в одной строчке кода.

use Joomla\CMS\Http\HttpFactory;
$http = HttpFactory::getHttp(null, ['curl', 'stream']);

Этот код вызывает драйвер Joomla Http, позволяющий делать исходящие запросы на внешние URL. Этот драйвер использует драйверы транспорта в указанном порядке, то есть в данном случае в начале cURL (если доступен), а затем stream.

В Joomla 3 "из коробки" доступны 3 драйвера транспорта:

  • cURL
  • socket
  • stream

HttpFactory в Joomla 4

В Joomla 4 изменены типы методов. Теперь вызов осуществляется не статическим методом (без двоеточия). Например, следующим образом:

$http = (new \Joomla\Http\HttpFactory)->getHttp(array(), ['curl', 'stream']);

Также обратите внимание, что первый параметр теперь не может быть null, это должен быть массив.

Создание вызова

HttpFactory в Joomla 3 поддерживает следующие типы HTTP-запросов:

  • delete
  • get
  • head
  • options
  • patch
  • post
  • put
  • trace

Все эти методы, кроме GET, используют одинаковые аргументы:

  1. URL - url вызова, end-point.
  2. Data - массив данных, отправляемых в запросе.
  3. Headers - заголовки http-запроса. Могут использоваться, например, для авторизации.
  4. Timeout - установка специфичного таймаута для запроса.

В методе GET отсутствует параметр $data. Используются только $url, $headers, $timeout.

Пример POST-запроса

$answer = $http->post($url);

POST-запрос с данными 

$answer = $http->post($url, ['foo' => 'bar']);

Добавление опций запроса

HttpFactory может добавлять опции настроек для драйвера транспорта. Для этого нужно создать массив, где ключ - это опция, а значение - значение опции соответственно. Ниже примеры опций для cURL. Полный список в документации PHP.

$curlOptions = array();
$curlOptions[CURLOPT_SSL_VERIFYHOST] = false;

Далее добавляем массив с опциями с помощью метода setOption().

$http->setOption('transport.curl', $curlOptions);

Токены аутентификации в заголовках Http-запроса Joomla

Joomla может взаимодействовать с внешним миром получая или отправляя данные. Многие сервисы требуют наличие заголовков запроса с токенами аутентификации. Подробнее в Обзоре способов и протоколов аутентификации в веб-приложениях.

Добавить нужные заголовки весьма просто. Создаем массив с нужными заголовками, а затем указываем его при создании Http-запроса.

 

if(!empty($access_token) && !empty($user_key)){
            $headers = array(
                'Authorization' => 'AccessToken '.$access_token,
                'Content-Type'  => 'application/json',
                'charset'       => 'UTF-8',
                'X-User-Authorization'=> 'Basic '.$user_key
            );

        if(!is_null($data)){
            $headers['Content-Length'] = strlen($data);
        }
		$http->post($url,$data,$headers);
}

Далее уже оборачиваем запрос в try-catch и обрабатываем ошибки.

Обработка ответа

Ответом всегда является объект класса HttpResponse. Он имеет 3 свойства:

  • code - код ответа сервера (200, 400, 301 и т.д.)
  • headers - заголовки ответа сервера
  • body - собственно тело ответа сервера

Заключение

В процессе работы над интеграцией Joomla с внешними сервисами родилась идея этой статьи, которую предполагал писать сам. Однако, нашлись вполне адекватные зарубежные источники и данная статья является переводом и компиляцией трёх небольших статей о Joomla 3 HttpFactory с изменениями и доработками.

От читателей приветствую пожелания и уточнения по терминологии.

Список источников:

Расширения Joomla WebTolk

63 Всего расширений
8 Категорий
244 Выпущено версий
203275 Всего скачиваний

Обсудить проект

Согласно Федеральному закону "О персональных данных" от 27.07.2006 №152-ФЗ перед отправкой своих данных Вы должны дать согласие с нашей политикой обработки персональных данных.

Расширения Joomlа: новые

WT SP Easy Image Gallery insert
67 103 CTR 65% Pack Бесплатно
WT SEO Meta templates - Tags
133 108 CTR 123% Plg Бесплатно
WT Highlight.js
190 241 CTR 79% Pack Бесплатно
WT Typograph
190 375 CTR 51% Plg Бесплатно

Последние обновления