从Sabre API发行票证

时间:2017-02-10 08:57:40

标签: sabre

我正在尝试使用Sabre API实现预订航班的应用程序。我已经成功创建了PNR,并且正在发行票证。我按照列出的工作流程来预订和发放票证。

  1. BargainFinderMaxRQ查找航班
  2. PassengerDetailsRQ生成PNR
  3. EnhancedAirBookRQ预订航段
  4. 要发出票证,我正在遵循此工作流程:

    1. TravelItineraryReadRQ获得PNR
    2. DesignatePrinterLLSRQ指定打印机(即使我不想指定打印机,因为我只需要电子票)
    3. AirTicketLLSRQ发行门票
    4. EndTransactionLLSRQ结束交易并发送电子邮件
    5. 我在发行机票时被困了几天并且已经做了很多工作要克服,但是通过一个或多个步骤,我不知何故被困在某个地方。现在我被困在 DesignatePrinterLLSRQ ,其中包含 ERR.SWS.CLIENT.VALIDATION_FAILED

      附上我的xml日志: 请求机构:

      <SOAP-ENV:Body>
      <DesignatePrinterRQ 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" Version="2.0.1">
      <Printers>
      <BagTag LNIATA=""/>
      </Printers>
      </DesignatePrinterRQ>
        <DesignatePrinterRQ 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" Version="2.0.1">
      <Printers>
      <BagTag Undesignate="true"/>
      </Printers>
      </DesignatePrinterRQ>
            </SOAP-ENV:Body>
      

      响应:

      <soap-env:Body>
              <soap-env:Fault>
                  <faultcode>soap-env:Client.Validation</faultcode>
                  <faultstring>ERR.SWS.CLIENT.VALIDATION_FAILED</faultstring>
                  <detail>
                      <stl:ApplicationResults xmlns:stl="http://services.sabre.com/STL/v01" status="NotProcessed">
                          <stl:Error timeStamp="2017-02-10T02:35:51-06:00" type="Validation">
                              <stl:SystemSpecificResults>
                                  <stl:Message>Request resulted in empty Host Command</stl:Message>
                                  <stl:ShortText>ERR.SWS.CLIENT.VALIDATION_FAILED</stl:ShortText>
                              </stl:SystemSpecificResults>
                          </stl:Error>
                      </stl:ApplicationResults>
                  </detail>
              </soap-env:Fault>
          </soap-env:Body>
      

      如果可能,请告诉我工作流程是否存在问题。 此致

2 个答案:

答案 0 :(得分:2)

有一个重要的错误,即使你不再得到同样的错误,重要的是突出显示。

在您的请求中,您尝试多次调用该服务并且这是不正确的。您将打开两次DesignatePrinterRQ标记,但这不起作用,因为在关闭第一个DesignatePrinter之后,没有其他任何内容。

以下是您的要求:

<SOAP-ENV:Body>
    <DesignatePrinterRQ 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" Version="2.0.1">
        <Printers>
            <BagTag LNIATA=""/>
        </Printers>
    </DesignatePrinterRQ>
    <DesignatePrinterRQ 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" Version="2.0.1">
        <Printers>
            <BagTag Undesignate="true"/>
        </Printers>
    </DesignatePrinterRQ>
</SOAP-ENV:Body>

以下是应该如何:

<SOAP-ENV:Body>
    <DesignatePrinterRQ 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" Version="2.0.1">
        <Printers>
            <BagTag LNIATA=""/>
        </Printers>
    </DesignatePrinterRQ>
</SOAP-ENV:Body>

-

现在,我不确定您正在开发哪种类型的客户,但BagTag打印机仅供航空公司使用,而非旅行社。您只需要在发出票证之前发送类似的内容:

<SOAP-ENV:Body>
    <DesignatePrinterRQ 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" Version="2.0.1">
        <Printers>
            <Ticket CountryCode="AT">
        </Printers>
    </DesignatePrinterRQ>
</SOAP-ENV:Body>

为了检查您应该使用哪个CountryCode,请检查 Format Finder。 (您应该能够使用与创建会话相同的凭据)

如果在签发机票时您获得了类似指定HardCopy打印机的信息,请与Sabre取得联系,以便他们尝试禁用硬拷贝打印。

答案 1 :(得分:0)

Sabre拥有虚拟打印机的概念,它不是物理打印机,适用于此类情况,您不希望实际打印某些内容。您需要使用军刀配置虚拟打印机并为其提供行地址。

您的票务工作流程应该是......

  • 参加军刀会议
  • 指定一台打印机。在此之前,您可能需要将您的职责代码更改为4或5,否则打印机指定可能会失败。
  • 致电AirTicket
  • EndTransaction

确保在签发机票前引用您的行程。

指定打印机时,需要指定国家/地区代码和行地址。我用来做这个的一些代码是......

// Assign a printer
DesignatePrinterRQ designatePrinterRQ = new DesignatePrinterRQ();
designatePrinterRQ.setVersion("2003A.TsabreXML1.2.1");
Printers printers = new Printers();
designatePrinterRQ.setPrinters(printers);
Ticket ticketPrinter = new Ticket();
printers.setTicket(ticketPrinter);
ticketPrinter.setCountryCode("2A");
ticketPrinter.setLineAddress("99999901234540");

在上面的代码中,999999是虚拟打印机,01234540是军刀会话的站代码。

相关问题