我得到的错误字符串代码,例如 -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 知识非常有限(请记住(:)
因此,您需要 soap 标头中的 2 个主要元素,messageHeader 和安全性。安全性是最简单的,让我们从这个开始。
安全:
$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);