队列 PNR returns "NO PNR IN AAA" (QueuePlaceLLSRQ)
Queue PNR returns "NO PNR IN AAA" (QueuePlaceLLSRQ)
我正在尝试使用 "Place Queue Message (QueuePlaceLLSRQ)" API 对 PNR 进行排队。
因此,我按照这些步骤对 PNR 进行排队。
第 1 步 - 创建会话 (SessionCreateRQ)
第 2 步 - 检索行程 (GetReservationRQ)
步骤 3 - Queue PNR (QueuePlaceLLSRQ)
我卡在了第 3 步,它总是 return 一条错误消息 - NO PNR IN AAA
这实际上是什么意思,我该如何避免这个错误?
下面是请求和响应有效载荷数据
请求数据
<SOAP-ENV:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
<SOAP-ENV:Header>
<MessageHeader xmlns="http://www.ebxml.org/namespaces/messageHeader">
<From>
<PartyId>sample.url.of.sabre.client.com</PartyId>
</From>
<To>
<PartyId>webservices.sabre.com</PartyId>
</To>
<CPAId></CPAId>
<ConversationId>convid</ConversationId>
<Service>QueuePlaceLLSRQ</Service>
<Action>QueuePlaceLLSRQ</Action>
<MessageData>
<MessageId>convid112</MessageId>
<Timestamp>2020-04-20T09:25:27Z</Timestamp>
<TimeToLive>2020-04-20T09:25:27Z</TimeToLive>
</MessageData>
</MessageHeader>
<Security xmlns="http://schemas.xmlsoap.org/ws/2002/12/secext">
<BinarySecurityToken EncodingType="Base64Binary" valueType="String" >Shared/IDL:IceSess\/SessMgr:1\.0.IDL/Common/!ICESMS\/ACPCRTC!ICESMSLB\/CRT.LB!1587564276872!533!5</BinarySecurityToken>
</Security>
</SOAP-ENV:Header>
<SOAP-ENV:Body>
<QueuePlaceRQ Version="2.0.4" xmlns="http://webservices.sabre.com/sabreXML/2011/10" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<QueueInfo>
<QueueIdentifier Number="22" PrefatoryInstructionCode="11" PseudoCityCode="****"/>
</QueueInfo>
</QueuePlaceRQ>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
响应数据
<?xml version="1.0" encoding="UTF-8"?>
<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" eb:version="1.0" soap-env:mustUnderstand="1">
<eb:From>
<eb:PartyId eb:type="URI">webservices.sabre.com</eb:PartyId>
</eb:From>
<eb:To>
<eb:PartyId eb:type="URI">sample.url.of.sabre.client.com</eb:PartyId>
</eb:To>
<eb:ConversationId>convid</eb:ConversationId>
<eb:Service>QueuePlaceLLSRQ</eb:Service>
<eb:Action>QueuePlaceLLSRS</eb:Action>
<eb:MessageData>
<eb:MessageId>1815326504754440150</eb:MessageId>
<eb:Timestamp>2020-04-22T14:01:16</eb:Timestamp>
<eb:RefToMessageId>convid</eb:RefToMessageId>
</eb:MessageData>
</eb:MessageHeader>
<wsse:Security xmlns:wsse="http://schemas.xmlsoap.org/ws/2002/12/secext">
<wsse:BinarySecurityToken valueType="String" EncodingType="wsse:Base64Binary">Shared/IDL:IceSess\/SessMgr:1\.0.IDL/Common/!ICESMS\/ACPCRTC!ICESMSLB\/CRT.LB!1587564074215!6005!9</wsse:BinarySecurityToken>
</wsse:Security>
</soap-env:Header>
<soap-env:Body>
<QueuePlaceRS xmlns="http://webservices.sabre.com/sabreXML/2011/10" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:stl="http://services.sabre.com/STL/v01" Version="2.0.4">
<stl:ApplicationResults status="NotProcessed">
<stl:Error type="BusinessLogic" timeStamp="2020-04-22T09:01:16-05:00">
<stl:SystemSpecificResults>
<stl:Message>NO PNR IN AAA</stl:Message>
<stl:ShortText>ERR.SWS.HOST.ERROR_IN_RESPONSE</stl:ShortText>
</stl:SystemSpecificResults>
</stl:Error>
</stl:ApplicationResults>
</QueuePlaceRS>
</soap-env:Body>
</soap-env:Envelope>
我假设您是使用 Stateless
而不是 Stateful
调用 GetReservation
,因此尝试排队时预订不在工作区,或者使用不同的会话。
如果这是您对预订所做的唯一事情,您可以添加 UniqueId 并将其放入该队列,甚至无需检索它。
<UniqueID ID="ABC123"/>
让我回答我自己的问题,因为我在错误的工作流程中,我希望它也能帮助别人。
在 Sabre 的产品目录中,REST 没有 Queue Place API,只有 SOAP。
问题是我在 Bargain Finder Max
和 Create Passenger Name Record
等第一步中使用了 REST。之后,我尝试在 SOAP 中使用 Queue Place API
,系统可能没有注意到 PNR。
实际上,Queue Place API 在 REST 中可用,但它必须与 Create Passenger Name Record API
一起发送并且必须附加一个对象 QueueInfo
在 PostProcessing
下,如下所示。
"PostProcessing": {
"QueuePlace":{
"QueueInfo":{
"QueueIdentifier":[
{
"Number":"123",
"PrefatoryInstructionCode":"11",
"PseudoCityCode":"****"
}
]
}
}
}
很有可能,PNR 在工作区不可用。这就是为什么它说没有 PNR。 GetReservation 有一个请求类型参数。它可以设置为:
无国籍
旅行
有状态的
Stateful requests 是指尚未提交的 PNR;因此,PNR 定位器不是强制性的。 Stateless/Trip 请求是指已提交并存储在数据库中的 PNR。此请求类型需要 PNR 定位器。
请检查您是否使用无状态而不是有状态调用 GetReservation,以便在尝试排队时预订不在工作区,或者使用不同的会话。您的工作区域必须有 PNR。
我正在尝试使用 "Place Queue Message (QueuePlaceLLSRQ)" API 对 PNR 进行排队。 因此,我按照这些步骤对 PNR 进行排队。
第 1 步 - 创建会话 (SessionCreateRQ)
第 2 步 - 检索行程 (GetReservationRQ)
步骤 3 - Queue PNR (QueuePlaceLLSRQ)
我卡在了第 3 步,它总是 return 一条错误消息 - NO PNR IN AAA
这实际上是什么意思,我该如何避免这个错误?
下面是请求和响应有效载荷数据
请求数据
<SOAP-ENV:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
<SOAP-ENV:Header>
<MessageHeader xmlns="http://www.ebxml.org/namespaces/messageHeader">
<From>
<PartyId>sample.url.of.sabre.client.com</PartyId>
</From>
<To>
<PartyId>webservices.sabre.com</PartyId>
</To>
<CPAId></CPAId>
<ConversationId>convid</ConversationId>
<Service>QueuePlaceLLSRQ</Service>
<Action>QueuePlaceLLSRQ</Action>
<MessageData>
<MessageId>convid112</MessageId>
<Timestamp>2020-04-20T09:25:27Z</Timestamp>
<TimeToLive>2020-04-20T09:25:27Z</TimeToLive>
</MessageData>
</MessageHeader>
<Security xmlns="http://schemas.xmlsoap.org/ws/2002/12/secext">
<BinarySecurityToken EncodingType="Base64Binary" valueType="String" >Shared/IDL:IceSess\/SessMgr:1\.0.IDL/Common/!ICESMS\/ACPCRTC!ICESMSLB\/CRT.LB!1587564276872!533!5</BinarySecurityToken>
</Security>
</SOAP-ENV:Header>
<SOAP-ENV:Body>
<QueuePlaceRQ Version="2.0.4" xmlns="http://webservices.sabre.com/sabreXML/2011/10" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<QueueInfo>
<QueueIdentifier Number="22" PrefatoryInstructionCode="11" PseudoCityCode="****"/>
</QueueInfo>
</QueuePlaceRQ>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
响应数据
<?xml version="1.0" encoding="UTF-8"?>
<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" eb:version="1.0" soap-env:mustUnderstand="1">
<eb:From>
<eb:PartyId eb:type="URI">webservices.sabre.com</eb:PartyId>
</eb:From>
<eb:To>
<eb:PartyId eb:type="URI">sample.url.of.sabre.client.com</eb:PartyId>
</eb:To>
<eb:ConversationId>convid</eb:ConversationId>
<eb:Service>QueuePlaceLLSRQ</eb:Service>
<eb:Action>QueuePlaceLLSRS</eb:Action>
<eb:MessageData>
<eb:MessageId>1815326504754440150</eb:MessageId>
<eb:Timestamp>2020-04-22T14:01:16</eb:Timestamp>
<eb:RefToMessageId>convid</eb:RefToMessageId>
</eb:MessageData>
</eb:MessageHeader>
<wsse:Security xmlns:wsse="http://schemas.xmlsoap.org/ws/2002/12/secext">
<wsse:BinarySecurityToken valueType="String" EncodingType="wsse:Base64Binary">Shared/IDL:IceSess\/SessMgr:1\.0.IDL/Common/!ICESMS\/ACPCRTC!ICESMSLB\/CRT.LB!1587564074215!6005!9</wsse:BinarySecurityToken>
</wsse:Security>
</soap-env:Header>
<soap-env:Body>
<QueuePlaceRS xmlns="http://webservices.sabre.com/sabreXML/2011/10" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:stl="http://services.sabre.com/STL/v01" Version="2.0.4">
<stl:ApplicationResults status="NotProcessed">
<stl:Error type="BusinessLogic" timeStamp="2020-04-22T09:01:16-05:00">
<stl:SystemSpecificResults>
<stl:Message>NO PNR IN AAA</stl:Message>
<stl:ShortText>ERR.SWS.HOST.ERROR_IN_RESPONSE</stl:ShortText>
</stl:SystemSpecificResults>
</stl:Error>
</stl:ApplicationResults>
</QueuePlaceRS>
</soap-env:Body>
</soap-env:Envelope>
我假设您是使用 Stateless
而不是 Stateful
调用 GetReservation
,因此尝试排队时预订不在工作区,或者使用不同的会话。
如果这是您对预订所做的唯一事情,您可以添加 UniqueId 并将其放入该队列,甚至无需检索它。
<UniqueID ID="ABC123"/>
让我回答我自己的问题,因为我在错误的工作流程中,我希望它也能帮助别人。
在 Sabre 的产品目录中,REST 没有 Queue Place API,只有 SOAP。
问题是我在 Bargain Finder Max
和 Create Passenger Name Record
等第一步中使用了 REST。之后,我尝试在 SOAP 中使用 Queue Place API
,系统可能没有注意到 PNR。
实际上,Queue Place API 在 REST 中可用,但它必须与 Create Passenger Name Record API
一起发送并且必须附加一个对象 QueueInfo
在 PostProcessing
下,如下所示。
"PostProcessing": {
"QueuePlace":{
"QueueInfo":{
"QueueIdentifier":[
{
"Number":"123",
"PrefatoryInstructionCode":"11",
"PseudoCityCode":"****"
}
]
}
}
}
很有可能,PNR 在工作区不可用。这就是为什么它说没有 PNR。 GetReservation 有一个请求类型参数。它可以设置为: 无国籍 旅行 有状态的 Stateful requests 是指尚未提交的 PNR;因此,PNR 定位器不是强制性的。 Stateless/Trip 请求是指已提交并存储在数据库中的 PNR。此请求类型需要 PNR 定位器。
请检查您是否使用无状态而不是有状态调用 GetReservation,以便在尝试排队时预订不在工作区,或者使用不同的会话。您的工作区域必须有 PNR。