Descripción general

Esta guía abarca diferencias esenciales entre las versiones SOAP y REST de la API de EAN. Utilice esta guía como ayuda para la actualización de la integración con REST y validar los cambios. En esta guía, solo se incluye la ruta de reserva básica (lista, disponibilidad, reserva).

Cambios globales
##Cambios globales ###Elementos comunes Los [elementos de solicitud comunes][1] de la API resultan esenciales para la autenticación, las comisiones, las estadísticas y la definición de precios. La omisión de un elemento común obligatorio puede provocar discrepancias en los precios, errores de reserva o cualquier otro tipo de fallo. Estos elementos se resaltan de color amarillo en esta guía. Con SOAP, los elementos comunes se incluían en el cuerpo de la solicitud. Al actualizar a REST, estos elementos se envían como parámetros URL. Las respuestas JSON no se devuelven de forma predeterminada. Para solicitar una respuesta con formato JSON, deberá incluir el texto `Accept: application/json` en los encabezados de la solicitud de HTML. Si no incluye el valor de aceptación adecuado en el encabezado, las respuestas a las solicitudes de REST se realizarán como XML de forma predeterminada.

Durante la comprobación, en lugar de cambiar los encabezados de la solicitud, puede incluir el parámetro `_type=json` en el cuerpo de la solicitud. Este parámetro se destaca en los ejemplos que se indican más abajo como recordatorio de que las respuestas no se realizan de forma predeterminada como JSON; no utilice este parámetro en solicitudes de producción. [1]: /docs/common/
Elementos comunes de SOAP
<soapenv:Body>
<v3:{serviceName}>
<{requestParentElement}>
<apiKey>#####</apiKey>
<cid>######</cid>
<customerIpAddress>##########</customerIpAddress> <customerUserAgent>##########</customerUserAgent> <customerSessionId>##########</customerSessionId>
<minorRev>##</minorRev> <locale>en_US</locale> <currencyCode>USD</currencyCode> ...
Elementos comunes de REST
http://api.ean.com/ean-services/rs/hotel/v3/{serviceName}?
apiKey=#####
&cid=#####
&customerIpAddress=#####
&customerUserAgent=######
&customerSessionId=#####
&minorRev=##
&locale=en_US
&currencyCode=USD
&_type=json
...


Elementos comunes de SOAP
<soapenv:Body>
<v3:{serviceName}>
<{requestParentElement}>
<apiKey>#####</apiKey>
<cid>######</cid>
<customerIpAddress>##########</customerIpAddress> <customerUserAgent>##########</customerUserAgent> <customerSessionId>##########</customerSessionId>
<minorRev>##</minorRev> <locale>en_US</locale> <currencyCode>USD</currencyCode> ...
Elementos comunes de REST
http://api.ean.com/ean-services/rs/hotel/v3/{serviceName}?
apiKey=#####
&cid=#####
&customerIpAddress=#####
&customerUserAgent=######
&customerSessionId=#####
&minorRev=##
&locale=en_US
&currencyCode=USD
&_type=json
...


Lista de hoteles

El cambio más importante de la solicitud de listas es la exclusiva estructura de objetos de habitaciones de la API de REST, que reúne los valores de los elementos de SOAP anteriores en una lista delimitada mediante comas:

&room[room number, starting with 1]= [number of adults], [first child's age], [second child's age], [etc]


Tenga en cuenta que no existe ningún equivalente directo en REST para el elemento numberOfChildren empleado en SOAP y XML. En lugar de ello, el recuento de los huéspedes infantiles de cada habitación se determina en función del número de valores de edades de niños que se haya indicado.

En los ejemplos que aparecen más abajo, se solicitan las mismas ocupaciones: una habitación para dos adultos y dos niños de 8 y 12 años, y una habitación para dos adultos únicamente.

Elementos comunes de SOAP
<soapenv:Body>
<v3:{serviceName}>
<{requestParentElement}>
<apiKey>#####</apiKey>
<cid>######</cid>
<customerIpAddress>##########</customerIpAddress> <customerUserAgent>##########</customerUserAgent> <customerSessionId>##########</customerSessionId>
<minorRev>##</minorRev> <locale>en_US</locale> <currencyCode>USD</currencyCode> ...
Elementos comunes de REST
http://api.ean.com/ean-services/rs/hotel/v3/{serviceName}?
apiKey=#####
&cid=#####
&customerIpAddress=#####
&customerUserAgent=######
&customerSessionId=#####
&minorRev=##
&locale=en_US
&currencyCode=USD
&_type=json
...


Lista de hoteles

El cambio más importante de la solicitud de listas es la exclusiva estructura de objetos de habitaciones de la API de REST, que reúne los valores de los elementos de SOAP anteriores en una lista delimitada mediante comas:

&room[room number, starting with 1]= [number of adults], [first child's age], [second child's age], [etc]


Tenga en cuenta que no existe ningún equivalente directo en REST para el elemento numberOfChildren empleado en SOAP y XML. En lugar de ello, el recuento de los huéspedes infantiles de cada habitación se determina en función del número de valores de edades de niños que se haya indicado.

En los ejemplos que aparecen más abajo, se solicitan las mismas ocupaciones: una habitación para dos adultos y dos niños de 8 y 12 años, y una habitación para dos adultos únicamente.

Solicitud de lista de SOAP
<v3:getList>
<HotelListRequest>
<apiKey>#####</apiKey>
<cid>######</cid>
<customerIpAddress>##########</customerIpAddress> <customerUserAgent>##########</customerUserAgent> <customerSessionId>##########</customerSessionId>
<minorRev>##</minorRev> <locale>en_US</locale> <currencyCode>USD</currencyCode>
<destinationString>Milan, Italy</destinationString>
<arrivalDate>08/10/2014</arrivalDate>
<departureDate>08/12/2014</departureDate>
<RoomGroup>
<Room>
<numberOfAdults>2</numberOfAdults>
<numberOfChildren>2</numberOfChildren> <childAges>8</childAges> <childAges>12</childAges>
</Room> <Room>
<numberOfAdults>2</numberOfAdults>
</Room>
</RoomGroup>
</HotelListRequest>
</v3:getList>
Solicitud de lista de REST
http://api.ean.com/ean-services/rs/hotel/v3/list?
apiKey=#####
&cid=#####
&customerIpAddress=#####
&customerUserAgent=######
&customerSessionId=#####
&minorRev=##
&locale=en_US
&currencyCode=USD
&_type=json
&destinationString=Milan, Italy
&arrivalDate=08/10/2014
&departureDate=08/12/2014
&room1=2,8,12
&room2=2


