SOAP PHP server and client Общение PHP и 1С

05.08.2019
Тут представлен пример SOAP запроса, где и сервер на php и клиент на php. Для проверки, включен ли у вас на php сервере SOAP, создаём файл phpinfo.php с содержимым:
<?php phpinfo(); ?>
При открытии этого файла, на сервере.
На против Soap Client и Soap Server , должно стаять значение enabled. Если этого нет, то у вас не установлен SOAP.
Если он есть, то создаём файл сервера serv1.php с содержимым
<?php // server class MySoapServer { public function getMessage() { return 'Hello,World!'; } public function addNumbers($num1,$num2) { return $num1+$num2; } } $server = new SoapServer(NULL, array('uri'=>'https://h7team.ru/soap/serv1.php')); $server->setClass('MySoapServer'); echo $server->handle(); ?>
Вместо https://h7team.ru/soap/serv1.php ставим свой путь к файлу.
Создаём файл клиента client1.php
<?php // client $client = new SoapClient(NULL, array( 'location' => 'https://h7team.ru/soap/serv1.php', 'uri' => 'urn://h7team.ru/soap/serv1.php', 'trace'=> 1 )); echo $client->getMessage(); //Hello,World! echo $client->addNumbers(3,5); // 8 ?>
Вместо h7team.ru/soap/serv1.php подставляем подобный путь к своему файлу сервера. И если всё сделано правильно, то при открытии файла клиента, у Вас отобразится Hello,World!8. Если Вы связывайте WEB с 1С, то там немного другой запрос. У меня сработал вот такой:
<pre><?php try { $cl1c = new SoapClient('https://0.0.0.0:5555/j156/JS_GetBonusBalanse.1cws?wsdl', array( 'login' => 'Log123', 'password' => 'Pass123', 'soap_version' => SOAP_1_2, 'cache_wsdl' => WSDL_CACHE_NONE, 'exceptions' => true, 'trace' => 1, 'stream_context' => stream_context_create(array( 'ssl' => array( 'verify_peer' => false, 'verify_peer_name' => false ) ) ) )); }catch(SoapFault $e) { trigger_error('Ошибка подключения или внутренняя ошибка сервера. Не удалось связаться с базой 1С.', E_ERROR); var_dump($e); } $par = array('Phone' => "89277777777"); try { $ret1c = $cl1c->getdata($par); print_r($ret1c->return); } catch (SoapFault $e) { echo 'Ошибка вывода'; var_dump($e); }
Если будете использовать его у себя, то поменяйте адреса логины пароли. И главное, в stream_context_create в ssl НЕ подставляйте 'ciphers' => 'RC4-SHA', (нашёл это в примерах на 3 форумах). из за этого он может не работать с некоторых серверов.