我目前在PHP中使用CURL来请求XML.当在POSTMAN服务中使用相同的流程时,我可以获得成功结果,但是,当在PHP中使用CURL时,我得到CODE - UC SEG状态不允许 - 0003状态.下面是我的CURL请求标头和代码.CURL请求中的标题选项是否出现问题?
function get_xml_response($xmldata) {
error_reporting(E_ALL);
$wsdl = 'https://sws3-crt.cert.sabre.com';
$header = array(
"Content-type: text/xml;charset=\"utf-8\"",
"Accept: text/xml",
"Cache-Control: no-cache",
"Pragma: no-cache",
"SOAPAction: \"\"",
"Content-length: " . strlen($xmldata),
);
$soap_do = curl_init();
curl_setopt($soap_do, CURLOPT_URL, "$wsdl");
curl_setopt($soap_do, CURLOPT_RETURNTRANSFER, true);
curl_setopt($soap_do, CURLOPT_FRESH_CONNECT, TRUE);
curl_setopt($soap_do, CURLOPT_TIMEOUT, 60);
curl_setopt($soap_do, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($soap_do, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($soap_do, CURLOPT_POST, true);
curl_setopt($soap_do, CURLOPT_POSTFIELDS, $xmldata);
curl_setopt($soap_do, CURLOPT_HTTPHEADER, $header);
if (curl_exec($soap_do) === false) {
$err = 'Curl error: ' . curl_error($soap_do);
curl_close($soap_do);
print $err;
return false;
} else …Run Code Online (Sandbox Code Playgroud) 我正在使用 Sabre Web 服务 (SabreCommandLLSRQ) 构建低票价重新预订的 ac# 概念验证。
\n\n我现在遇到了一些特殊的 saber 字符,我不知道它们在 C# 中是什么。我有一些正在工作,但我肯定会遇到更多 - 有人有 c# 的 saber 字符映射吗?
\n\nprivate string BuildPriceLine()\n{\n const char CHLOR = (char)0xE7; // Cross-of-Lorraine\n const char ENDITEM = (char)0xA7; // End Item key\n const char CHGKEY = (char)0xA5; // Change Key\n\n var sabreCommand = new StringBuilder();\n\n // WPRQ\xe2\x80\xa1AAA\xe2\x80\xa1UN*C123456\xe2\x80\xa1KP0\xe2\x80\xa1XP\xc2\xab\n sabreCommand.Append("WPRQ");\n sabreCommand.Append(CHLOR);\n sabreCommand.Append("AAA");\n sabreCommand.Append(CHLOR);\n sabreCommand.Append("UN*C123456");\n sabreCommand.Append(CHLOR);\n sabreCommand.Append("KP0");\n sabreCommand.Append(CHLOR);\n sabreCommand.Append("XP");\n sabreCommand.Append(WhatSabreCharIsThis); // "\xc2\xab" ?\n\n return sabreCommand.ToString();\n}\nRun Code Online (Sandbox Code Playgroud)\n 我可以从SoapUI在TSTS环境中调用EnhancedSeatMapRQ.当我使用Visual Studio 2015生成的Soap代理进行相同的调用时,我得到null反序列化的Items部分.我还在ApplicationResults部分获得"已完成"(成功).我可以看到Fiddler这个调用实际上是成功的,而这个问题是由.Net反序列化造成的.
当我拨打 OTA_Airprice 时出现错误:*NO FARES/RBD/CARRIER146
演示请求:
<?xml version="1.0" encoding="utf-16"?>
<OTA_AirPriceRQ xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" Version="2.6.0">
<OriginDestinationInformation xmlns="http://webservices.sabre.com/sabreXML/2011/10">
<FlightSegment ArrivalDateTime="2016-06-29T17:55" DepartureDateTime="2016-06-29T15:20" FlightNumber="1559" ResBookDesigCode="V">
<DestinationLocation LocationCode="HKG" />
<MarketingCarrier Code="UO" FlightNumber="1559" />
<OriginLocation LocationCode="DAD" />
</FlightSegment>
<FlightSegment ArrivalDateTime="2016-07-06T14:45" DepartureDateTime="2016-07-06T14:05" FlightNumber="1558" ResBookDesigCode="V">
<DestinationLocation LocationCode="DAD" />
<MarketingCarrier Code="UO" FlightNumber="1558" />
<OriginLocation LocationCode="HKG" />
</FlightSegment>
</OriginDestinationInformation>
<PriceRequestInformation xmlns="http://webservices.sabre.com/sabreXML/2011/10">
<OptionalQualifiers>
<FlightQualifiers>
<VendorPrefs>
<Airline Code="UO" />
</VendorPrefs>
</FlightQualifiers>
<PricingQualifiers CurrencyCode="VND">
<PassengerType Code="ADT" Quantity="1" />
</PricingQualifiers>
</OptionalQualifiers>
</PriceRequestInformation>
</OTA_AirPriceRQ>
Run Code Online (Sandbox Code Playgroud)
数据响应:
<?xml version="1.0" encoding="utf-16"?>
<OTA_AirPriceRS xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" Version="2.6.0">
<ApplicationResults status="NotProcessed" xmlns="http://services.sabre.com/STL/v01">
<Error type="BusinessLogic" …Run Code Online (Sandbox Code Playgroud) 我目前正在使用 sabre Web 服务 TravelItineraryReadLLSRQ(版本 2.2.0),我可以成功检索 PNR 数据上的所有数据。现在我正在尝试实施 GetReservation,但出现以下错误。
没有从开发军刀门户找到任何进一步的细节 - 有没有人看到这个并知道“修复”是什么?
“PNR 的收视率受到限制,原因是 [PNR 的收视率受到限制(不支持的安全检查),代码:700102,严重性:中度]”
<GetReservationRS xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<Errors xmlns="http://webservices.sabre.com/pnrbuilder/v1_18">
<Error>
<Code>700102</Code>
<Message>Viewership is restricted for the PNR, caused by [Viewership is restricted for the PNR (Unsupported security check), code: 700102, severity: MODERATE]</Message>
<Severity>MODERATE</Severity>
</Error>
</Errors>
</GetReservationRS>
Run Code Online (Sandbox Code Playgroud) 有谁知道如何通过Saber(https://developer.sabre.com/)获得SOAP服务的WSDL ?我完全坚持下去。
我正在使用soap api在php中开发web应用程序.我有xml format as shown below把请求发送到api但是我在查看xml时遇到了像元素companyname上不允许Trailing solidus这样的错误postman.
<OTA_AirLowFareSearchRQ xmlns="http://www.opentravel.org/OTA/2003/05" ResponseType="OTA" ResponseVersion="1.9.2" Version="1.9.2" AvailableFlightsOnly="true">
<POS>
<Source PseudoCityCode="PCC">
<RequestorID ID="1" Type="1">
<CompanyName Code="TN" />
</RequestorID>
</Source>
</POS>
<OriginDestinationInformation RPH="1">
<DepartureDateTime>2016-03-15T11:00:00</DepartureDateTime>
<OriginLocation LocationCode="KTM"/>
<DestinationLocation LocationCode="DEL"/>
<TPA_Extensions>
<SegmentType Code="O"/>
</TPA_Extensions>
</OriginDestinationInformation>
<TravelPreferences ValidInterlineTicket="true">
<CabinPref PreferLevel="Preferred" Cabin="Y" />
<TPA_Extensions>
<TripType Value="Return" />
<LongConnectTime Min="780" Max="1200" Enable="true" />
<ExcludeCallDirectCarriers Enabled="true" />
</TPA_Extensions>
</TravelPreferences>
<TravelerInfoSummary>
<SeatsRequested>3</SeatsRequested>
<AirTravelerAvail>
<PassengerTypeQuantity Code="ADT" Quantity="2" />
<PassengerTypeQuantity Code="CHD" Quantity="1" />
</AirTravelerAvail>
</TravelerInfoSummary>
<TPA_Extensions>
<IntelliSellTransaction>
<RequestType Name="50ITINS" …Run Code Online (Sandbox Code Playgroud) 我正在编写一个自动取消某个队列上的PNR的服务.使用OTA_CancelLLSRQ请求听起来非常简单,但是看起来我必须单独遍历每个段,或者有没有办法可以一次性取消所有段?
在应用程序中我们定义了一个PNR类,该类包含我们可以通过""调用获得的所有信息.
要取消PNR,我目前使用以下代码:
MessageHeader msgHeader = new MessageHeader
{
ConversationId = "TestSession",
CPAId = licenseId,
Action = "OTA_CancelLLSRQ",
Service = new Service { Value = "OTA_CancelLLSRQ" },
MessageData = new MessageData
{
MessageId = "xxx",
Timestamp = DateTime.UtcNow.ToString("s") + "Z"
},
From = new From()
{
PartyId = new PartyId[]
{
new PartyId { Value = "WebServiceClient"}
}
},
To = new To()
{
PartyId = new[]
{
new PartyId { Value = "WebServiceSupplier"}
}
}
};
var segmentList = …Run Code Online (Sandbox Code Playgroud) 我的一个朋友说,如果我使用的正则表达式太长,那可能是错误的工具.有什么想法可以更好地解析这个文本吗?我有一个正则表达式,将所有内容返回到一个数组,我可以很容易地将其分块,但如果有另一种更简单的方法,我真的很想看到它.
这是它的样子:
2 AB 123A 01JAN M ABCDEF AA1 100A 200A 02JAN T /ABCD /E
Run Code Online (Sandbox Code Playgroud)
这是一个细分:
2是行号,这些行从1一直到99.如果由于格式化而无法看到,则会有一个小于10的空格字符.
该空间可能会或可能不会被替换 *
AB 是一个重要的数据单位(UOD).
AB可以预先/CD设定另一个重要的UOD.
123是一个重要的UOD.它的范围可以从1(前置4个空格)到99999.
A 是一个重要的UOD.
01JAN 是一个日/月组合,我需要提取两个UOD.
M是一天的简称.这可能是1和之间的数字7.
ABC 是一个重要的UOD.
DEF 是一个重要的UOD.
之后的空间DEF可能是一个*
AA1 可能是零个字符,或者它可能是5.它不重要.
100A是时间戳,但可能是格式1300.该A可N当时间1200或P在下午的时间.
然后我们看到另一个时间戳.
下一个日期部分可能不在那里,例如,这是有效的:
93*DE/QQ51234 30APR J QWERTY*QQ0 1250 0520 /ABCD*ASDFAS /E
Run Code Online (Sandbox Code Playgroud)/ABCD*ASDFAS /E …
您能否帮我找到 Sabre 主机命令WPNCS 的等效 API (即使不可用也搜索最低票价)
但在 API 文档中找不到正确的请求
请帮忙!
当我尝试为儿童和/或婴儿乘客创建 PNR 时,我收到此错误,但是当它是仅限成人时,它工作正常。我读过他们的文档我不知道我做错了什么。请帮忙。
有效载荷:
<PassengerDetailsRQ version="3.2.0" HaltOnError="true" IgnoreOnError="false" xmlns="http://services.sabre.com/sp/pd/v3_2">
<PostProcessing IgnoreAfter="false" RedisplayReservation="true" >
<EndTransactionRQ>
<EndTransaction Ind="true" ></EndTransaction>
<Source ReceivedFrom="TEST" ></Source>
</EndTransactionRQ>
</PostProcessing>
<PriceQuoteInfo>
<Link NameNumber="1.1" Record="1" ></Link>
<Link NameNumber="2.1" Record="1" ></Link>
<Link NameNumber="3.1" Record="1" ></Link>
</PriceQuoteInfo>
<SpecialReqDetails>
<SpecialServiceRQ>
<SpecialServiceInfo>
<SecureFlight SegmentNumber="A" >
<PersonName DateOfBirth="1980-01-01" Gender="M" NameNumber="1.1" >
<GivenName>JOHN</GivenName>
<Surname>DOE</Surname>
</PersonName>
</SecureFlight>
<SecureFlight SegmentNumber="A" >
<PersonName DateOfBirth="1980-03-01" Gender="F" NameNumber="2.1" >
<GivenName>JANE</GivenName>
<Surname>DOE</Surname>
</PersonName>
</SecureFlight>
<SecureFlight SegmentNumber="A" >
<PersonName DateOfBirth="2006-03-01" Gender="M" NameNumber="3.1" >
<GivenName>CHILD</GivenName>
<Surname>DOE</Surname>
</PersonName>
</SecureFlight>
</SpecialServiceInfo>
</SpecialServiceRQ>
</SpecialReqDetails>
<TravelItineraryAddInfoRQ>
<AgencyInfo> …Run Code Online (Sandbox Code Playgroud) 我目前正在为 Air(Flights) 开发 Sabre SOAP API,并使用 BargainFinderMax(OTA_AirLowFareSearchRQ) 来搜索航班可用性。所以在请求中,有一个参数ResponseType 定义了对请求数据的响应类型。我的问题是:是否有任何响应类型会带来基于价格分组的结果。例如:一个价格 = 1000 美元的组将包含多个航班选项(具有不同的时间)。目前,我只能获取 OTA 和 GIR 响应类型。其中显示了具有相同价格的不同行程,如下图所示:

它有两个行程,数据相同(价格相同)但行程不同。我实际上在寻找的是将具有相同价格的行程组合在一个元素中。如果我们发出 LOWFARESEARCH 请求并设置 SolutionResult="false",则与 TravelPort 中返回的响应相同。它给出了PricePoint结果,即以单个价格点分组的行程。这可以在军刀中实现吗?
我正在使用与 Sabre SOAP API 集成的系统。从我的角度来看,它只是将格式正确的 XML(Content-Type标头设置为text/xml)发送到端点,作为响应,我得到另一个 XML。它可以工作,但是偶尔(我们发送的请求的一小部分)我会收到此错误:
要求:
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Header>
<ns4:MessageHeader xmlns:ns4="http://www.ebxml.org/namespaces/messageHeader" xmlns:ns5="http://www.w3.org/1999/xlink" xmlns:ns6="http://schemas.xmlsoap.org/ws/2002/12/secext" xmlns:ns7="http://www.opentravel.org/OTA/2002/11" xmlns:ns8="http://www.w3.org/2000/09/xmldsig#">
<ns4:ConversationId>04f446900386013646690cc47a6a2880</ns4:ConversationId>
<ns4:From>
<ns4:PartyId ns4:type="urn:x12.org:IO5:01">999999</ns4:PartyId>
<ns4:Role/>
</ns4:From>
<ns4:To>
<ns4:PartyId ns4:type="urn:x12.org:IO5:01">123123</ns4:PartyId>
<ns4:Role/>
</ns4:To>
<ns4:CPAId>CPAID</ns4:CPAId>
<ns4:Service ns4:type="OTA"/>
<ns4:Action>PassengerDetailsRQ</ns4:Action>
</ns4:MessageHeader>
<wsse:Security xmlns:wsse="http://schemas.xmlsoap.org/ws/2002/12/secext">
<wsse:BinarySecurityToken EncodingType="wsse:Base64Binary" valueType="String">SECURITY_TOKEN_REMOVED</wsse:BinarySecurityToken>
</wsse:Security>
</soap:Header>
<soap:Body>
<PassengerDetailsRQ HaltOnError="false" version="3.2.0" xmlns="http://services.sabre.com/sp/pd/v3_2">
<PostProcessing RedisplayReservation="true">
<EndTransactionRQ>
<EndTransaction Ind="true"/>
<Source ReceivedFrom="APPNAME"/>
</EndTransactionRQ>
</PostProcessing>
</PassengerDetailsRQ>
</soap:Body>
</soap:Envelope>
Run Code Online (Sandbox Code Playgroud)
回复:
<?xml version="1.0" encoding="UTF-8"?>
<soap-env:Envelope xmlns:soap-env="http://schemas.xmlsoap.org/soap/envelope/">
<soap-env:Header/>
<soap-env:Body>
<soap-env:Fault>
<faultcode>soap-env:Client.InvalidEbXmlMessage</faultcode>
<faultstring>Unable to internalize message</faultstring>
<detail>
<StackTrace>javax.xml.soap.SOAPException: Unable to internalize …Run Code Online (Sandbox Code Playgroud)