Respuesta de lista
Solicitud de lista de SOAP
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<ns2:getListResponse xmlns:ns2="http://v3.hotel.wsapi.ean.com/">
<HotelListResponse>
<customerSessionId>0ABAAACD-8CA1-3191-46D2-55EAD0C935EA</customerSessionId>
<numberOfRoomsRequested>2</numberOfRoomsRequested>
<moreResultsAvailable>true</moreResultsAvailable>
<cacheKey>768ca131:146d55ead0c:35f1</cacheKey>
<cacheLocation>10.186.170.205:7300</cacheLocation>
<cachedSupplierResponse supplierCacheTolerance="NOT_SUPPORTED" cachedTime="0" supplierRequestNum="476" supplierResponseNum="1" supplierResponseTime="108" candidatePreptime="82" otherOverheadTime="34" tpidUsed="5001" matchedCurrency="true" matchedLocale="true"/>
<HotelList size="1" activePropertyCount="532">
<HotelSummary order="0" ubsScore="70578488">
<hotelId>124869</hotelId>
<name>Novotel Milan Nord Ca Granda</name>
<address1>Viale Giovanni Suzzani 13</address1>
<city>Milan</city>
<postalCode>20162</postalCode>
<countryCode>IT</countryCode>
<airportCode>LIN</airportCode>
<supplierType>E</supplierType>
<propertyCategory>1</propertyCategory>
<hotelRating>4.0</hotelRating>
<confidenceRating>50</confidenceRating>
<amenityMask>33587339</amenityMask>
<locationDescription>In Milan (Niguarda)</locationDescription>
<shortDescription><![CDATA[&lt;p&gt;&lt;b&gt;Property Location&lt;/b&gt; &lt;br /&gt;With a stay at Novotel Milan Nord Ca Granda in Milan (Niguarda), you&apos;ll be close to Niguarda Ca Granda Hospital and Cathedral of Milan. This 4-star hotel is within]]></shortDescription>
<highRate>103.05</highRate>
<lowRate>103.05</lowRate>
<rateCurrencyCode>USD</rateCurrencyCode>
<latitude>45.5062</latitude>
<longitude>9.19759</longitude>
<proximityDistance>2.127312</proximityDistance>
<proximityUnit>MI</proximityUnit>
<hotelInDestination>true</hotelInDestination>
<thumbNailUrl>/hotels/1000000/20000/11500/11430/11430_86_t.jpg</thumbNailUrl>
<deepLink>{removed for brevity}</deepLink>
<RoomRateDetailsList>
<RoomRateDetails>
<roomTypeCode>185262</roomTypeCode>
<rateCode>200103261</rateCode>
<maxRoomOccupancy>4</maxRoomOccupancy>
<quotedRoomOccupancy>2</quotedRoomOccupancy>
<minGuestAge>0</minGuestAge>
<roomDescription>Superior Room, 1 King Bed with Sofabed</roomDescription>
<propertyAvailable>true</propertyAvailable>
<propertyRestricted>false</propertyRestricted>
<expediaPropertyId>11430</expediaPropertyId>
<RateInfos size="1">
<RateInfo priceBreakdown="true" promo="true" rateChange="false">
<RoomGroup>
<Room>
<numberOfAdults>2</numberOfAdults>
<numberOfChildren>2</numberOfChildren>
<childAges>8</childAges>
<childAges>12</childAges>
</Room>
<Room>
<numberOfAdults>2</numberOfAdults>
<numberOfChildren>0</numberOfChildren>
</Room>
</RoomGroup>
<ChargeableRateInfo averageBaseRate="103.05" averageRate="103.05" commissionableUsdTotal="412.2" currencyCode="USD" maxNightlyRate="103.05" nightlyRateTotal="412.2" surchargeTotal="22.68" total="434.88">
<NightlyRatesPerRoom size="2">
<NightlyRate baseRate="103.05" rate="103.05" promo="false"/>
<NightlyRate baseRate="103.05" rate="103.05" promo="false"/>
</NightlyRatesPerRoom>
<Surcharges size="1">
<Surcharge type="TaxAndServiceFee" amount="22.68"/>
</Surcharges>
</ChargeableRateInfo>
<nonRefundable>true</nonRefundable>
<HotelFees size="1">
<HotelFee description="MandatoryTax" amount="109.05"/>
</HotelFees>
<rateType>MerchantStandard</rateType>
<promoId>205982103</promoId>
<promoDescription>Sale! Save 30% on this Stay.</promoDescription>
<promoType>Standard</promoType>
<currentAllotment>0</currentAllotment>
</RateInfo>
</RateInfos>
<ValueAdds size="1">
<ValueAdd id="2048">
<description>Free Wireless Internet</description>
</ValueAdd>
</ValueAdds>
</RoomRateDetails>
</RoomRateDetailsList>
</HotelSummary>
</HotelList>
</HotelListResponse>
</ns2:getListResponse>
</soap:Body>
</soap:Envelope>
Solicitud de lista de JSON
    {
"HotelListResponse": {
"customerSessionId": "0ABAAA7C-15C0-2291-46D2-4F67C5B91386",
"numberOfRoomsRequested": 2,
"moreResultsAvailable": true,
"cacheKey": "5315c022:146d4f67c5b:138c",
"cacheLocation": "10.186.170.124:7300",
"cachedSupplierResponse": {
"@supplierCacheTolerance": "NOT_SUPPORTED",
"@cachedTime": "0",
"@supplierRequestNum": "476",
"@supplierResponseNum": "1",
"@supplierResponseTime": "109",
"@candidatePreptime": "14",
"@otherOverheadTime": "25",
"@tpidUsed": "5001",
"@matchedCurrency": "true",
"@matchedLocale": "true"
},
"HotelList": {
"@size": "1",
"@activePropertyCount": "532",
"HotelSummary": {
"@order": "0",
"@ubsScore": "70790284",
"hotelId": 124869,
"name": "Novotel Milan Nord Ca Granda",
"address1": "Viale Giovanni Suzzani 13",
"city": "Milan",
"postalCode": 20162,
"countryCode": "IT",
"airportCode": "LIN",
"supplierType": "E",
"propertyCategory": 1,
"hotelRating": 4,
"confidenceRating": 50,
"amenityMask": 33587339,
"locationDescription": "In Milan (Niguarda)",
"shortDescription": "&lt;p&gt;&lt;b&gt;Property Location&lt;/b&gt; &lt;br /&gt;With a stay at Novotel Milan Nord Ca Granda in Milan (Niguarda), you&apos;ll be close to Niguarda Ca Granda Hospital and Cathedral of Milan. This 4-star hotel is within",
"highRate": 102.86,
"lowRate": 102.86,
"rateCurrencyCode": "USD",
"latitude": 45.5062,
"longitude": 9.19759,
"proximityDistance": 2.127312,
"proximityUnit": "MI",
"hotelInDestination": true,
"thumbNailUrl": "/hotels/1000000/20000/11500/11430/11430_86_t.jpg",
"deepLink": {removed for brevity}
"RoomRateDetailsList": {
"RoomRateDetails": {
"roomTypeCode": 185262,
"rateCode": 200103261,
"maxRoomOccupancy": 4,
"quotedRoomOccupancy": 2,
"minGuestAge": 0,
"roomDescription": "Superior Room, 1 King Bed with Sofabed",
"propertyAvailable": true,
"propertyRestricted": false,
"expediaPropertyId": 11430,
"RateInfos": {
"@size": "1",
"RateInfo": {
"@priceBreakdown": "true",
"@promo": "true",
"@rateChange": "false",
"RoomGroup": {
"Room": [
{
"numberOfAdults": 2,
"numberOfChildren": 2,
"childAges": [
8,
12
]
},
{
"numberOfAdults": 2,
"numberOfChildren": 0
}
]
},
"ChargeableRateInfo": {
"@averageBaseRate": "102.86",
"@averageRate": "102.86",
"@commissionableUsdTotal": "411.44",
"@currencyCode": "USD",
"@maxNightlyRate": "102.86",
"@nightlyRateTotal": "411.44",
"@surchargeTotal": "22.64",
"@total": "434.08",
"NightlyRatesPerRoom": {
"@size": "2",
"NightlyRate": [
{
"@baseRate": "102.86",
"@rate": "102.86",
"@promo": "false"
},
{
"@baseRate": "102.86",
"@rate": "102.86",
"@promo": "false"
}
]
},
"Surcharges": {
"@size": "1",
"Surcharge": {
"@type": "TaxAndServiceFee",
"@amount": "22.64"
}
}
},
"nonRefundable": true,
"HotelFees": {
"@size": "1",
"HotelFee": {
"@description": "MandatoryTax",
"@amount": "108.84"
}
},
"rateType": "MerchantStandard",
"promoId": 205982103,
"promoDescription": "Sale! Save 30% on this Stay.",
"promoType": "Standard",
"currentAllotment": 0
}
},
"ValueAdds": {
"@size": "1",
"ValueAdd": {
"@id": "2048",
"description": "Free Wireless Internet"
}
}
}
}
}
}
}
}


