...

среда, 25 марта 2015 г.

e-Ticket misunderstanding

Привет!

Все больше пассажиров пользуется электронными билетами — это факт. И многие из них состоят в различных бонусных программах и пытаются накопить мили как на земле так и в воздухе. Это прикольно. Для увеличения количества этих миль даже выпускают специализированные банковские карты, расплачиваясь которыми вы приумножаете этот баланс. Интересная особенность обнаружилась на сайте одного перевозчика. Давайте взглянем!



Предыстория

Я несколько раз покупал билеты через online сервис. Ничего необычного и в этот раз, кроме того, что меня несколько раз отвлекали. Я ввел свои реальные данные, нажал «Продолжить» и оказалось, что ошибся в одной букве в фамилии (залипла клавиша).

image

image

При этом обнаружились очень интересные факты. Эту же ошибку я сформулировал с выдуманными из головы данными.

Проверка

Итак, мы практически на пути к успеху и заполнили все необходимые поля данных:

image

Все данные введены случайно, кроме моего реального номера бонусной карты, который я и использовал при первом появлении этой ошибки.

Как видно никакой валидации по номеру карты и ФИО не производится, страница сообщает нам, что все «ok».

Это значит, что такой номер бонусной карты действительно существует, и это правда.

Жмем далее… и ошибка, собственно такая же, которую я получил, когда ошибся со своей фамилией:

image

Неавторизированное использование карты, о как. Ну все правильно, у выдуманного товарища не может быть карты с номером, который привязан ко мне (как физическому лицу), так же как и самого меня с неправильной фамилией. Справедливости ради стоит отметить такой баннер на странице: "Внимание! Если Вы указываете универсальную карту или карту «РЖД-Бонус» убедитесь, что фамилия, имя и отчество указаны те же самые, что и при регистрации карты. Если при регистрации карты указывалось отчество, то оно обязательно для заполнения на данной странице." Предупреждение отличное, но от случайных ошибок, как видно, никто не застрахован. Почему не использовать дополнительные механизмы проверки?

Но давайте просмотрим весь текст ошибки:

