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 с содержимым
На против 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
Создаём файл клиента 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 форумах). из за этого он может не работать с некоторых серверов.