Disponibilidad de habitaciones

Para la solicitud de disponibilidad, integre todos los elementos comunes obligatorios y el formato de grupo de habitaciones específico de REST como detallado anteriormente para obtener la solicitud de lista de hoteles. No existen actualizaciones exclusivas para la solicitud de disponibilidad.

Solicitud de disponibilidad de SOAP
<v3:getAvailability>
<HotelRoomAvailabilityRequest> <apiKey>#####</apiKey>
<cid>######</cid>
<customerIpAddress>##########</customerIpAddress> <customerUserAgent>##########</customerUserAgent> <customerSessionId>##########</customerSessionId>
<minorRev>##</minorRev> <locale>en_US</locale> <currencyCode>USD</currencyCode>
<hotelId>124869</hotelId>
<arrivalDate>08/10/2014</arrivalDate>
<departureDate>08/12/2014</departureDate>
<RoomGroup>
<Room>
<numberOfAdults>2</numberOfAdults>
<numberOfChildren>2</numberOfChildren> <childAges>8</childAges> <childAges>12</childAges>
</Room> <Room>
<numberOfAdults>2</numberOfAdults>
</Room>
</RoomGroup> <includeDetails>true</includeDetails>
</HotelRoomAvailabilityRequest>
</v3:getAvailability>
Solicitud de disponibilidad de REST
http://api.ean.com/ean-services/rs/hotel/v3/avail?
apiKey=#####
&cid=#####
&customerIpAddress=#####
&customerUserAgent=######
&customerSessionId=#####
&minorRev=##
&locale=en_US
&currencyCode=USD
&_type=json
&hotelId=124869
&arrivalDate=08/10/2014
&departureDate=08/12/2014
&includeDetails=true
&room1=2,8,12
&room2=2
    
Respuesta de disponibilidad

Asegúrese de que obtiene un solo valor o la selección del cliente, según corresponda, a partir de los elementos de respuesta resaltados de color naranja. Estos valores deberán transmitirse en los elementos obligatorios correspondientes de la solicitud de reserva.

Por razones de brevedad, únicamente se muestra la primera habitación de la ocupación solicitada. Tenga en cuenta que solo se devuelve HotelFeeBreakdown para el ejemplo de REST; el parámetro obligatorio includeHotelFeeBreakdown toma el valor predeterminado de true si se omite en REST.

