Я получаю строковый код ошибки типа -Action, указанный в EbxmlMessage, не существует
Может ли кто-нибудь помочь мне, что мне не хватает.
$OTA_HotelAvailRQ = new stdClass;
$OTA_HotelAvailRQ->AvailRequestSegment = new stdClass;
$OTA_HotelAvailRQ->AvailRequestSegment->ReturnHostCommand = true;
$OTA_HotelAvailRQ->AvailRequestSegment->TimeStamp = '2015-11-12T11:22:06';
$OTA_HotelAvailRQ->AvailRequestSegment->Version = '2.2.1';
$client = new SoapClient("http://webservices.sabre.com/wsdl/tpfc/OTA_HotelAvailLLS2.2.1RQ.wsdl", [
"trace" => 1,
"exceptions" => 0,
"cache_wsdl" => 0
]);
$client->__setSoapHeaders(new SoapHeader('NAMESPACE','Auth', [
'UserName'=>'',
'Password'=>'',
'SystemId'=> [
'_'=>'DATA',
'Param'=>'PARAM'
]
], false));
print_r( $client->OTA_HotelAvailRQ($OTA_HotelAvailRQ));
echo "<p>Request :".htmlspecialchars($client->__getLastRequest()) ."</p>";
echo "<p>Response:".htmlspecialchars($client->__getLastResponse())."</p>";
Я не вижу, какое действие вы используете MessageHeader, но правильным является не OTA_HotelAvailRQ, а OTA_HotelAvailLLSRQ
РЕДАКТИРОВАТЬ:
Позвольте мне начать с того, что имя пользователя должно использоваться только в SessionCreate для получения нового сеанса, с этого момента вам нужно будет использовать возвращаемый BinarySecurityToken. Это будет действовать для той же среды, пока не истечет сеанс или он не будет закрыт с помощью SessionClose. Давайте представим, что у меня есть это в переменной $ bst.
То, что я сделал ниже, это не то, что я мог бы проверить, так что может быть что-то не так, плюс, мои знания php весьма ограничены (имейте это в виду) 🙂
Итак, вам нужно 2 основных элемента в мыльном заголовке, messageHeader и Security. Безопасность — самое простое, давайте начнем с этого.
Безопасность:
$auth = array(
'BinarySecurityToken'=>$bst
);
$authHeader = new SoapHeader('http://schemas.xmlsoap.org/ws/2002/12/secext','Security',$auth,false);
Заголовок сообщения:
$partyId=array(
'PartyId'=>''
);
$messageData=array(
'Timestamp'=>date('Y-m-d')
);
$messageHeader=array(
'ConversationId'=>'',
'From'=>$partyId,
'To'=>$partyId,
'CPAId'=>'',
'Service'=>'OTA_HotelAvailLLSRQ',
'Action'=>'OTA_HotelAvailLLSRQ',
'MessageData'=>$messageData
);
$messageHeaderHeader = new SoapHeader('http://www.ebxml.org/namespaces/messageHeader','MessageHeader',$messageHeader,false);
Наконец присоединитесь к ним и установите это:
$headers=array();
$headers[]=$authHeader;
$headers[]=$messageHeaderHeader;
$soap_client->__setSoapHeaders($headers);
Других решений пока нет …