Sabre - 酒店可用性API - 错误

时间:2016-12-04 13:47:17

标签: sabre

我收到以下错误消息

<faultcode>soap-env:Client.InvalidSecurityToken</faultcode><faultstring>Invalid or Expired binary security token: null</faultstring><detail><StackTrace>com.sabre.universalservices.base.security.AuthenticationException: errors.session.USG_INVALID_SECURITY_TOKEN</StackTrace></detail></soap-env:Fault></soap-env:Body></soap-env:Envelope>

以下是我对酒店可用性API的请求。

<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
    <SOAP-ENV:Header>
        <eb:MessageHeader xmlns:eb="http://www.ebxml.org/namespaces/messageHeader" SOAP-ENV:mustUnderstand="0">
            <eb:From>
                <eb:PartyId eb:type="urn:x12.org:IO5:01">client</eb:PartyId>
            </eb:From>
            <eb:To>
                <eb:PartyId eb:type="urn:x12.org:IO5:01">ws</eb:PartyId>
            </eb:To>
            <eb:CPAId>'.$pcc.'</eb:CPAId>
            <eb:ConversationId>YourConversationId</eb:ConversationId>
            <eb:Service eb:type="sabreXML"></eb:Service>
            <eb:Action>OTA_HotelAvailLLSRQ</eb:Action>
        </eb:MessageHeader> 
        <Security xmlns:ns6="http://schemas.xmlsoap.org/ws/2002/12/secext" SOAP-ENV:mustUnderstand="0">
            <BinarySecurityToken>'.$sabreKey.'</BinarySecurityToken>
        </Security>
    </SOAP-ENV:Header>
    <SOAP-ENV:Body>
        <eb:OTA_HotelAvailRQ xmlns:eb="http://webservices.sabre.com/sabreXML/2003/07" TimeStamp="2011-01-26T12:30:00-06:00" Version="1.10.1">
            <eb:POS>
                <eb:Source PseudoCityCode="'.$pcc.'" /></eb:POS>
            <eb:AvailRequestSegments>
                <eb:AvailRequestSegment>
                    <eb:StayDateRange Start="12-10" End="12-15" />
                    <eb:RoomStayCandidates>
                        <eb:RoomStayCandidate>
                            <eb:GuestCounts>
                                <eb:GuestCount Count="1" /></eb:GuestCounts>
                        </eb:RoomStayCandidate>
                    </eb:RoomStayCandidates>
                    <eb:HotelSearchCriteria xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="eb:HotelSearchCriteria_type0">
                        <eb:Criterion>
                            <eb:HotelRef HotelCityCode="DFW" /></eb:Criterion>
                    </eb:HotelSearchCriteria>
                </eb:AvailRequestSegment>
            </eb:AvailRequestSegments>
        </eb:OTA_HotelAvailRQ>
    </SOAP-ENV:Body>
</SOAP-ENV:Envelope>

这是我在向酒店可用性API提出请求之前所做的工作。我收到了我的wsse:来自SessionCreateRQ的BinarySecurityToken存储了包含令牌的变量。

  <BinarySecurityToken>'.$sabreKey.'</BinarySecurityToken>                                                                              

为什么我收到此错误消息我的凭据是正确的。顺便说一下,我有生产凭证。

谢谢我期待一些帮助

2 个答案:

答案 0 :(得分:0)

如果您肯定安全令牌是正确的,那么您可能正在处理不正确的环境。 例如,如果您在PROD上创建了会话但是将后续请求发送到CERT,则会返回此错误。

确保将两个请求发送到同一端点。如果问题仍然存在,请联系服务台。

答案 1 :(得分:0)

问题解决了。以下是Sabre文档的问题,即在请求中包含以下标记。

<eb:Security xmlns:ns6="http://schemas.xmlsoap.org/ws/2002/12/secext" SOAP-ENV:mustUnderstand="0">
        <eb:BinarySecurityToken>'.$sabreKey.'</eb:BinarySecurityToken>
    </eb:Security>

但这导致了错误。

所以我然后尝试删除eb名称空间和我的标签,其中包含以下内容。

<Security xmlns:ns6="http://schemas.xmlsoap.org/ws/2002/12/secext" SOAP-ENV:mustUnderstand="0">
        <BinarySecurityToken>'.$sabreKey.'</BinarySecurityToken>
    </Security>

如果你在我的结果中查看xml请求。你会明白这不起作用。然后我尝试再次更改标签并使其工作。

我现在正在使用的标签,而不是我正在阅读的文档。这让我感到困惑。通过使用以下标签,我得到了我的工作请求。

<wsse:Security xmlns:wsse="http://schemas.xmlsoap.org/ws/2002/12/secext">
<wsse:BinarySecurityToken valueType="String"     EncodingType="wsse:Base64Binary">'.$sabreKey.'</wsse:BinarySecurityToken>
</wsse:Security>

我确定这会帮助很多人,因为文档在涉及此特定标记时存在缺陷。