Respuesta de disponibilidad de SOAP
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<ns2:getAvailabilityResponse xmlns:ns2="http://v3.hotel.wsapi.ean.com/">
<HotelRoomAvailabilityResponse size="8">
<customerSessionId>0ABAAA40-F6D7-B914-7452-5318ED902AB5</customerSessionId>
<hotelId>124869</hotelId>
<arrivalDate>08/10/2014</arrivalDate>
<departureDate>08/12/2014</departureDate>
<hotelName>Novotel Milan Nord Ca Granda</hotelName>
<hotelAddress>Viale Giovanni Suzzani 13</hotelAddress>
<hotelCity>Milan</hotelCity>
<hotelCountry>IT</hotelCountry>
<numberOfRoomsRequested>2</numberOfRoomsRequested>
<checkInInstructions>{removed for brevity}</checkInInstructions>
<HotelRoomResponse>
<rateCode>201985271</rateCode>
<roomTypeCode>185262</roomTypeCode>
<rateDescription>Superior Room, 1 King Bed with Sofabed</rateDescription>
<roomTypeDescription>Superior Room, 1 King Bed with Sofabed</roomTypeDescription>
<supplierType>E</supplierType>
<propertyId>11430</propertyId>
<BedTypes size="1">
<BedType id="67">
<description>1 king and 1 sofa bed</description>
</BedType>
</BedTypes>
<smokingPreferences>S,NS</smokingPreferences>
<rateOccupancyPerRoom>4</rateOccupancyPerRoom>
<quotedOccupancy>2</quotedOccupancy>
<minGuestAge>0</minGuestAge>
<RateInfos size="1">
<RateInfo priceBreakdown="true" promo="false" rateChange="true">
<RoomGroup>
<Room>
<numberOfAdults>2</numberOfAdults>
<numberOfChildren>2</numberOfChildren>
<childAges>8</childAges>
<childAges>12</childAges>
<rateKey>0b07a27f-74dc-4a70-b4ac-c67766eb1342</rateKey>
</Room>
<Room>
<numberOfAdults>2</numberOfAdults>
<numberOfChildren>0</numberOfChildren>
<rateKey>0b07a27f-74dc-4a70-b4ac-c67766eb1342</rateKey>
</Room>
</RoomGroup>
<ChargeableRateInfo averageBaseRate="108.905" averageRate="108.905" commissionableUsdTotal="435.62" currencyCode="USD" maxNightlyRate="115.71" nightlyRateTotal="435.62" surchargeTotal="23.96" total="459.58">
<NightlyRatesPerRoom size="2">
<NightlyRate baseRate="114.97" rate="114.97" promo="false"/>
<NightlyRate baseRate="128.5" rate="128.5" promo="false"/>
</NightlyRatesPerRoom>
<Surcharges size="1">
<Surcharge type="TaxAndServiceFee" amount="23.96"/>
</Surcharges>
</ChargeableRateInfo>
<cancellationPolicy>This rate is non-refundable and cannot be changed or cancelled - if you do choose to change or cancel this booking you will not be refunded any of the payment.</cancellationPolicy>
<CancelPolicyInfoList>
<CancelPolicyInfo>
<versionId>206382052</versionId>
<cancelTime>18:00:00</cancelTime>
<startWindowHours>0</startWindowHours>
<nightCount>0</nightCount>
<percent>100</percent>
<currencyCode>USD</currencyCode>
<timeZoneDescription>(GMT+01:00) Brussels, Copenhagen, Madrid, Paris</timeZoneDescription>
</CancelPolicyInfo>
<CancelPolicyInfo>
<versionId>206382051</versionId>
<cancelTime>18:00:00</cancelTime>
<startWindowHours>999</startWindowHours>
<nightCount>0</nightCount>
<percent>100</percent>
<currencyCode>USD</currencyCode>
<timeZoneDescription>(GMT+01:00) Brussels, Copenhagen, Madrid, Paris</timeZoneDescription>
</CancelPolicyInfo>
</CancelPolicyInfoList>
<nonRefundable>true</nonRefundable>
<HotelFees size="1">
<HotelFee description="MandatoryTax" amount="81.16"/>
</HotelFees>
<rateType>MerchantStandard</rateType>
<currentAllotment>0</currentAllotment>
<guaranteeRequired>false</guaranteeRequired>
<depositRequired>true</depositRequired>
<taxRate>26.78</taxRate>
</RateInfo>
</RateInfos>
<ValueAdds size="1">
<ValueAdd id="16777216">
<description>Breakfast Buffet</description>
</ValueAdd>
</ValueAdds>
<deepLink>{removed for brevity}</deepLink>
</HotelRoomResponse>

{other room options removed for brevity}
</HotelRoomAvailabilityResponse>
</ns2:getAvailabilityResponse>
</soap:Body>
</soap:Envelope>
Respuesta de disponibilidad de JSON
{
"HotelRoomAvailabilityResponse": {
"@size": "8",
"customerSessionId": "0ABAAA8A-00AA-9091-4712-CE0FE89929BF",
"hotelId": 124869,
"arrivalDate": "08\/10\/2014",
"departureDate": "08\/12\/2014",
"hotelName": "Novotel Milan Nord Ca Granda",
"hotelAddress": "Viale Giovanni Suzzani 13",
"hotelCity": "Milan",
"hotelCountry": "IT",
"numberOfRoomsRequested": 2,
"checkInInstructions": {removed for brevity}
"HotelRoomResponse": [
{
"rateCode": 201985271,
"roomTypeCode": 185262,
"rateDescription": "Superior Room, 1 King Bed with Sofabed",
"roomTypeDescription": "Superior Room, 1 King Bed with Sofabed",
"supplierType": "E",
"propertyId": 11430,
"BedTypes": {
"@size": "1",
"BedType": {
"@id": "67",
"description": "1 king and 1 sofa bed"
}
},
"smokingPreferences": "S,NS",
"rateOccupancyPerRoom": 4,
"quotedOccupancy": 2,
"minGuestAge": 0,
"RateInfos": {
"@size": "1",
"RateInfo": {
"@priceBreakdown": "true",
"@promo": "false",
"@rateChange": "true",
"RoomGroup": {
"Room": [
{
"numberOfAdults": 2,
"numberOfChildren": 2,
"childAges": [
8,
12
],
"rateKey": "9d451f73-4a54-48e9-bf18-f8a54e205af1"
},
{
"numberOfAdults": 2,
"numberOfChildren": 0,
"rateKey": "9d451f73-4a54-48e9-bf18-f8a54e205af1"
}
]
},
"ChargeableRateInfo": {
"@averageBaseRate": "108.905",
"@averageRate": "108.905",
"@commissionableUsdTotal": "435.62",
"@currencyCode": "USD",
"@maxNightlyRate": "115.71",
"@nightlyRateTotal": "435.62",
"@surchargeTotal": "23.96",
"@total": "459.58",
"NightlyRatesPerRoom": {
"@size": "2",
"NightlyRate": [
{
"@baseRate": "102.1",
"@rate": "102.1",
"@promo": "false"
},
{
"@baseRate": "115.71",
"@rate": "115.71",
"@promo": "false"
}
]
},
"Surcharges": {
"@size": "1",
"Surcharge": {
"@type": "TaxAndServiceFee",
"@amount": "23.96"
}
}
},
"cancellationPolicy": "This rate is non-refundable and cannot be changed or cancelled - if you do choose to change or cancel this booking you will not be refunded any of the payment.",
"CancelPolicyInfoList": {
"CancelPolicyInfo": [
{
"versionId": 206382052,
"cancelTime": "18:00:00",
"startWindowHours": 0,
"nightCount": 0,
"percent": 100,
"currencyCode": "USD",
"timeZoneDescription": "(GMT+01:00) Brussels, Copenhagen, Madrid, Paris"
},
{
"versionId": 206382051,
"cancelTime": "18:00:00",
"startWindowHours": 999,
"nightCount": 0,
"percent": 100,
"currencyCode": "USD",
"timeZoneDescription": "(GMT+01:00) Brussels, Copenhagen, Madrid, Paris"
}
]
},
"nonRefundable": true,
"HotelFees": {
"@size": "1",
"HotelFee": {
"@description": "MandatoryTax",
"@amount": "81.68",
"HotelFeeBreakdown": {
"@unit": "Per person",
"@frequency": "Per night"
}
}
},
"rateType": "MerchantStandard",
"currentAllotment": 0,
"guaranteeRequired": false,
"depositRequired": true,
"taxRate": 23.96
}
},
"ValueAdds": {
"@size": "1",
"ValueAdd": {
"@id": "16777216",
"description": "Breakfast Buffet"
}
},
"deepLink": {removed for brevity}
},
{other room options removed for brevity}
]
}
}


