Сейчас я использую универсальный API Travelport в пробном режиме. Моя цель - разработать веб-портал для обработки требований B2B клиента. Все хорошо, пока я не перешел ко второму последнему шагу, т.е. создав резервирование (бронирование). Я попытался заполнить объект запроса всеми необходимыми параметрами и данными, следуя XML-примеру XML-запроса: Пример XML-запроса
Ниже приведен код запроса, который я написал, чтобы включить данные, как описано в примере XML-запроса.
var biPoint3 = new BillingPointOfSaleInfo { OriginApplication = Crediantels.oritionApplication };
var delevieryInfo = new DeliveryInfo
{
Email = new Email { EmailID = "[email protected]", Type = "Home" },
PhoneNumber = new PhoneNumber
{
CountryCode = "069",
AreaCode = "49",
Number = "261111111",
Type = PhoneNumberType.Mobile,
Location = "FRA"
},
ShippingAddress = new DeliveryInfoShippingAddress
{
City = "Como",
Country = "IT",
PostalCode = "22100",
Street = new[] { "Some Street" }
},
};
var travelerDetails = new BookingTraveler
{
Key = "0",
DOB = new DateTime(1976, 11, 18),
Gender = "M",
TravelerType = "ADT",
BookingTravelerName = new BookingTravelerName
{
First = "Frederick",
Last = "Heinrich",
Prefix = "Herr"
},
Address = new[]
{
new typeStructuredAddress
{
AddressName = "Smiths",
City = "Frankfurt",
Country = "DE",
PostalCode = "60311",
Street = new[] {"Rossmarkt 6"},
State = new State {Value = "Hesse"}
}
},
DeliveryInfo = new[]
{
new DeliveryInfo
{
Email = new Email {EmailID = "[email protected]", Type = "Home"},
PhoneNumber = new PhoneNumber
{
CountryCode = "069",
AreaCode = "49",
Number = "261111111",
Type = PhoneNumberType.Mobile,
Location = "FRA"
},
ShippingAddress = new DeliveryInfoShippingAddress
{
City = "Frankfurt",
Country = "DE",
PostalCode = "60311",
Street = new[] {"Rossmarkt 6"}
}
}
},
Email = new[] { new Email { Type = "Home", EmailID = "[email protected]" } },
PhoneNumber = new[]
{
new PhoneNumber
{
CountryCode = "069",
AreaCode = "49",
Number = "261111111",
Type = PhoneNumberType.Mobile,
Location = "FRA"
}
}
};
var reservationRequest = new AirCreateReservationReq
{
BillingPointOfSaleInfo = biPoint3,
TargetBranch = Crediantels.targetBranch,
AirPricingSolution = airPriceResponse.AirPriceResult[0].AirPricingSolution[0],
DeliveryInfo = delevieryInfo,
BookingTraveler = new[] { travelerDetails },
FormOfPayment = new[]
{
new FormOfPayment
{
Type = "Cash",
Key = "jwt2mcK1Qp27I2xfpcCtAw=="
}
},
ActionStatus = new[]
{
new ActionStatus
{
Type = ActionStatusType.TTL,
TicketDate = "2014-12-07T00:00:00",
ProviderCode = "1G",
QueueCategory = "01"
}
},
AuthorizedBy = "myself",
RetainReservation = typeRetainReservation.Both,
TraceId = "1234"
};
if (reservationRequest.AirPricingSolution.AirSegmentRef != null)
{
var airSegmentRef = reservationRequest.AirPricingSolution.AirSegmentRef[0].Key;
reservationRequest.AirPricingSolution.AirSegment = new[] { GetAirSegmentByKey(airPriceResponse, airSegmentRef) };
}
reservationRequest.AirPricingSolution.AirSegmentRef = null;
reservationRequest.AirPricingSolution.AirPricingInfo[0].PassengerType[0].BookingTravelerRef = "0";
var reservationBinding = new AirCreateReservationBinding
{
Url = Crediantels.url,
Credentials = new NetworkCredential(Crediantels.userName, Crediantels.password)
};
//SoapException on the following line
var airReservationResponse = reservationBinding.service(reservationRequest);
Но когда я отправляю запрос, я получаю SoapException в последней строке, указанной в приведенном выше коде. Исключением является: Ticketing application failed: CHECK FORMAT
.
Обычно ответ всегда содержит ключ к отсутствию или отсутствию запроса в соответствии с ожиданием веб-службы.
Я попытался добавить все детали в запрос, даже если мне не нужны некоторые из них, просто чтобы соответствовать запросу образца, но все же это исключение не исчезнет.
Если я намеренно пропустил то, что упоминается в документации, я получаю понятный ответ, в котором упоминается отсутствующий элемент или деталь, но не в исходном случае.
Я был бы признателен за любые мысли, которые могут привести меня в правильном направлении.
Решили проблему с некоторыми хитами и испытаниями. Проводя здесь, как ответ, чтобы помочь кому-то еще искать то же самое.
Ошибка была указана из-за ActionStatusType.TTL
. Он должен быть установлен в ActionStatusType.TAW
. TAW означает TicketAtWill
.
Изменяя, что моя ошибка была изменена на *0 AVAIL/WL Closed*
. Но это было потому, что не было доступных рейсов для бронирования по входным критериям. Изменив критерии для более длительных дат вылета и возвращения, я получил действительный ответ с информацией о бронировании.
ActionStatus = new[]
{
new ActionStatus
{
Type = ActionStatusType.TAW, ***
TicketDate = "2014-12-07T00:00:00",
ProviderCode = "1G",
QueueCategory = "01"
}
},