Closed jadchahine closed 5 years ago
When i run Lesson2 i got the following result
from = MEL , to = SYD //roundtrip
Price:AED2900 [BasePrice AUD1082.30, Taxes AED140] Price:AED3480 [BasePrice AUD1310.02, Taxes AED140] The Universal Record Locator for this reservation : AEW4UR
But when we calculate BasePrice and Taxes actual price differ
is first price for MEL to SYD
also
second price for SYD to MEL?
from = DEL , to = SYD
Price:AED3580 [BasePrice INR32500, Taxes AED1860] Price:AED5930 [BasePrice INR75000, Taxes AED1970]
also look at the BasePrice it is 'INR' and Taxes is AED.
How can i get all possible flight routes from all available flight vendors. if i give origin as DEL and Destination as SYD . i get buildroutings 16 for each DEL and SYD . When i merge these buildroutings i get 256(16*16) AirItineraries . If it is available itineraries can i add it in my flight view?
When i tried to print all AirItinerary i got following result from Lesson2.
from = DEL , to = SYD
I think '0' for Outbound '1' for inbound in round trip
Group Origin Destination
===== ===== ===== =====
0 DEL , HKG
0 HKG , SYD
1 SYD , HKG
1 HKG , DEL
Price:AED3580 [BasePrice INR32500, Taxes AED1860]
Price:AED5930 [BasePrice INR75000, Taxes AED1970]
===== ===== ===== =====
0 DEL , HKG
0 HKG , MEL
1 SYD , HKG
1 HKG , DEL
Price:AED3620 [BasePrice INR33500, Taxes AED1850]
Price:AED5940 [BasePrice INR75500, Taxes AED1960]
===== ===== ===== =====
Null Segment
0 MEL , SYD
1 SYD , HKG
1 HKG , DEL
Price:AED2730 [BasePrice AUD902.00, Taxes AED430]
Price:AED5000 [BasePrice AUD1794.00, Taxes AED430]
===== ===== ===== =====
Null Segment
0 BNE , SYD
1 SYD , HKG
1 HKG , DEL
Price:AED2760 [BasePrice AUD910.00, Taxes AED440]
Price:AED4930 [BasePrice AUD1766.00, Taxes AED440]
Exception in thread "main" com.travelport.service.air_v48_0.AirFaultMessage: NO VALID FARE FOR INPUT CRITERIA
when we check first result it is understandable but in the second result showing HKG to MEL instead of HKG to SYD.
My main aim is to get available flights between origin and destination also its rate like the travelport demo site. Here iam taking price details for the required AirItinerary for every iteration. So it is very slow. Could you please provide me a proper solution for getting price details along with AirItinerary.
Please help me.
Thanks.
Please examine above two posts also this.
For One Way trip i changed the code and run
1st run
2nd Run
look the 1st output it is correct but 2nd showing two prices.
help me please... Thanks.
Hi AlbinGlobosoft,
Please find below the details regarding your questions. Thanks.
You are only seeing the response from the sysout of the Lesson2. Please check the complete response using fiddler or by debugging and you will see the TotalPrice, BasePrice and Taxes are being returned in 2 currencies, one is default currency and another one is currency based on the location. Please find below the link with all the details.
You are using origin as DEL and destination as SYD and as a round trip. Now, it is quite possible that the itinerary returned will use the same connecting airport or a different airport.
So, say, I am going from DEL - SYD and then 5 day later will return from SYD - DEL. My flights to SYD can be like this,
DEL -> CCU -> SIN -> SYD
My return flights to DEL can be completely different like this, SYD -> MEL -> SIN -> MAA -> DEL
Both scenarios are valid and working as expected.
regarding NO VALID FARE FOR INPUT CRITERIA, it is valid error and due to test data availability in PreProduction it can happen when there is no fares available for a particular itinerary.
In Pricing response, there can be one, two or more than two AirPricingSolution and it is upto the user to select the price which the user wants to book the flight with. It is a very valid scenario and in most of the cases you will receive more than one AirPricingSolution for the same classOfService.
It is upto you which AirPricingSolution you would like to use to complete the booking.
Please find below the link with the details.
When i try to get price for each Air Itinerary for every iteration it is becoming too slow. Since AirItinerary list length may come upto 100 or more. is that the only way?
Hi AlbinGlobosoft,
I would not recommend running AirPrice for all the AirSegment and itineraries. It should be run only on the selected segment. To get the price of all the itineraries, you can use LowFareSearch. Please find below the details. Thanks.
Could you please take a look at this error . i got it from accessing SeatMapReq . I checked it after getting AirSegment from the 'Low Fare Shopping' Result and i found that ClassOfService is null . Thanks.
com.travelport.service.air_v48_0.AirFaultMessage: AirSegment @ClassOfService is required. at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source) at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source) at java.lang.reflect.Constructor.newInstance(Unknown Source) at org.apache.cxf.interceptor.ClientFaultConverter.processFaultDetail(ClientFaultConverter.java:183) at org.apache.cxf.interceptor.ClientFaultConverter.handleMessage(ClientFaultConverter.java:83) at org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:308) at org.apache.cxf.interceptor.AbstractFaultChainInitiatorObserver.onMessage(AbstractFaultChainInitiatorObserver.java:112) at org.apache.cxf.binding.soap.interceptor.CheckFaultInterceptor.handleMessage(CheckFaultInterceptor.java:70) at org.apache.cxf.binding.soap.interceptor.CheckFaultInterceptor.handleMessage(CheckFaultInterceptor.java:35) at org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:308) at org.apache.cxf.endpoint.ClientImpl.onMessage(ClientImpl.java:826) at org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.handleResponseInternal(HTTPConduit.java:1693) at org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.handleResponse(HTTPConduit.java:1570) at org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.close(HTTPConduit.java:1371) at org.apache.cxf.transport.AbstractConduit.close(AbstractConduit.java:56) at org.apache.cxf.transport.http.HTTPConduit.close(HTTPConduit.java:671) at org.apache.cxf.interceptor.MessageSenderInterceptor$MessageSenderEndingInterceptor.handleMessage(MessageSenderInterceptor.java:63) at org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:308) at org.apache.cxf.endpoint.ClientImpl.doInvoke(ClientImpl.java:531) at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:440) at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:355) at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:313) at org.apache.cxf.frontend.ClientProxy.invokeSync(ClientProxy.java:96) at org.apache.cxf.jaxws.JaxWsClientProxy.invoke(JaxWsClientProxy.java:140) at com.sun.proxy.$Proxy53.service(Unknown Source) at test.app.support.test2.LowFareSearchTest.seatMapRequest(LowFareSearchTest.java:885) at test.app.support.test2.LowFareSearchTest.main(LowFareSearchTest.java:221) Exception in thread "main" java.lang.NullPointerException at test.app.support.test2.LowFareSearchTest.main(LowFareSearchTest.java:223)
Hi AlbinGlobosoft,
The ClassOfService is same as BookingClass. You have to add the ClassOfService with the booking class you have selected, like Q, W, X, Y etc. In LowFareSearch it comes as
I priced an itinerary from the LowFareSearchRsp using AirPriceReq. In the response i found ClassOfService for each AirSegment at AirItinerary/AirSegment . From the AirPriceRsp i requested for SeatMapReq by directly running java class i got result but from the web it takes too time for requesting . It takes about 3 min or sometimes read time out exception .
Could you please extend the trial days for the following credentials if it is going to be expired? The credentials for PCC 3qv3 are: uAPI PP Branch Code P7121154 uAPI PP User Name uAPI4282506692-e6da8830
Thanks.
Hi AlbinGlobosoft,
It is not recommended to run SeatMap for all the AirSegments. The SeatMap should be run only for the selected AirSegments.
For expired credentials, unfortunately there is no way to extend expired or expiring credentials. Please request for a new set of trial credentials. Thanks.
I selected seats and i tried to book it and i got following error
*** Unable to price itinerary:Key reference not found for AirSegment with key reference U8Bn9y8Q2BKAGXtBAAAAAA== inside SpecificSeatAssignment com.travelport.service.universal_v48_0.AirFaultMessage: Key reference not found for AirSegment with key reference U8Bn9y8Q2BKAGXtBAAAAAA== inside SpecificSeatAssignment
Response xml:
**<SOAP:Envelope xmlns:SOAP="http://schemas.xmlsoap.org/soap/envelope/">
I get the following error when try to ticket from Universal Record Locator 'ESZ9DT' . When i searched for the universal recorder locator in travelport demo site i got it response . I have given it below(pic).
Credentials : The credentials for PCC 3qv3 are: uAPI PP Branch Code P7121154 uAPI PP User Name uAPI4282506692-e6da8830
com.travelport.service.air_v48_0.AirFaultMessage: Record locator not found. at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source) at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source) at java.lang.reflect.Constructor.newInstance(Unknown Source) at org.apache.cxf.interceptor.ClientFaultConverter.processFaultDetail(ClientFaultConverter.java:183) at org.apache.cxf.interceptor.ClientFaultConverter.handleMessage(ClientFaultConverter.java:83) at org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:308) at org.apache.cxf.interceptor.AbstractFaultChainInitiatorObserver.onMessage(AbstractFaultChainInitiatorObserver.java:112) at org.apache.cxf.binding.soap.interceptor.CheckFaultInterceptor.handleMessage(CheckFaultInterceptor.java:70) at org.apache.cxf.binding.soap.interceptor.CheckFaultInterceptor.handleMessage(CheckFaultInterceptor.java:35) at org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:308) at org.apache.cxf.endpoint.ClientImpl.onMessage(ClientImpl.java:826) at org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.handleResponseInternal(HTTPConduit.java:1693) at org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.handleResponse(HTTPConduit.java:1570) at org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.close(HTTPConduit.java:1371) at org.apache.cxf.io.CacheAndWriteOutputStream.postClose(CacheAndWriteOutputStream.java:56) at org.apache.cxf.io.CachedOutputStream.close(CachedOutputStream.java:228) at org.apache.cxf.transport.AbstractConduit.close(AbstractConduit.java:56) at org.apache.cxf.transport.http.HTTPConduit.close(HTTPConduit.java:671) at org.apache.cxf.interceptor.MessageSenderInterceptor$MessageSenderEndingInterceptor.handleMessage(MessageSenderInterceptor.java:63) at org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:308) at org.apache.cxf.endpoint.ClientImpl.doInvoke(ClientImpl.java:531) at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:440) at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:355) at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:313) at org.apache.cxf.frontend.ClientProxy.invokeSync(ClientProxy.java:96) at org.apache.cxf.jaxws.JaxWsClientProxy.invoke(JaxWsClientProxy.java:140) at com.sun.proxy.$Proxy52.service(Unknown Source) at test.app.support.test2.LowFareSearchOriginal.bookTicketing(LowFareSearchOriginal.java:1371) at test.app.support.test2.LowFareSearchOriginal.main(LowFareSearchOriginal.java:311)
/----------------------- Java Code -------- public static PortWrapper<UniversalRecordRetrieveServicePortType,UniversalRecordService> universalPort=new PortWrapper<UniversalRecordRetrieveServicePortType,UniversalRecordService>(universal,UniversalRecordRetrieveServicePortType.class,AIR_ENDPOINT);
AirTicketingReq req=new AirTicketingReq();
req.setAuthorizedBy("user");
req.setBulkTicket(false);
req.setReturnInfoOnFail(true);
req.setTargetBranch(System.getProperty("travelport.targetBranch"));
req.setTraceId(traceId);
BillingPointOfSaleInfo posInfo = new BillingPointOfSaleInfo();
posInfo.setOriginApplication("UAPI");
req.setBillingPointOfSaleInfo(posInfo);
AirReservationLocatorCode code=new AirReservationLocatorCode();
code.setValue(universlRecord);
req.setAirReservationLocatorCode(code);
if(!airPricingInfoKey.equals("")) {
AirPricingInfoRef airPricingInfo=new AirPricingInfoRef();
airPricingInfo.setKey(airPricingInfoKey);
req.getAirPricingInfoRef().add(airPricingInfo);
}
try {
WSDLService.airTicket.showXML(true);
} catch (FileNotFoundException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
try {
WSDLService.airTicket.get().service(req);
} catch (com.travelport.service.air_v48_0.AirFaultMessage e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
/-----------------------
Putting BillingPointOfSaleInfo at first line even not helped.
Could you please also provide solution for seat assignment that i posted above?
Please help me. Thanks.
Request & Response LogginInOut.txt
Hi AlbinGlobosoft,
Please find below the details regarding your questions. Thanks.
* Unable to price itinerary:Key reference not found for AirSegment with key reference U8Bn9y8Q2BKAGXtBAAAAAA== inside SpecificSeatAssignment com.travelport.service.universal_v48_0.AirFaultMessage: Key reference not found for AirSegment with key reference U8Bn9y8Q2BKAGXtBAAAAAA== inside SpecificSeatAssignment
This needs proper AirSegmentRef key inside the request. Please find below the link to the sample requests and full SeatMap booking flow.
In ticketing it requires AirReservationLocatorCode, not the UniversalLocator code. Please use AirReservationLocatorCode for ticketing. You will be able to see the AirReservationLocator code inside the AirReservation tag in AirCreateReservationRsp. Please find below the link with the details.
is there any request for getting all carrier flights?
How can i use this link to request for seat reservation since it's showing different suppliers lilke DL, A3 , AZ etc... Because i'am only getting QF carrier flights only. if i change it some other carrier it shows "NO AVAILABILITY FOR THIS REQUEST". I just need to reserve selected seats only.
It would be very helpful if you give me a solution. Thanks.
Hi AlbinGlobosoft,
Please find below the details. Thanks.
is there any request for getting all carrier flights?
Not all carriers are available in all Markets, it depends on origin and destination which carrier will be returned. If you are trying SYD-MEL it is possible that you would not find DL, A3 or AZ. In that case, the error message "NO AVAILABILITY FOR THIS REQUEST" is a valid error message. Try DEN-SFO or ATL-SFO for DL flights. If you don't use Permitted or Preferred Carrier modifiers, it will automatically return all the available carrier's flights in the response.
LogginInOut.txt
PreReservedSeatAssignment is available for ACH carriers. For 1G, you have to use the AirMerchandisingFlow.
https://support.travelport.com/webhelp/uapi/uapi.htm#Standalone_Merchandising/Air_Merchandising.htm
How can i use this link to request for seat reservation since it's showing different suppliers lilke DL, A3 , AZ etc... Because i'am only getting QF carrier flights only. if i change it some other carrier it shows "NO AVAILABILITY FOR THIS REQUEST". I just need to reserve selected seats only.
You can use the flow for QF seats as well. The link I shared are actually samples and based on the carrier, you have to create the request accordingly. The request structure is same for all ATPCO carriers.
https://support.travelport.com/webhelp/uapi/uapi.htm#Standalone_Merchandising/Air_Merchandising.htm
I got error 'User is not authorized' while reserving seat with AirMerchandisingFulfillmentReq .
AirMerchandisingFulfillmentReq-Res.txt
It would be grateful if you could go through this code ( given in zip) . The credentials for PCC 3qv3 are: uAPI PP Branch Code P7121154 uAPI PP User Name: uAPI4282506692-e6da8830
Here is the req & res.
Thanks.
Hi AlbinGlobosoft,
Please find below details to your question. Thanks.
1) AirMerchandisingFulfillmentReq-Res.txt
It would be grateful if you could go through this code ( given in zip) . The credentials for PCC 3qv3 are: uAPI PP Branch Code P7121154 uAPI PP User Name: uAPI4282506692-e6da8830
support.zip
If you are using trial credentials you might not be able to use merchandising transactions. Merchandising transactions need provisioning and not available using trial credentials. If you are using preproduction credentials, please contact your Travelport Account Manager and your Travelport Account Manager will be able to provide you access to merchandising transactions.
The PaidSeat=True attribute will show up in case seat is paid.
AirCreateReservationReq.txt
"air:AirReservation LocatorCode="DP77N9" this is the AirReservationLocatorCode. "common_v48_0:SupplierLocator SupplierCode="QF" SupplierLocatorCode="J8R7GW"" : this is the carrier locatorCode.
Link to the end to end flow https://support.travelport.com/webhelp/uapi/uapi.htm#SampleWeb/Individual_Sample_Pages/044-ACH_Air_LFS-AC_OptSvce-Meals.htm?Highlight=Meal
Here is the req & res.
OneWay-LowFareSearch.txt
you are using the below modifier which is a specially provisioned operation. You can do normal OneWayShop, but if you are using the modifier you need permission.
In that case, the traveler can get the Seat Number during boarding process. If you book a flight without seat, seat is assigned during boarding process.
Hi AlbinGlobosoft,
yes, I meant by One Way LowFareSearch. For
Closing this thread. Please create a new issue for any other questions.
Hi All,
This lesson is a great one that takes into account low fare search and booking:
https://github.com/Travelport/travelport-uapi-tutorial/blob/master/src/com/travelport/uapi/unit1/Lesson2.java
But I don't found a logic that take into account ticketing, please can you provide us a sample code for ticketing after search and booking (also for hotel booking)
Thanks&Regards