Reserva

Compruebe la integración mediante los puntos indicados más abajo antes de tratar de realizar la primera prueba de reserva; son las fuentes de error más comunes para colaboradores que actualizan a REST desde SOAP.

  • Los elementos resaltados de color naranja en el ejemplo que se indica más abajo son obligatorios y deben contener valores adecuados de la respuesta de disponibilidad de habitaciones:
    • Utilice la selección del cliente de preferencias para fumadores u omita ese elemento si no se ha proporcionado en la respuesta de habitación.
    • El valor BedTypeId de cada habitación debe emplear un atributo de @id de BedType a partir de la respuesta de habitación.
    • Los valores roomTypeCode, chargeableRate @total, y rateCode que correspondan a la selección de habitación del cliente deberán transferirse desde la respuesta de habitación.
    • Siempre se emplea el valor rateKey de la respuesta de habitación, independientemente de la selección individual de la habitación.
  • Revise toda la documentación de solicitud de reserva y compruebe que todos los elementos obligatorios están presentes y poseen el formato adecuado.
    • Asegúrese de que los valores de entrada del cliente se validan de forma adecuada en cuanto a los formatos requeridos. Por ejemplo, stateProvinceCode y countryCode solo aceptan códigos de dos caracteres; los nombres completos o cualquier otro formato del valor provocará un error en la reserva.
Solicitud de reserva de SOAP
<v3:getReservation>
<HotelRoomReservationRequest>
<apiKey>#####</apiKey>
<cid>######</cid>
<customerIpAddress>##########</customerIpAddress> <customerUserAgent>##########</customerUserAgent> <customerSessionId>##########</customerSessionId>
<minorRev>##</minorRev> <locale>en_US</locale> <currencyCode>USD</currencyCode>
<hotelId>124869</hotelId>
<arrivalDate>08/10/2014</arrivalDate>
<departureDate>08/12/2014</departureDate>
<supplierType>E</supplierType>
<rateKey>e5b389fc-486b-404a-a819-259ab955eb8b</rateKey>
<roomTypeCode>185262</roomTypeCode>
<rateCode>446847</rateCode>
<chargeableRate>518.11</chargeableRate>
<RoomGroup>
<Room>
<firstName>test</firstName>
<lastName>tester</lastName>
<numberOfAdults>2</numberOfAdults>
<numberOfChildren>2</numberOfChildren>
<childAges>8</childAges>
<childAges>12</childAges> <bedTypeId>67</bedTypeId>
<smokingPreference>NS</smokingPreference>
</Room> <Room> <firstName>test</firstName>
<lastName>tester</lastName>
<numberOfAdults>2</numberOfAdults> <bedTypeId>67</bedTypeId>
<smokingPreference>NS</smokingPreference>
</Room>
</RoomGroup>
<ReservationInfo>
<email>test@yourdomain.com</email>
<firstName>test</firstName>
<lastName>tester</lastName>
<homePhone>##########</homePhone>
<workPhone>##########</workPhone>
<creditCardType>##</creditCardType>
<creditCardNumber>#################</creditCardNumber>
<creditCardIdentifier>123</creditCardIdentifier>
<creditCardExpirationMonth>11</creditCardExpirationMonth>
<creditCardExpirationYear>2016</creditCardExpirationYear>
</ReservationInfo>
<AddressInfo>
<address1>travelnow</address1>
<city>Seattle</city>
<stateProvinceCode>WA</stateProvinceCode>
<countryCode>US</countryCode>
<postalCode>98004</postalCode>
</AddressInfo>
</HotelRoomReservationRequest> </v3:getReservation>
Solicitud de reserva de REST
https://book.api.ean.com/ean-services/rs/hotel/v3/res?
apiKey=#####
&cid=#####
&customerIpAddress=#####
&customerUserAgent=######
&customerSessionId=#####
&minorRev=##
&locale=en_US
&currencyCode=USD
&_type=json
&hotelId=124869
&arrivalDate=08/10/2014
&departureDate=08/12/2014
&supplierType=E
&rateKey=e5b389fc-486b-404a-a819-259ab955eb8b
&roomTypeCode=185262
&rateCode=446847
&chargeableRate=518.11
&room1=2,8,12
&room1FirstName=test
&room1LastName=tester
&room1BedTypeId=67
&room1SmokingPreference=NS
&room2=1
&room2FirstName=test
&room2LastName=tester
&room2BedTypeId=67
&room2SmokingPreference=NS
&email=test@yourdomain.com
&firstName=tester
&lastName=testing
&homePhone=##########
&workPhone=##########
&creditCardType=CA
&creditCardNumber=#################
&creditCardIdentifier=123
&creditCardExpirationMonth=11
&creditCardExpirationYear=2016
&address1=travelnow
&city=Seattle
&stateProvinceCode=WA
&countryCode=US
&postalCode=98004 
    


Respuesta de reserva