Passenger{id='0', lastName='ИВАНОВ', firstName='ПЕТРОВ', middleName='СИДОРОВ', tariffType=Полный, dateOfBirth=Wed Feb 07 00:00:00 MSK 1996, documentType=DocType{id=1, code='ПН', name='Паспорт РФ},
documentNumber='1222567890', citizenship=Country{expressCode=**, isoAlpha3='RUS', isForcedRegistrationAllowed=true, localizedNames='{en={name=Russian Federation}, ru={name=Россия}}'}, gender=Male, universalCardNumber='null', loyaltyCardNumber='*********************', birthplace='Самара', insuranceCompany='null', babyPassenger='null'},
order=OrderBean{id=, saleOrderId=null, departureStationId=2000003, arrivalStationId=2024000, srcStation='МОСКВА КАЗ', dstStation='САМАРА', distance=null, departureTrain=Train{typeId='2', expressCategoryId='1', date=12.03.2015 20:08:00.000, trainDepartureDate=null, comments=null, isOnboardRegistrationAvailable=false, brand=null, departureStationShortName='МОСКВА КАЗ', arrivalStationShortName='САМАРА'},
arrivalTrain=Train{typeId='null', expressCategoryId='null', date=09.03.2015, trainDepartureDate=null, comments=null, isOnboardRegistrationAvailable=false, brand=null, departureStationShortName='null', arrivalStationShortName='null'}, carrierId=1, carriage=ru.tehnosk.chameleon.layer.express.bean.response.buyTicket.Carriage{number='03', owner={type='КБШ', railway=null}, addSigns='У1', serviceClass=1У, isOnboardRegistrationAvailable=false, tripClass=null} SUPER:AbstractCarriage{type=Люкс, number='03', carCarrierGroup=CarCarrierGroup{id='1' name='ФПК', isFoodChoiceAvailable=true, foodChoiceStopHours=48}, carCarrier=Carrier{name='ФПК КУЙБЫШЕВСКИЙ', id=200, isForcedRegistrationAllowed=true, carCarrierGroup=CarCarrierGroup{id='1' name='ФПК', isFoodChoiceAvailable=true, foodChoiceStopHours=48}, isNotForSale=false, locale2fieldName2value={ru={name=ФПК КУЙБЫШЕВСКИЙ}, en={name=ФПК КУЙБЫШЕВСКИЙ}}}, serviceClass='1У', addSigns='У1', foodAvailabilityFlag=true}, tariff=ru.tehnosk.chameleon.layer.express.bean.response.buyTicket.Tariff{type='null'} {cost='7304.0'}, totalCostInEuro=null, totalCostInPoints=null, totalInsuranceCost=0, tickets=[TicketBean{id=128532684, orderId=119344058, ordinal=1, number='71751387597061', reservationNumber=null, passCount=1, seats='010', seatsType='Н', tariffType=Полный, tariffInfo='null', tariffB=3636.6, tariffP=3667.4, tariffBP=7304.0, tariffInsurance=0.0, tariffService=0.0, tariffNDS=1114.17, price=7304.0, priceInEuro=null, priceInPoints=null, priceInPointsMoney=null, status=Забронирован, code2D='null', registrationChangeDate=null, containsDet5=false, refundTariff=null, refundDate=null, refundInfo='null', refundKrs=null, trainmasterLogin='null',




Параметр loyaltyCardNumber='*********************' — это номер моей карты. Остальное — это служебная и географическая информация с идентификаторами. Все, что выше вполне соответствует введенной информации. Но как всегда есть подводные камни…

Вот этот кусок вызывает отдельный интерес:

*/


passengers=[ru.tehnosk.chameleon.layer.express.bean.PassengerBean{id=**********, index=null, middleName='*************ИЧ', firstName='*********Н', lastName='****Е******', tariffType=null, dateOfBirth=**.**.19** 00:00:00.000, documentType=DocType{id=1, code='ПН', name='Паспорт РФ}, documentNumber='1222567890', citizenship=Country{expressCode=20, isoAlpha3='RUS', isForcedRegistrationAllowed=true, localizedNames='{ru={name=Россия}, en={name=Russian Federation}}'}, gender=Male, cardNumber='null', loyaltyCardNumber='null', isFullComp=false, insurance=null}], foodChoice={}}]



*/

Здесь я нашел свои законные ФИО и дату рождения… Хорошо хоть паспортные данные оставили выдуманные. Кстати тут параметр бонусной карты такой: loyaltyCardNumber='null'. Получается совсем невеселая история, хорошо, если у вас клавиша залипнет, а если нет?

Текст ошибки далее:

refundedTicketFromReissuedOrder=null, expiredDate=null, orderNumber='',
dbRecordCreateDate=null, createDate=09.03.2015 , status=null, statusChangeDate=null,
payGateData=ru.tehnosk.chameleon.layer.express.bean.response.buyTicket.PayGateData{payGateOrderId='null', payGateSessionId='null'},
ticketQuantity=1, passengerQuantity=null, seatQuantity=1, paymentForm='null', agentId='1', subagentId='null', seatNumbers='010', timeInfo='КУРИТЬ ЗАПРЕЩЕНО.; ВРЕМЯ ОТПР И ПРИБ МОСКОВСКОЕ; ', attrs='null', terminalNumber='', issueRailway='null', issueCc='null', compCc='null', posNumber='null', login='null', isInternational=false, isCisInternational=false, e3gwNegativeResult=null, directionType=Forward, isRegistrationAvailable=true, isInactive=false, isTeema=false, isAutorackAvailable=false, hasAutorackOrder=false, isDeferredPayment=false, deferredPaymentDeadline=null, isEntireCompartment=false, availableFoodTypes=[], refundedTicketId=null, relatedOrderId=null, ferry=false, busFlag=false, autoRequest=null}




Надеюсь, они поправят этот функционал в кратчайшие сроки, т.к. сообщение в РЖД было направлено.

P.S. А вот и оперативный ответ:

image

Ответ, конечно занимательный. Я согласен, что бонусная карта индивидуальная, но это никак не коррелирует с тем фактом, что система покупки билетов (связь между данными в бонусной программе и данными вводимыми в форму) является некорректной. Хочу отметить, что номер бонусной карты я вводил исключительно свой. Может моя карта уникальная?

P.P.S.

Прошла еще неделя, был написан еще один запрос, т.к. ситуация не изменилась. Еще один ответ от РЖД:

image

Получается что никто ни за что не отвечает, покупаете вы на на сайте РЖД, а бонусная программа это вообще что-то третье…

Можно конечно успокоится и не пользоваться электронными услугам, т.к.:

image и image

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

Так все организации могут сделать? Немного мыслей для размышления.

Надеюсь информация будет полезной.

This entry passed through the Full-Text RSS service - if this is your content and you're reading it on someone else's site, please read the FAQ at http://ift.tt/jcXqJW.


Комментариев нет:

Отправить комментарий