Что такое SOAP и зачем он нужен для Битрикс
SOAP (Simple Object Access Protocol) — протокол обмена структурированными сообщениями в распределённых вычислительных системах. В контексте 1С-Битрикс и Bitrix24 SOAP используется для интеграции с внешними системами: 1С, CRM-платформами, банковскими сервисами, государственными порталами и другими системами, которые предоставляют веб-сервисы через WSDL.
На стандартном BitrixVM (виртуальная машина для разработки под Битрикс) расширение php-soap не всегда установлено или активно. Это приводит к ошибке вида Class 'SoapClient' not found или Call to undefined function soap_encode() при попытке обратиться к внешнему SOAP-сервису. В этой статье разберём, как установить и активировать SOAP для PHP на BitrixVM.
Проверка: включён ли SOAP в PHP
Прежде чем что-то устанавливать, проверьте, загружено ли расширение SOAP в текущей конфигурации PHP. Самый быстрый способ — через командную строку:
|
1 |
php -m | grep -i soap |
Если в выводе есть строка soap — расширение загружено. Если вывод пустой — нужно установить или подключить расширение.
Также можно создать временный файл phpinfo и проверить через браузер:
|
1 |
<?php phpinfo(); ?> |
В секции поиска найдите «soap» — если блок с информацией о расширении отсутствует, SOAP не активирован.
Установка php-soap на CentOS/RHEL (для BitrixVM)
BitrixVM базируется на CentOS (7 или 8 stream), поэтому для установки используется пакетный менеджер yum или dnf. Определите версию PHP, которую использует ваш сервер:
|
1 |
php -v |
Затем установите соответствующий пакет. Для PHP 7.4:
|
1 |
yum install php74-php-soap -y |
Для PHP 8.0/8.1/8.2 (если установлены через репозиторий remi или аналогичный):
|
1 2 3 |
yum install php80-php-soap -y # или dnf install php-soap -y |
После установки перезапустите веб-сервер:
|
1 |
systemctl restart httpd |
Установка на Ubuntu/Debian
Если ваша среда основана на Ubuntu или Debian (например, вы используете не официальный BitrixVM, а собственный сервер), команда установки будет другой:
|
1 2 |
sudo apt-get update sudo apt-get install php-soap -y |
Для конкретной версии PHP (например, 8.1):
|
1 |
sudo apt-get install php8.1-soap -y |
После установки активируйте расширение и перезапустите PHP-FPM или Apache:
|
1 2 3 4 |
sudo phpenmod soap sudo systemctl restart php8.1-fpm # или sudo systemctl restart apache2 |
Настройка в BitrixVM через конфигурационный файл
Если пакет установлен, но SOAP всё равно не загружается, проверьте конфигурационный файл расширения. В BitrixVM он обычно находится здесь:
|
1 |
/etc/php.d/20-soap.ini |
Откройте файл и убедитесь, что строка подключения расширения присутствует и не закомментирована:
|
1 |
extension=soap.so |
Если файл пустой или строка отсутствует — добавьте её вручную:
|
1 |
echo "extension=soap.so" >> /etc/php.d/20-soap.ini |
После изменения конфигурации обязательно перезапустите Apache:
|
1 |
systemctl restart httpd |
Проверка что SOAP работает
Для проверки создайте два файла в корне сайта. Первый — серверная часть (test.php):
|
1 2 3 4 5 6 7 8 9 10 11 12 |
<?php require($_SERVER["DOCUMENT_ROOT"] . "/bitrix/modules/main/include/prolog_before.php"); class MySoapServer { public function sayHello($name) { return "Hello, " . $name; } } $options = array('uri' => 'https://your_domain/'); $server = new SoapServer(null, $options); $server->setClass('MySoapServer'); $server->handle(); |
Второй — клиентская часть (test2.php):
|
1 2 3 4 5 6 7 |
<?php require($_SERVER["DOCUMENT_ROOT"] . "/bitrix/modules/main/include/prolog_before.php"); $options = array('location' => 'https://your_domain/test.php', 'uri' => 'https://your_domain/'); $client = new SoapClient(null, $options); echo $client->sayHello('World'); ?> |
Откройте в браузере:
|
1 |
https://your_domain/test2.php |
Если видите Hello, World — SOAP работает корректно.
Типичные ошибки и их решение
Рассмотрим наиболее частые проблемы при настройке SOAP на BitrixVM:
- Class ‘SoapClient’ not found — расширение не установлено или не загружается. Проверьте наличие строки в
.ini-файле и перезапустите Apache. - SOAP-ERROR: Parsing WSDL — проблема с доступом к WSDL-файлу внешнего сервиса. Проверьте настройки firewall и разрешение исходящих соединений для PHP.
- Could not connect to host — сервер не может установить соединение с удалённым SOAP-эндпоинтом. Проверьте
allow_url_fopenвphp.ini: должно быть включено (On). - SSL-ошибки при подключении — если внешний сервис использует самоподписанный сертификат, добавьте в параметры клиента опцию обхода проверки (только для тестирования):
'stream_context' => stream_context_create(['ssl' => ['verify_peer' => false]]).
После успешной установки SOAP PHP-расширения Битрикс сможет полноценно работать с внешними веб-сервисами, обменом данными с 1С через веб-сервисы и любыми WSDL-совместимыми API.