Respuesta de reserva de SOAP
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<ns2:getReservationResponse xmlns:ns2="http://v3.hotel.wsapi.ean.com/">
<HotelRoomReservationResponse>
<customerSessionId>0ABAAA7D-2A56-5914-7452-7D1C8B902456</customerSessionId>
<itineraryId>####</itineraryId>
<confirmationNumbers>1234</confirmationNumbers>
<confirmationNumbers>1235</confirmationNumbers>
<processedWithConfirmation>true</processedWithConfirmation>
<supplierType>E</supplierType>
<reservationStatusCode>CF</reservationStatusCode>
<existingItinerary>false</existingItinerary>
<numberOfRoomsBooked>2</numberOfRoomsBooked>
<drivingDirections/>
<checkInInstructions/>
<arrivalDate>08/10/2014</arrivalDate>
<departureDate>08/12/2014</departureDate>
<hotelName>Novotel Milan Nord Ca Granda</hotelName>
<hotelAddress>Viale Giovanni Suzzani 13</hotelAddress>
<hotelCity>Milan</hotelCity>
<hotelPostalCode>20162</hotelPostalCode>
<hotelCountryCode>IT</hotelCountryCode>
<roomDescription>Superior Room, 1 King Bed with Sofabed</roomDescription>
<rateOccupancyPerRoom>3</rateOccupancyPerRoom>
<RateInfos size="1">
<RateInfo priceBreakdown="true" promo="false" rateChange="true">
<RoomGroup>
<Room>
<numberOfAdults>2</numberOfAdults>
<numberOfChildren>2</numberOfChildren>
<childAges>8</childAges>
<childAges>12</childAges>
<firstName>test</firstName>
<lastName>tester</lastName>
<bedTypeId>67</bedTypeId>
<bedTypeDescription>1 king and 1 sofa bed</bedTypeDescription>
<smokingPreference>NS</smokingPreference>
</Room>
<Room>
<numberOfAdults>2</numberOfAdults>
<numberOfChildren>0</numberOfChildren>
<firstName>test</firstName>
<lastName>tester</lastName>
<bedTypeId>67</bedTypeId>
<bedTypeDescription>1 king and 1 sofa bed</bedTypeDescription>
<smokingPreference>NS</smokingPreference>
</Room>
</RoomGroup>
<ChargeableRateInfo averageBaseRate="122.77" averageRate="122.77" commissionableUsdTotal="491.08" currencyCode="USD" maxNightlyRate="129.59" nightlyRateTotal="491.08" surchargeTotal="27.02" total="518.1">
<NightlyRatesPerRoom size="2">
<NightlyRate baseRate="115.95" rate="115.95" promo="false"/>
<NightlyRate baseRate="129.59" rate="129.59" promo="false"/>
</NightlyRatesPerRoom>
<Surcharges size="1">
<Surcharge type="TaxAndServiceFee" amount="27.02"/>
</Surcharges>
</ChargeableRateInfo>
<cancellationPolicy>We understand that sometimes your travel plans change. We do not charge a change or cancel fee. However, this property (Novotel Milan Nord Ca Granda) imposes the following penalty to its customers that we are required to pass on: Cancellations or changes made after 5:00 PM ((GMT+01:00) Brussels, Copenhagen, Madrid, Paris) on Aug 10, 2014 are subject to a 1 Night Room &amp; Tax penalty. The property makes no refunds for no shows or early checkouts.</cancellationPolicy> <CancelPolicyInfoList>
<CancelPolicyInfo>
<versionId>209134416</versionId>
<cancelTime>18:00:00</cancelTime>
<startWindowHours>0</startWindowHours>
<nightCount>1</nightCount>
<currencyCode>USD</currencyCode>
<timeZoneDescription>(GMT+01:00) Brussels, Copenhagen, Madrid, Paris</timeZoneDescription>
</CancelPolicyInfo>
<CancelPolicyInfo>
<versionId>209134415</versionId>
<cancelTime>18:00:00</cancelTime>
<startWindowHours>1</startWindowHours>
<nightCount>0</nightCount>
<currencyCode>USD</currencyCode>
<timeZoneDescription>(GMT+01:00) Brussels, Copenhagen, Madrid, Paris</timeZoneDescription>
</CancelPolicyInfo>
</CancelPolicyInfoList>
<nonRefundable>false</nonRefundable>
<HotelFees size="1">
<HotelFee description="MandatoryTax" amount="81.16">
<HotelFeeBreakdown unit="Per person" frequency="Per night"/>
</HotelFee>
</HotelFees>
<rateType>MerchantStandard</rateType>
</RateInfo>
</RateInfos>
</HotelRoomReservationResponse>
</ns2:getReservationResponse>
</soap:Body>
</soap:Envelope>
Respuesta de reserva de JSON
{
"HotelRoomReservationResponse": {
"customerSessionId": "0ABAAACE-8D64-3191-4722-1D3859B948E8",
"itineraryId": ####,
"confirmationNumbers": [
1234,
1235
],
"processedWithConfirmation": true,
"supplierType": "E",
"reservationStatusCode": "CF",
"existingItinerary": false,
"numberOfRoomsBooked": 2,
"drivingDirections": "",
"checkInInstructions": "",
"arrivalDate": "08\/10\/2014",
"departureDate": "08\/12\/2014",
"hotelName": "Novotel Milan Nord Ca Granda",
"hotelAddress": "Viale Giovanni Suzzani 13",
"hotelCity": "Milan",
"hotelPostalCode": 20162,
"hotelCountryCode": "IT",
"roomDescription": "Superior Room, 1 King Bed with Sofabed",
"rateOccupancyPerRoom": 3,
"RateInfos": {
"@size": "1",
"RateInfo": {
"@priceBreakdown": "true",
"@promo": "false",
"@rateChange": "true",
"RoomGroup": {
"Room": [
{
"numberOfAdults": 2,
"numberOfChildren": 2,
"childAges": [
8,
12
],
"firstName": "test",
"lastName": "tester",
"bedTypeId": 67,
"bedTypeDescription": "1 king and 1 sofa bed",
"smokingPreference": "NS"
},
{
"numberOfAdults": 1,
"numberOfChildren": 0,
"firstName": "test",
"lastName": "tester",
"bedTypeId": 67,
"bedTypeDescription": "1 king and 1 sofa bed",
"smokingPreference": "NS"
}
]
},
"ChargeableRateInfo": {
"@averageBaseRate": "122.77",
"@averageRate": "122.77",
"@commissionableUsdTotal": "491.08",
"@currencyCode": "USD",
"@maxNightlyRate": "129.59",
"@nightlyRateTotal": "491.08",
"@surchargeTotal": "27.02",
"@total": "518.1",
"NightlyRatesPerRoom": {
"@size": "2",
"NightlyRate": [
{
"@baseRate": "115.95",
"@rate": "115.95",
"@promo": "false"
},
{
"@baseRate": "129.59",
"@rate": "129.59",
"@promo": "false"
}
]
},
"Surcharges": {
"@size": "1",
"Surcharge": {
"@type": "TaxAndServiceFee",
"@amount": "27.02"
}
}
},
"cancellationPolicy": "We understand that sometimes your travel plans change. We do not charge a change or cancel fee. However, this property (Novotel Milan Nord Ca Granda) imposes the following penalty to its customers that we are required to pass on: Cancellations or changes made after 5:00 PM ((GMT+01:00) Brussels, Copenhagen, Madrid, Paris) on Aug 10, 2014 are subject to a 1 Night Room & Tax penalty. The property makes no refunds for no shows or early checkouts.",
"CancelPolicyInfoList": {
"CancelPolicyInfo": [
{
"versionId": 209134416,
"cancelTime": "18:00:00",
"startWindowHours": 0,
"nightCount": 1,
"currencyCode": "USD",
"timeZoneDescription": "(GMT+01:00) Brussels, Copenhagen, Madrid, Paris"
},
{
"versionId": 209134415,
"cancelTime": "18:00:00",
"startWindowHours": 1,
"nightCount": 0,
"currencyCode": "USD",
"timeZoneDescription": "(GMT+01:00) Brussels, Copenhagen, Madrid, Paris"
}
]
},
"nonRefundable": false,
"HotelFees": {
"@size": "1",
"HotelFee": {
"@description": "MandatoryTax",
"@amount": "68.20",
"HotelFeeBreakdown": {
"@unit": "Per person",
"@frequency": "Per night"
}
}
},
"rateType": "MerchantStandard"
}
}
}
}


Solicitud de itinerario

La solicitud de itinerario solo es distinta cuando se especifica un intervalo de fechas. En REST, basta con omitir el elemento <ItineraryQuery> y proporcionar directamente los parámetros de fecha de salida o creación. No existen actualizaciones exclusivas para las recuperaciones de itinerarios individuales.

Solicitud de itinerario de SOAP - Itinerario individual
<v3:getItinerary>
<HotelItineraryRequest>
<apiKey>#####</apiKey>
<cid>#####</cid>
<customerIpAddress>xxx</customerIpAddress>
<customerSessionId>xxx</customerSessionId>
<customerUserAgent>xxx</customerUserAgent> <minorRev>##</minorRev>
<locale>en_US</locale>
<currencyCode>USD</currencyCode> <itineraryId>##########</itineraryId>
<email>test@travelnow.com</email>
</HotelItineraryRequest>
</v3:getItinerary>
Solicitud de itinerario de REST - Itinerario individual
http://api.ean.com/ean-services/rs/hotel/v3/itin?
apiKey=#####
&cid=#####
&customerIpAddress=#####
&customerUserAgent=######
&customerSessionId=#####
&minorRev=##
&locale=en_US
&currencyCode=USD
&_type=json
&itineraryId=#########
&email=test@travelnow.com
    

Solicitud de itinerario de SOAP - Intervalo de fechas
<v3:getItinerary>
<HotelItineraryRequest>
<apiKey>#####</apiKey>
<cid>#####</cid>
<customerIpAddress>xxx</customerIpAddress>
<customerSessionId>xxx</customerSessionId>
<customerUserAgent>xxx</customerUserAgent> <minorRev>##</minorRev>
<locale>en_US</locale>
<currencyCode>USD</currencyCode> <ItineraryQuery> <creationDateStart>09/1/2014</creationDateStart> <creationDateEnd>09/8/2014</creationDateEnd> </ItineraryQuery>
</HotelItineraryRequest>
</v3:getItinerary>
Solicitud de itinerario de REST - Intervalo de fechas
http://api.ean.com/ean-services/rs/hotel/v3/itin?
apiKey=#####
&cid=#####
&customerIpAddress=#####
&customerUserAgent=######
&customerSessionId=#####
&minorRev=##
&locale=en_US
&currencyCode=USD
&_type=json
&creationDateStart=09/01/2014
&creationDateEnd=09/08/2014
    
Respuesta de itinerario

Todas las respuestas de itinerario de SOAP colocan los itinerarios dentro de su propio objeto Itinerary.

En REST, únicamente para las respuestas de intervalo de fecha de salida o creación, los itinerarios se ordenan numéricamente en un único objeto Itinerary, donde el primer itinerario comienza por 0. Las solicitudes de itinerarios individuales siguen devolviendo datos en un único objeto Itinerary. Por motivos de brevedad, a continuación solo se muestran ejemplos de respuestas de intervalos de fechas.

Respuesta de itinerario de SOAP - Intervalo de fechas
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<ns2:getItineraryResponse xmlns:ns2="http://v3.hotel.wsapi.ean.com/">
<HotelItineraryResponse size="17">
<customerSessionId>xxx</customerSessionId>
<Itinerary>
<itineraryId>##########</itineraryId>
<affiliateId>######</affiliateId>
<creationDate>09/03/2014</creationDate>
<creationTime>15:13:11 CDT</creationTime>
<itineraryStartDate>10/03/2014</itineraryStartDate>
<itineraryEndDate>10/05/2014</itineraryEndDate>
<Customer>
<email>test@travelnow.com</email>
<firstName>test</firstName>
<lastName>tester</lastName>
<homePhone>#########</homePhone>
<workPhone>#########</workPhone>
<CustomerAddresses>
<address1>travelnow</address1>
<city>Seattle</city>
<stateProvinceCode>WA</stateProvinceCode>
<countryCode>US</countryCode>
<postalCode>98004</postalCode>
<isPrimary>true</isPrimary>
<type>1</type>
</CustomerAddresses>
</Customer>
<HotelConfirmation>
<supplierId>13</supplierId>
<chainCode>EP</chainCode>
<arrivalDate>10/03/2014</arrivalDate>
<departureDate>10/05/2014</departureDate>
<confirmationNumber>1234</confirmationNumber>
<RateInfos size="1">
<RateInfo priceBreakdown="true" promo="false" rateChange="false">
<ChargeableRateInfo averageBaseRate="8941.0" averageRate="8941.0" commissionableUsdTotal="170.14" currencyCode="JPY" maxNightlyRate="8941.0" nightlyRateTotal="17882.0" total="17882.0">
<NightlyRatesPerRoom size="2">
<NightlyRate baseRate="8941.0" rate="8941.0" promo="false"/>
<NightlyRate baseRate="8941.0" rate="8941.0" promo="false"/>
</NightlyRatesPerRoom>
</ChargeableRateInfo>
<cancellationPolicy>Ce montant ne peut être ni remboursé, ni modifié, ni annulé. Si vous décidez tout de même de modifier ou annuler cette réservation, vos paiements ne vous seront pas remboursés.</cancellationPolicy>
<nonRefundable>true</nonRefundable>
<online>true</online>
<HotelFees size="1">
<HotelFee description="MandatoryTax" amount="1919"/>
</HotelFees>
<rateType>MerchantStandard</rateType>
</RateInfo>
</RateInfos>
<numberOfAdults>2</numberOfAdults>
<numberOfChildren>0</numberOfChildren>
<smokingPreference>N</smokingPreference>
<supplierPropertyId>525133</supplierPropertyId>
<roomTypeCode>176765</roomTypeCode>
<rateCode>1086015</rateCode>
<rateDescription>Réservez tôt et économisez 14%</rateDescription>
<roomDescription>Chambre Double Standard</roomDescription>
<status>DT</status>
<locale>fr_FR</locale>
<ReservationGuest>
<firstName>test</firstName>
<lastName>tester</lastName>
</ReservationGuest>
<Hotel>
<hotelId>113856</hotelId>
<statusCode>A</statusCode>
<name>Hotel BLOOM</name>
<address1>Rue Royale 250</address1>
<city>Brussels</city>
<countryCode>BE</countryCode>
<postalCode>1210</postalCode>
<phone>32-22-206611</phone>
<fax>32-22-178444</fax>
<latitude>50.8552</latitude>
<longitude>4.36673</longitude>
<coordinateAccuracyCode>1</coordinateAccuracyCode>
<lowRate>154.7501</lowRate>
<highRate>297.7253</highRate>
<confidence>88</confidence>
<hotelRating>4.0</hotelRating>
<tripAdvisorRating>4.0</tripAdvisorRating>
<market>Brussels, Belgium</market>
<region>Benelux</region>
<superRegion>EMEA</superRegion>
<theme>Business Hotel</theme>
</Hotel>
<nights>2</nights>
</HotelConfirmation>
</Itinerary>
<Itinerary>
<itineraryId>169502105</itineraryId>
<affiliateId>451667</affiliateId> {truncated for brevity}
Respuesta de itinerario de JSON - Intervalo de fechas
{
@size: "17",
customerSessionId: "0ABAAA35-7CC0-4914-85B2-C2517490798A",
Itinerary: { 1: {
itineraryId: 169435416,
affiliateId: 451667,
creationDate: "09/03/2014",
creationTime: "15:13:11 CDT",
itineraryStartDate: "10/03/2014",
itineraryEndDate: "10/05/2014",
Customer: {
email: "test@travelnow.com",
firstName: "test",
lastName: "tester",
homePhone: 2145370159,
workPhone: 2145370159,
CustomerAddresses: {
address1: "travelnow",
city: "Seattle",
stateProvinceCode: "WA",
countryCode: "US",
postalCode: 98004,
isPrimary: true,
type: 1
}
},
HotelConfirmation: {
supplierId: 13,
chainCode: "EP",
arrivalDate: "10/03/2014",
departureDate: "10/05/2014",
confirmationNumber: 1234,
RateInfos: {
@size: "1",
RateInfo: {
@priceBreakdown: "true",
@promo: "false",
@rateChange: "false",
ChargeableRateInfo: {
@averageBaseRate: "8941.0",
@averageRate: "8941.0",
@commissionableUsdTotal: "170.14",
@currencyCode: "JPY",
@maxNightlyRate: "8941.0",
@nightlyRateTotal: "17882.0",
@total: "17882.0",
NightlyRatesPerRoom: {
@size: "2",
NightlyRate: {
0: {
@baseRate: "8941.0",
@rate: "8941.0",
@promo: "false"
},
1: {
@baseRate: "8941.0",
@rate: "8941.0",
@promo: "false"
}
}
}
},
cancellationPolicy: "Ce montant ne peut être ni remboursé, ni modifié, ni annulé. Si vous décidez tout de même de modifier ou annuler cette réservation, vos paiements ne vous seront pas remboursés.",
nonRefundable: true,
online: true,
HotelFees: {
@size: "1",
HotelFee: {
@description: "MandatoryTax",
@amount: "1919"
}
},
rateType: "MerchantStandard"
}
},
numberOfAdults: 2,
numberOfChildren: 0,
smokingPreference: "N",
supplierPropertyId: 525133,
roomTypeCode: 176765,
rateCode: 1086015,
rateDescription: "Réservez tôt et économisez 14%",
roomDescription: "Chambre Double Standard",
status: "DT",
locale: "fr_FR",
ReservationGuest: {
firstName: "test",
lastName: "tester"
},
Hotel: {
hotelId: 113856,
statusCode: "A",
name: "Hotel BLOOM",
address1: "Rue Royale 250",
city: "Brussels",
countryCode: "BE",
postalCode: 1210,
phone: "32-22-206611",
fax: "32-22-178444",
latitude: 50.8552,
longitude: 4.36673,
coordinateAccuracyCode: 1,
lowRate: 154.7501,
highRate: 297.7253,
confidence: 88,
hotelRating: 4,
tripAdvisorRating: 4,
market: "Brussels, Belgium",
region: "Benelux",
superRegion: "EMEA",
theme: "Business Hotel"
},
nights: 2
}
},
2: {
itineraryId: 169502105,
affiliateId: 451667,
creationDate: "09/04/2014",
creationTime: "03:05:07 CDT", {truncated for brevity}



Solicitud de cancelación

No existen actualizaciones exclusivas para la respuesta o solicitud de cancelación. Se muestran ejemplos para poder realizar una comparación.

Solicitud de cancelación de SOAP
<v3:getCancellation>
<HotelRoomCancellationRequest>
<apiKey>#####</apiKey>
<cid>#####</cid>
<customerIpAddress>xxx</customerIpAddress>
<customerSessionId>xxx</customerSessionId>
<customerUserAgent>xxx</customerUserAgent> <minorRev>##</minorRev>
<locale>en_US</locale>
<currencyCode>USD</currencyCode> <itineraryId>170009837</itineraryId>
<email>test@travelnow.com</email> <reason>COP</reason> <confirmationNumber>xxxxxxx</confirmationNumber>
</HotelRoomCancellationRequest>
</v3:getCancellation>
Solicitud de cancelación de REST
http://api.ean.com/ean-services/rs/hotel/v3/itin?
apiKey=#####
&cid=#####
&customerIpAddress=#####
&customerUserAgent=######
&customerSessionId=#####
&minorRev=##
&locale=en_US
&currencyCode=USD
&itineraryId=xxxxxxx
&email=email@domain.com
&reason=COP
&confirmationNumber=xxxxxxxx 
Respuesta de cancelación
Respuesta de cancelación de SOAP
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
   <soap:Body>
      <ns1:getCancellationResponse xmlns:ns1="http://v3.hotel.wsapi.ean.com/">
         <HotelRoomCancellationResponse>
            <customerSessionId>XXXX</customerSessionId>
            <cancellationNumber>XXXXX</cancellationNumber>
         </HotelRoomCancellationResponse>
      </ns1:getCancellationResponse>
Respuesta de cancelación de JSON
{
   "HotelRoomCancellationResponse":{
      "customerSessionId":"XXXX",
      "cancellationNumber":"XXXXX"
   }
}