Проверка формата ответа об ошибке в Travelport Universal API AirCreateReservationReq

1

Сейчас я использую универсальный 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.

Обычно ответ всегда содержит ключ к отсутствию или отсутствию запроса в соответствии с ожиданием веб-службы.

Я попытался добавить все детали в запрос, даже если мне не нужны некоторые из них, просто чтобы соответствовать запросу образца, но все же это исключение не исчезнет.

Если я намеренно пропустил то, что упоминается в документации, я получаю понятный ответ, в котором упоминается отсутствующий элемент или деталь, но не в исходном случае.

Я был бы признателен за любые мысли, которые могут привести меня в правильном направлении.

Теги:
soap-client

1 ответ

3
Лучший ответ

Решили проблему с некоторыми хитами и испытаниями. Проводя здесь, как ответ, чтобы помочь кому-то еще искать то же самое.

Ошибка была указана из-за 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"
    }
 },
  • 0
    Можете ли вы помочь мне с этим исключением при попытке зарезервировать билет: Сообщение от Galileo: Неполученная причина исключения службы: com.cendant.tds.soa.framework.ServiceException: Исключение ReturnedERR: ID агента - GALILEO | + С динамическим списком GTID: : A809C5

Ещё вопросы

Сообщество Overcoder
Наверх
Меню