Задать вопрос
@PGSky

Как правильно подключиться через PHP SOAP к API booking-manager?

Здравствуйте. Решил подключить вывод яхт через API Booking-Manager.com. Необходимо использовать SOAP.
Сам сайт находится на Wordpress, а хостинг Beget, но это не важно, т.к. прежде чем подключать все это, решил хотя бы попробовать протестировать как работает, через тестовый файл, код такой (как в документации с небольшими добавлениями):

class MMKStruct {
 /**
 * Constructor
 *
 * @param $a ­ array of parameters
 * @ret void
 */
 	public function __construct($a) {
 		$i = 0;
 		foreach ($a as $var => $val) {
 			$varName = 'in' . $i;
 			$this->$varName = $val;
 			$i++;
 		}
 	}
}
// Specify url
$wsdl = 'https://www.booking-manager.com/cbm_web_service2/services/CBM?wsdl';
$arrContextOptions=array("ssl"=>array( "verify_peer"=>false, "verify_peer_name"=>false,'crypto_method' => STREAM_CRYPTO_METHOD_TLS_CLIENT)); 
$options = array(
        'exceptions'=>true,
        'trace'=>1,
        'cache_wsdl'=>WSDL_CACHE_NONE,
        'stream_context' => stream_context_create($arrContextOptions),
		'keep_alive' => false,
);
$soapClient = new SoapClient($wsdl, $options);

try {
	$struct = new MMKStruct(array(Здесь ID пользователя-Компании,'Здесь E-mail','Здесь Пароль','635','2019', 'true',0));
	$result = $soapClient->__soapCall('getAvailabilityInfo',array($struct));
	if(isset($result->out)) {
		$xml = $result->out;
		echo $xml;
	}
	var_dump($result);
}
catch (Exception $e) {
	print_r($e->getMessage());
	print_r($soapClient->__getLastRequest());
	print_r($soapClient->__getLastResponse());
}


В итоге я получил ошибку 500 (на функции getResources, в коде здесь его нет) в браузере. Заменил функцию (т.к. все равно тестирую и момент с ошибкой 500 можно исправить потом, посчитал, что слишком много данных получает, но может не понимаю как конкретно работает SOAP) на getAvailabilityInfo (в коде видно). Ошибки 500 нет, но за то появилась ошибка "soap:ServerIllegal access to entity"

Подскажите, пожалуйста, решение или направление куда смотреть (по ошибке "soap:ServerIllegal access to entity" и если можно по ошибке 500).
  • Вопрос задан
  • 353 просмотра
Подписаться 1 Простой 22 комментария
Решения вопроса 1
@Hanneman
Выношу в ответ: ошибки технической нет, так как, применяя ваши реальные параметры авторизации, все работает. Что касается ошибки 102, то это функциональная логическая ошибка со стороны сервера - ему не нравится значение компании 635, так как элементарно подставляя компанию с идентификатором 634, все работает на техническом уровне и ответ возвращается корректный (проверьте, что не так с компанией 635):

P.S. Уберите реальные данные авторизации из темы и из вашего ответа кода (на всякий случай).

Запрос:
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" 
    xmlns:cbm="http://cbm.mmk.com">
    <soapenv:Header/>
    <soapenv:Body>
        <cbm:getAvailabilityInfo>
            <cbm:in0>2547</cbm:in0>
            <cbm:in1>info@xxxx-xxxxxxx.de</cbm:in1>
            <cbm:in2>yourPassword</cbm:in2>
            <cbm:in3>634</cbm:in3>
            <cbm:in4>2019</cbm:in4>
            <cbm:in5>false</cbm:in5>
            <cbm:in6>1970-01-01T03:00:00</cbm:in6>
        </cbm:getAvailabilityInfo>
    </soapenv:Body>
</soapenv:Envelope>


Ответ:
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" 
    xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <soap:Body>
        <ns1:getAvailabilityInfoResponse xmlns:ns1="http://cbm.mmk.com">
            <ns1:out><![CDATA[<root company_id="634" checktime="1566366427662">
<reservation id="1806870766300634" resourceid="279865120000100634" status="Reservation" blocksavailability="1" datefrom="2018-12-31" dateto="2019-01-14" basefrom="85" baseto="85" optionexpirydate="2018-08-22" created="2018-08-15" lastmodified="2018-08-15" companyid="634" />
<reservation id="2090990766300634" resourceid="1684801290000100634" status="Reservation" blocksavailability="1" datefrom="2019-02-04" dateto="2019-02-07" basefrom="85" baseto="85" optionexpirydate="2019-02-05" created="2019-02-04" lastmodified="2019-02-04" companyid="634" />
<reservation id="2206700766300634" resourceid="1684387260000100634" status="Canceled" blocksavailability="0" datefrom="2019-12-13" dateto="2019-12-25" basefrom="85" baseto="85" optionexpirydate="2019-06-05" created="2019-05-28" lastmodified="2019-06-06" companyid="634" />
<reservation id="1818390766300634" resourceid="279866040000100634" status="Reservation" blocksavailability="1" datefrom="2019-03-16" dateto="2019-03-26" basefrom="85" baseto="85" optionexpirydate="2018-08-23" created="2018-08-16" lastmodified="2018-08-16" companyid="634" />
<reservation id="2198150766300634" resourceid="2178580766300634" status="Canceled" blocksavailability="0" datefrom="2019-08-17" dateto="2019-08-24" basefrom="85" baseto="85" optionexpirydate="2019-05-26" created="2019-05-20" lastmodified="2019-05-27" companyid="634" />
</root>]]></ns1:out>
        </ns1:getAvailabilityInfoResponse>
    </soap:Body>
</soap:Envelope>
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы