在SABRE HOTEL API中获取故障字符串:EbxmlMessage中指定的操作不存在

时间:2016-02-10 11:51:44

标签: php xml soap wsdl sabre

我收到的错误字符串代码如EbxmlMessage中指定的-Action不存在

任何人都可以帮助我找不到的东西。

$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>"; 

1 个答案:

答案 0 :(得分:1)

我不知道您使用MessageHeader的操作是什么,但正确的操作不是OTA_HotelAvailRQ,而是OTA_HotelAvail LLS RQ

编辑:

首先让我说,只有在SessionCreate上使用用户名才能获得新会话,从那时起你将需要使用返回的BinarySecurityToken。这将在会话到期或使用SessionClose关闭之前对同一环境有效。让我们想象一下,我有变量$ bst。

我在下面所做的并不是我可以测试的东西,所以可能会出现问题,而且,我的PHP知识非常有限(记住这一点):)

因此,您需要在soap标头,messageHeader和Security中使用2个主要元素。安全性是最简单的,让我们从此开始。

安全

$auth = array(
    'BinarySecurityToken'=>$bst
);
$authHeader = new SoapHeader('http://schemas.xmlsoap.org/ws/2002/12/secext','Security',$auth,false);

<强>的MessageHeader:

$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);