gillbus 0.11.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/.gitignore +22 -0
- data/.ruby-version +1 -0
- data/Gemfile +10 -0
- data/Guardfile +29 -0
- data/LICENSE.txt +22 -0
- data/README.md +140 -0
- data/Rakefile +9 -0
- data/gillbus.gemspec +31 -0
- data/lib/gillbus/base_request.rb +99 -0
- data/lib/gillbus/base_response.rb +43 -0
- data/lib/gillbus/buy_booking.rb +74 -0
- data/lib/gillbus/buy_tickets.rb +36 -0
- data/lib/gillbus/cancel_order.rb +55 -0
- data/lib/gillbus/drivers/faraday_response_file_logger.rb +19 -0
- data/lib/gillbus/find_order.rb +37 -0
- data/lib/gillbus/get_all_cities.rb +24 -0
- data/lib/gillbus/get_cities.rb +34 -0
- data/lib/gillbus/get_countries.rb +24 -0
- data/lib/gillbus/get_dates_new.rb +35 -0
- data/lib/gillbus/get_order_status.rb +28 -0
- data/lib/gillbus/get_order_ticket.rb +62 -0
- data/lib/gillbus/get_required_fields.rb +32 -0
- data/lib/gillbus/get_time_table.rb +33 -0
- data/lib/gillbus/get_trip_seats.rb +61 -0
- data/lib/gillbus/get_trips.rb +13 -0
- data/lib/gillbus/helpers/fields.rb +47 -0
- data/lib/gillbus/helpers/parser.rb +100 -0
- data/lib/gillbus/helpers/update_attrs.rb +15 -0
- data/lib/gillbus/lock_seats.rb +82 -0
- data/lib/gillbus/logout.rb +19 -0
- data/lib/gillbus/parse_error.rb +11 -0
- data/lib/gillbus/reserve_tickets.rb +13 -0
- data/lib/gillbus/search_trips.rb +96 -0
- data/lib/gillbus/session_login.rb +32 -0
- data/lib/gillbus/structs/commission.rb +54 -0
- data/lib/gillbus/structs/item.rb +14 -0
- data/lib/gillbus/structs/passenger_discount.rb +37 -0
- data/lib/gillbus/structs/point.rb +38 -0
- data/lib/gillbus/structs/return_cause.rb +23 -0
- data/lib/gillbus/structs/seat.rb +38 -0
- data/lib/gillbus/structs/segment.rb +161 -0
- data/lib/gillbus/structs/tariff.rb +59 -0
- data/lib/gillbus/structs/ticket.rb +285 -0
- data/lib/gillbus/structs/timetable_segment.rb +51 -0
- data/lib/gillbus/structs/timetable_trip.rb +77 -0
- data/lib/gillbus/structs/trip.rb +164 -0
- data/lib/gillbus/tickets_booking.rb +182 -0
- data/lib/gillbus/unlock_seats.rb +15 -0
- data/lib/gillbus/version.rb +3 -0
- data/lib/gillbus.rb +86 -0
- data/script/example_booking.rb +82 -0
- data/script/example_booking_with_segments.rb +90 -0
- data/script/example_canceling_booking.rb +67 -0
- data/script/example_canceling_reservation.rb +69 -0
- data/script/example_reservation.rb +88 -0
- data/test/buy_booking_test.rb +32 -0
- data/test/buy_tickets_test.rb +12 -0
- data/test/cancel_order_test.rb +12 -0
- data/test/error_test.rb +31 -0
- data/test/find_order_test.rb +24 -0
- data/test/get_cities_test.rb +12 -0
- data/test/get_countries_test.rb +12 -0
- data/test/get_dates_new_test.rb +12 -0
- data/test/get_order_ticket_test.rb +12 -0
- data/test/get_time_table_test.rb +21 -0
- data/test/get_trip_seats_test.rb +40 -0
- data/test/lock_seats_test.rb +70 -0
- data/test/reserve_tickets_test.rb +22 -0
- data/test/responses/buyBooking.xml +9 -0
- data/test/responses/buyTickets.xml +7 -0
- data/test/responses/cancelOrder.xml +8 -0
- data/test/responses/error.xml +1 -0
- data/test/responses/findOrder.xml +296 -0
- data/test/responses/getCities.xml +266 -0
- data/test/responses/getCountries.xml +90 -0
- data/test/responses/getOrderTicket.xml +3 -0
- data/test/responses/getTimeTable.xml +81 -0
- data/test/responses/getTripSeats-one-empty-segment.xml +562 -0
- data/test/responses/getTripSeats-segments.xml +1052 -0
- data/test/responses/getTripSeats.xml +492 -0
- data/test/responses/lockSeats.xml +23 -0
- data/test/responses/reserveTickets.xml +76 -0
- data/test/responses/searchTrips-empty.xml +3 -0
- data/test/responses/searchTrips-prod.xml +193 -0
- data/test/responses/searchTrips-segments-roundtrip.xml +15812 -0
- data/test/responses/searchTrips-segments.xml +808 -0
- data/test/responses/sessionLogin.xml +3 -0
- data/test/responses/ticketsBooking.xml +75 -0
- data/test/responses/very_empty.xml +1 -0
- data/test/search_trips_test.rb +71 -0
- data/test/session_login_test.rb +12 -0
- data/test/test_helper.rb +3 -0
- data/test/tickets_booking_test.rb +16 -0
- metadata +303 -0
@@ -0,0 +1,182 @@
|
|
1
|
+
class Gillbus
|
2
|
+
module TicketsBooking
|
3
|
+
|
4
|
+
Gillbus.register self, :tickets_booking
|
5
|
+
|
6
|
+
class Request < BaseRequest
|
7
|
+
|
8
|
+
def path; '/online2/ticketsBooking' end
|
9
|
+
|
10
|
+
# orderId
|
11
|
+
# Сгенерированный уникальный ИД заказа.
|
12
|
+
attr_accessor :order_id
|
13
|
+
|
14
|
+
# terminalNumber (не обязательный)
|
15
|
+
# Номер терминала, с которого выполняется команда.
|
16
|
+
attr_accessor :terminal_number
|
17
|
+
|
18
|
+
# applyDiscount (не обязательный)
|
19
|
+
# Если при поиске рейсов не были указаны скидочные данные но есть возможность их применить при оформлении отложенной продажи (параметр CAN_DISCOUNT = true при поиске рейсов), то для применения скидочных данных необходимо этот параметр установить в true. Если на оформляемый рейс действуют скидки, то стоимость тарифа может быть пересчитана по переданным данным в параметрах passenger(0 - N)studentTicket, passenger(0 - N)birthday, passenger(0 - N)ISIC. По умолчанию false (скидочные данные не применяются ).
|
20
|
+
attr_accessor :apply_discount
|
21
|
+
|
22
|
+
# paymentMethod (не обязательный)
|
23
|
+
# Способ оплаты заказа.
|
24
|
+
attr_accessor :payment_method
|
25
|
+
|
26
|
+
# 1 – наличный;
|
27
|
+
METHOD_CASH = 1
|
28
|
+
# 2 – кредитной карточкой;
|
29
|
+
METHOD_CARD = 2
|
30
|
+
# 3 – безналичный;
|
31
|
+
METHOD_NOCASH = 3
|
32
|
+
# 4 – сервисный;
|
33
|
+
METHOD_SERVICE = 4
|
34
|
+
# 5 – эквайринг.
|
35
|
+
METHOD_ACQUIRING = 5
|
36
|
+
# По умолчанию 3.
|
37
|
+
|
38
|
+
# phoneNumber (не обязательный)
|
39
|
+
# Номер телефона пассажира.
|
40
|
+
attr_accessor :phone_number
|
41
|
+
|
42
|
+
# mailAddress (не обязательный)
|
43
|
+
# Адрес электронной почты пассажира. Если указан, то на него будет отправлен маршрутный лист соответствующий форме утвержденной с перевозчиком.
|
44
|
+
attr_accessor :mail_address
|
45
|
+
|
46
|
+
# note (не обязательный)
|
47
|
+
# Примечания.
|
48
|
+
attr_accessor :note
|
49
|
+
|
50
|
+
# ticketLocale (не обязательный)
|
51
|
+
# Язык, на котором будут возвращены данные для печати билета. Если язык не передан или ошибочный, то будет установлен язык переданный при вызове команды входа в систему.
|
52
|
+
# rus – русский;
|
53
|
+
# ukr – украинский; lat – английский.
|
54
|
+
attr_accessor :ticket_locale
|
55
|
+
|
56
|
+
# список пассажиров
|
57
|
+
attr_accessor :passengers
|
58
|
+
|
59
|
+
# отправлять ли email с листом бронирования пользователю
|
60
|
+
attr_accessor :send_to
|
61
|
+
|
62
|
+
def params
|
63
|
+
pax = (passengers || []).map.with_index { |p, i| Passenger.new(p).params("passenger#{i}") }.reduce({}, :merge)
|
64
|
+
compact(
|
65
|
+
orderId: order_id,
|
66
|
+
terminalNumber: terminal_number,
|
67
|
+
applyDiscount: apply_discount,
|
68
|
+
paymentMethod: payment_method,
|
69
|
+
phoneNumber: phone_number,
|
70
|
+
mailAddress: mail_address,
|
71
|
+
note: note,
|
72
|
+
ticketLocale: translated_locale(ticket_locale),
|
73
|
+
sendTo: send_to,
|
74
|
+
**pax
|
75
|
+
)
|
76
|
+
|
77
|
+
end
|
78
|
+
|
79
|
+
# not a request, just a record for BookTickets
|
80
|
+
class Passenger < BaseRequest
|
81
|
+
|
82
|
+
# passenger0studentTicket... passengerNstudentTicket (не обязательный)
|
83
|
+
# Номер студенческого билета пассажира с порядковым номером 0... N.
|
84
|
+
|
85
|
+
# passenger0birthday... passengerNbirthday (обязательный для авиаперевозки)
|
86
|
+
# Дата рождения пассажира с порядковым номером 0...N.
|
87
|
+
attr_accessor :birthday
|
88
|
+
|
89
|
+
# passenger0ISIC...passengerNISIC (не обязательный)
|
90
|
+
# Номер ISIC пассажира с порядковым номером 0...N.
|
91
|
+
attr_accessor :isic
|
92
|
+
|
93
|
+
# passenger0firstName... passengerNfirstName (не обязательный)
|
94
|
+
# Имя пассажира с порядковым номером 0...N.
|
95
|
+
attr_accessor :first_name
|
96
|
+
|
97
|
+
# passenger0lastName... passengerNlastName (не обязательный)
|
98
|
+
# Фамилия пассажира с порядковым номером 0...N.
|
99
|
+
attr_accessor :last_name
|
100
|
+
|
101
|
+
# passenger0middleName... passengerNmiddleName (не обязательный)
|
102
|
+
# Отчество пассажира с порядковым номером 0...N.
|
103
|
+
attr_accessor :second_name
|
104
|
+
|
105
|
+
# passenger0tariffShortName... passengerNtariffShortName (не обязательный)
|
106
|
+
# Краткое обозначение тарифа, полученное при поиске рейсов в списке тарифов, по указанным passenger0studentTicket, passenger0birthday, passenger0ISIC.
|
107
|
+
attr_accessor :tariff_short_name
|
108
|
+
|
109
|
+
# passenger0tariffCost... passengerNtariffCost (не обязательный)
|
110
|
+
# Стоимость тарифа, полученное при поиске рейсов в списке тарифов, с кратким обозначением passenger0tariffShortName с порядковым номером 0...N.
|
111
|
+
attr_accessor :tariff_cost
|
112
|
+
|
113
|
+
# passenger0documentType... passengerNdocumentType (не обязательный)
|
114
|
+
# Тип удостоверения личности (для определения типа документа, номер которого передан в параметре passport).
|
115
|
+
# Возможные значения:
|
116
|
+
# :passport 1 - паспорт
|
117
|
+
# :military_card 2 - военный билет
|
118
|
+
# :foreign_document 3 - иностранный документ
|
119
|
+
# :foreign_passport 4 - заграничный паспорт
|
120
|
+
# :seaman_passport 6 - паспорт моряка
|
121
|
+
# :birth_certificate 7 - свидетельство о рождении
|
122
|
+
# :ussr_passport 8 - паспорт формы СССР
|
123
|
+
attr_accessor :document_type
|
124
|
+
|
125
|
+
# passenger0passport... passengerNpassport (обязательный для авиаперевозки)
|
126
|
+
# Паспортные данные пассажира с порядковым номером 0...N.
|
127
|
+
attr_accessor :passport
|
128
|
+
|
129
|
+
# passenger0passportExpireDate... passengerNpassportExpireDate (обязательный для авиаперевозки)
|
130
|
+
# Дата окончания действия паспорта пассажира с порядковым номером 0...N.
|
131
|
+
attr_accessor :passport_expire_date
|
132
|
+
|
133
|
+
# passenger0citizenship... passengerNcitizenship (обязательный для авиаперевозки)
|
134
|
+
# Гражданство пассажира с порядковым номером 0...N. 2-х буквенный код страны, пример, Украина – UA.
|
135
|
+
attr_accessor :citizenship
|
136
|
+
|
137
|
+
# passenger0gender... passengerNgender (обязательный для авиаперевозки)
|
138
|
+
# Пол пассажира с порядковым номером 0...N. M – мужской, F – женский.
|
139
|
+
attr_accessor :gender
|
140
|
+
|
141
|
+
# passenger0discountValue... passengerNdiscountValue (не обязательный)
|
142
|
+
# Величина скидки в валюте продажи для пассажира с порядковым номером 0…N.
|
143
|
+
attr_accessor :discount
|
144
|
+
|
145
|
+
def params(prefix="")
|
146
|
+
compact(
|
147
|
+
birthday: date(birthday),
|
148
|
+
ISIC: isic,
|
149
|
+
firstName: first_name,
|
150
|
+
lastName: last_name,
|
151
|
+
middleName: second_name,
|
152
|
+
tariffShortName: tariff_short_name,
|
153
|
+
tariffCost: tariff_cost,
|
154
|
+
documentType: document_type_to_int(document_type),
|
155
|
+
passport: passport,
|
156
|
+
passportExpireDate: passport_expire_date,
|
157
|
+
citizenship: citizenship,
|
158
|
+
gender: gender,
|
159
|
+
discountValue: discount.to_f.to_s,
|
160
|
+
).map {|k, v| [:"#{prefix}#{k}", v] }.to_h
|
161
|
+
end
|
162
|
+
|
163
|
+
def document_type_to_int(value)
|
164
|
+
{
|
165
|
+
passport: 1,
|
166
|
+
military_card: 2,
|
167
|
+
foreign_document: 3,
|
168
|
+
foreign_passport: 4,
|
169
|
+
seaman_passport: 6,
|
170
|
+
birth_certificate: 7,
|
171
|
+
ussr_passport: 8,
|
172
|
+
}[value.try(:to_sym)]
|
173
|
+
end
|
174
|
+
end
|
175
|
+
end
|
176
|
+
|
177
|
+
class Response < BaseResponse
|
178
|
+
field :tickets, [Ticket], key: 'TICKET'
|
179
|
+
end
|
180
|
+
|
181
|
+
end
|
182
|
+
end
|
data/lib/gillbus.rb
ADDED
@@ -0,0 +1,86 @@
|
|
1
|
+
require "gillbus/version"
|
2
|
+
require "faraday"
|
3
|
+
|
4
|
+
class Gillbus
|
5
|
+
|
6
|
+
# driver: e.g. Faraday.new(url: 'http://demo.gillbus.com')
|
7
|
+
def initialize(driver:, session_id: nil)
|
8
|
+
@driver = driver
|
9
|
+
@session_id = session_id
|
10
|
+
end
|
11
|
+
|
12
|
+
# Faraday instance
|
13
|
+
attr_reader :driver
|
14
|
+
# JSESSIONID сессии API gillbus
|
15
|
+
attr_accessor :session_id
|
16
|
+
|
17
|
+
def login(password:, locale: nil)
|
18
|
+
response = session_login password: password, locale: locale
|
19
|
+
self
|
20
|
+
end
|
21
|
+
|
22
|
+
def self.register klass, method_name
|
23
|
+
define_method method_name do |*args|
|
24
|
+
request_class = klass::Request
|
25
|
+
response_class = klass::Response
|
26
|
+
request = request_class.new(*args)
|
27
|
+
headers = {'Cookie' => "JSESSIONID=#{session_id}"} if session_id
|
28
|
+
http_response = driver.post( request.path, request.params, headers )
|
29
|
+
result = response_class.parse_string(http_response.body.force_encoding('utf-8'))
|
30
|
+
if cookie_string = http_response.headers["Set-Cookie"]
|
31
|
+
returned_session_id = CGI::Cookie.parse(cookie_string)['JSESSIONID'].first
|
32
|
+
self.session_id = returned_session_id
|
33
|
+
end
|
34
|
+
result.session_id = session_id
|
35
|
+
result
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
require 'monetize'
|
40
|
+
require 'gillbus/helpers/fields'
|
41
|
+
require 'gillbus/helpers/update_attrs'
|
42
|
+
require 'gillbus/helpers/parser'
|
43
|
+
|
44
|
+
require 'gillbus/structs/point'
|
45
|
+
require 'gillbus/structs/tariff'
|
46
|
+
require 'gillbus/structs/segment'
|
47
|
+
require 'gillbus/structs/timetable_segment'
|
48
|
+
require 'gillbus/structs/trip'
|
49
|
+
require 'gillbus/structs/timetable_trip'
|
50
|
+
|
51
|
+
require 'gillbus/structs/commission'
|
52
|
+
require 'gillbus/structs/return_cause'
|
53
|
+
require 'gillbus/structs/ticket'
|
54
|
+
|
55
|
+
require 'gillbus/structs/seat'
|
56
|
+
require 'gillbus/structs/item'
|
57
|
+
|
58
|
+
require 'gillbus/parse_error'
|
59
|
+
require 'gillbus/base_request'
|
60
|
+
require 'gillbus/base_response'
|
61
|
+
|
62
|
+
require 'gillbus/structs/passenger_discount'
|
63
|
+
|
64
|
+
require 'gillbus/session_login'
|
65
|
+
require 'gillbus/get_countries'
|
66
|
+
require 'gillbus/get_cities'
|
67
|
+
require 'gillbus/get_all_cities'
|
68
|
+
require 'gillbus/get_time_table'
|
69
|
+
require 'gillbus/get_dates_new'
|
70
|
+
require 'gillbus/search_trips'
|
71
|
+
require 'gillbus/get_trips'
|
72
|
+
require 'gillbus/get_trip_seats'
|
73
|
+
require 'gillbus/get_required_fields'
|
74
|
+
require 'gillbus/lock_seats'
|
75
|
+
require 'gillbus/unlock_seats'
|
76
|
+
require 'gillbus/tickets_booking'
|
77
|
+
require 'gillbus/reserve_tickets'
|
78
|
+
require 'gillbus/buy_booking'
|
79
|
+
require 'gillbus/buy_tickets'
|
80
|
+
require 'gillbus/cancel_order'
|
81
|
+
require 'gillbus/get_order_ticket'
|
82
|
+
require 'gillbus/find_order'
|
83
|
+
require 'gillbus/get_order_status'
|
84
|
+
require 'gillbus/logout'
|
85
|
+
|
86
|
+
end
|
@@ -0,0 +1,82 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
lib = File.expand_path('../../lib', __FILE__)
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
+
require 'gillbus'
|
5
|
+
require 'pry'
|
6
|
+
require 'logger'
|
7
|
+
require 'securerandom'
|
8
|
+
|
9
|
+
GILLBUS_SERVER = "http://mdc.demo.gillbus.com"
|
10
|
+
GILLBUS_PASSWORD = "3DVG/x1AOk+xwNlAEXytMCxZMsb73r39DOg97k8b8c4YaMrlOar071diefS0IyZT"
|
11
|
+
|
12
|
+
driver = Faraday.new(url: GILLBUS_SERVER) { |c|
|
13
|
+
c.response :logger, Logger.new(STDOUT), bodies: true
|
14
|
+
c.request :url_encoded
|
15
|
+
c.adapter Faraday.default_adapter
|
16
|
+
}
|
17
|
+
|
18
|
+
g = Gillbus.new(driver: driver).login(
|
19
|
+
password: GILLBUS_PASSWORD,
|
20
|
+
locale: :ru
|
21
|
+
)
|
22
|
+
|
23
|
+
# getCities
|
24
|
+
|
25
|
+
cities = g.get_cities.cities
|
26
|
+
|
27
|
+
kiiv_id = cities.find {|c| c.name == "Киев" }.id
|
28
|
+
lviv_id = cities.find {|c| c.name == "Львов" }.id
|
29
|
+
|
30
|
+
|
31
|
+
# searchTrips
|
32
|
+
|
33
|
+
tomorrow = Date.today + 1
|
34
|
+
trips = g.search_trips(
|
35
|
+
start_city_id: kiiv_id,
|
36
|
+
end_city_id: lviv_id,
|
37
|
+
start_date_search: tomorrow,
|
38
|
+
ticket_count: 2,
|
39
|
+
passengers: [
|
40
|
+
{ birthday: Date.new(1983,4,19) },
|
41
|
+
{ birthday: Date.new(2007,10,15) },
|
42
|
+
]
|
43
|
+
).trips
|
44
|
+
|
45
|
+
trip_id = trips.first.id
|
46
|
+
|
47
|
+
# lockSeats
|
48
|
+
|
49
|
+
tl = g.lock_seats(trip_id: trip_id).time_limit
|
50
|
+
|
51
|
+
# ticketsBooking
|
52
|
+
order_id = SecureRandom.uuid
|
53
|
+
|
54
|
+
puts "making order: #{order_id}"
|
55
|
+
passengers = [
|
56
|
+
{ first_name: 'Иван', last_name: 'Иванов', passport: "123" },
|
57
|
+
{ first_name: 'Петр', last_name: 'Петров', passport: "123" }
|
58
|
+
]
|
59
|
+
|
60
|
+
tb = g.tickets_booking(
|
61
|
+
order_id: order_id,
|
62
|
+
mail_address: 'invanov@mail.ru',
|
63
|
+
note: 'test',
|
64
|
+
passengers: passengers
|
65
|
+
)
|
66
|
+
|
67
|
+
# relogging again
|
68
|
+
|
69
|
+
g = Gillbus.new(driver: driver).login(password: GILLBUS_PASSWORD, locale: :ru)
|
70
|
+
|
71
|
+
# buyTickets
|
72
|
+
puts "confirmation: " + g.buy_tickets(order_id: order_id).ticket.confirmation.inspect
|
73
|
+
|
74
|
+
# getOrderTicket
|
75
|
+
ot = g.get_order_ticket order_id: order_id, base64: true
|
76
|
+
|
77
|
+
filename = order_id + ".pdf"
|
78
|
+
puts "saving " + filename
|
79
|
+
File.open filename, 'wb' do |f|
|
80
|
+
f << ot.ticket
|
81
|
+
end
|
82
|
+
|
@@ -0,0 +1,90 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
lib = File.expand_path('../../lib', __FILE__)
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
+
require 'gillbus'
|
5
|
+
require 'pry'
|
6
|
+
require 'logger'
|
7
|
+
require 'securerandom'
|
8
|
+
|
9
|
+
GILLBUS_SERVER = "http://mdc.demo.gillbus.com"
|
10
|
+
GILLBUS_PASSWORD = "3DVG/x1AOk+xwNlAEXytMCxZMsb73r39DOg97k8b8c4YaMrlOar071diefS0IyZT"
|
11
|
+
|
12
|
+
driver = Faraday.new(url: GILLBUS_SERVER) { |c|
|
13
|
+
c.response :logger, Logger.new(STDOUT), bodies: true
|
14
|
+
c.request :url_encoded
|
15
|
+
c.adapter Faraday.default_adapter
|
16
|
+
}
|
17
|
+
|
18
|
+
g = Gillbus.new(driver: driver).login(
|
19
|
+
password: GILLBUS_PASSWORD,
|
20
|
+
locale: :ru
|
21
|
+
)
|
22
|
+
|
23
|
+
# getCities
|
24
|
+
|
25
|
+
cities = g.get_cities.cities
|
26
|
+
|
27
|
+
kiiv_id = cities.find {|c| c.name == "Киев" }.id
|
28
|
+
praga_id = cities.find {|c| c.name == "Прага" }.id
|
29
|
+
|
30
|
+
|
31
|
+
# searchTrips
|
32
|
+
|
33
|
+
tomorrow = Date.today + 1
|
34
|
+
trips = g.search_trips(
|
35
|
+
start_city_id: kiiv_id,
|
36
|
+
end_city_id: praga_id,
|
37
|
+
start_date_search: tomorrow,
|
38
|
+
ticket_count: 2,
|
39
|
+
selected_modes: [ :bus, :connections ],
|
40
|
+
],
|
41
|
+
).trips
|
42
|
+
|
43
|
+
trip_id = trips.find { |trip| trip.segments.present? }.id
|
44
|
+
|
45
|
+
# getTripSeats
|
46
|
+
|
47
|
+
seat_map = g.get_trip_seats(trip_id: trip_id)
|
48
|
+
selected_seat_ids = seat_map.segments.map do |k, v|
|
49
|
+
[k, v.select(&:free?).sample(2).map(&:id)]
|
50
|
+
end.to_h
|
51
|
+
|
52
|
+
# lockSeats
|
53
|
+
|
54
|
+
tl = g.lock_seats(
|
55
|
+
trip_id: trip_id,
|
56
|
+
segments_seat_ids: selected_seat_ids,
|
57
|
+
).time_limit
|
58
|
+
|
59
|
+
# ticketsBooking
|
60
|
+
order_id = SecureRandom.uuid
|
61
|
+
|
62
|
+
puts "making order: #{order_id}"
|
63
|
+
passengers = [
|
64
|
+
{ first_name: 'Иван', last_name: 'Иванов', passport: "123" },
|
65
|
+
{ first_name: 'Петр', last_name: 'Петров', passport: "123" }
|
66
|
+
]
|
67
|
+
|
68
|
+
tb = g.tickets_booking(
|
69
|
+
order_id: order_id,
|
70
|
+
mail_address: 'ivan@mail.ru',
|
71
|
+
note: 'test',
|
72
|
+
passengers: passengers
|
73
|
+
)
|
74
|
+
|
75
|
+
# relogging again
|
76
|
+
|
77
|
+
g = Gillbus.new(driver: driver).login(password: GILLBUS_PASSWORD, locale: :ru)
|
78
|
+
|
79
|
+
# buyTickets
|
80
|
+
puts "confirmation: " + g.buy_tickets(order_id: order_id).ticket.confirmation.inspect
|
81
|
+
|
82
|
+
# getOrderTicket
|
83
|
+
ot = g.get_order_ticket order_id: order_id, base64: true
|
84
|
+
|
85
|
+
filename = order_id + ".pdf"
|
86
|
+
puts "saving " + filename
|
87
|
+
File.open filename, 'wb' do |f|
|
88
|
+
f << ot.ticket
|
89
|
+
end
|
90
|
+
|
@@ -0,0 +1,67 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
lib = File.expand_path('../../lib', __FILE__)
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
+
require 'gillbus'
|
5
|
+
require 'pry'
|
6
|
+
require 'logger'
|
7
|
+
require 'securerandom'
|
8
|
+
|
9
|
+
GILLBUS_SERVER = "http://mdc.demo.gillbus.com"
|
10
|
+
GILLBUS_PASSWORD = "3DVG/x1AOk+xwNlAEXytMCxZMsb73r39DOg97k8b8c4YaMrlOar071diefS0IyZT"
|
11
|
+
|
12
|
+
driver = Faraday.new(url: GILLBUS_SERVER) { |c|
|
13
|
+
c.response :logger, Logger.new(STDOUT), bodies: true
|
14
|
+
c.request :url_encoded
|
15
|
+
c.adapter Faraday.default_adapter
|
16
|
+
}
|
17
|
+
|
18
|
+
g = Gillbus.new(driver: driver).login(
|
19
|
+
password: GILLBUS_PASSWORD,
|
20
|
+
locale: :ru
|
21
|
+
)
|
22
|
+
|
23
|
+
# getCities
|
24
|
+
|
25
|
+
cities = g.get_cities.cities
|
26
|
+
|
27
|
+
kiiv_id = cities.find {|c| c.name == "Киев" }.id
|
28
|
+
lviv_id = cities.find {|c| c.name == "Львов" }.id
|
29
|
+
|
30
|
+
|
31
|
+
# searchTrips
|
32
|
+
|
33
|
+
tomorrow = Date.today + 1
|
34
|
+
trips = g.search_trips(
|
35
|
+
start_city_id: kiiv_id,
|
36
|
+
end_city_id: lviv_id,
|
37
|
+
start_date_search: tomorrow,
|
38
|
+
ticket_count: 2
|
39
|
+
).trips
|
40
|
+
|
41
|
+
trip_id = trips.first.id
|
42
|
+
|
43
|
+
# lockSeats
|
44
|
+
|
45
|
+
tl = g.lock_seats(trip_id: trip_id).time_limit
|
46
|
+
|
47
|
+
# ticketsBooking
|
48
|
+
order_id = SecureRandom.uuid
|
49
|
+
|
50
|
+
puts "making order: #{order_id}"
|
51
|
+
passengers = [
|
52
|
+
{ first_name: 'Иван', last_name: 'Иванов' },
|
53
|
+
{ first_name: 'Петр', last_name: 'Петров' }
|
54
|
+
]
|
55
|
+
|
56
|
+
tb = g.tickets_booking(
|
57
|
+
order_id: order_id,
|
58
|
+
mail_address: 'ivan@mail.ru',
|
59
|
+
note: 'test',
|
60
|
+
passengers: passengers
|
61
|
+
)
|
62
|
+
|
63
|
+
# отмена отложенной продажи
|
64
|
+
order_number = tb.tickets.first.order_number
|
65
|
+
canceling = g.cancel_order(order_number: order_number, cancel_reason: 'no_reason')
|
66
|
+
puts "canceling: " + canceling.inspect
|
67
|
+
puts "success? " + canceling.order_cancel.confirmation.inspect
|
@@ -0,0 +1,69 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
lib = File.expand_path('../../lib', __FILE__)
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
+
require 'gillbus'
|
5
|
+
require 'pry'
|
6
|
+
require 'securerandom'
|
7
|
+
|
8
|
+
GILLBUS_SERVER = "http://mdc.demo.gillbus.com"
|
9
|
+
GILLBUS_PASSWORD = "3DVG/x1AOk+xwNlAEXytMCxZMsb73r39DOg97k8b8c4YaMrlOar071diefS0IyZT"
|
10
|
+
|
11
|
+
require 'logger'
|
12
|
+
|
13
|
+
driver = Faraday.new(url: GILLBUS_SERVER) { |c|
|
14
|
+
c.response :logger, Logger.new(STDOUT), bodies: true
|
15
|
+
c.request :url_encoded
|
16
|
+
c.adapter Faraday.default_adapter
|
17
|
+
}
|
18
|
+
|
19
|
+
g = Gillbus.new(driver: driver).login(
|
20
|
+
password: GILLBUS_PASSWORD,
|
21
|
+
locale: :ru
|
22
|
+
)
|
23
|
+
|
24
|
+
# getCities
|
25
|
+
|
26
|
+
cities = g.get_cities.cities
|
27
|
+
|
28
|
+
kiiv_id = cities.find {|c| c.name == "Киев" }.id
|
29
|
+
odessa_id = cities.find {|c| c.name == "Львов" }.id
|
30
|
+
|
31
|
+
|
32
|
+
# searchTrips
|
33
|
+
|
34
|
+
search_date = Date.today + 7
|
35
|
+
trips = g.search_trips(
|
36
|
+
start_city_id: kiiv_id,
|
37
|
+
end_city_id: odessa_id,
|
38
|
+
start_date_search: search_date,
|
39
|
+
ticket_count: 2,
|
40
|
+
selected_modes: 1,
|
41
|
+
).trips
|
42
|
+
|
43
|
+
trip_id = trips.find { |trip| trip.reservation_enabled == true }.id
|
44
|
+
|
45
|
+
# lockSeats
|
46
|
+
|
47
|
+
tl = g.lock_seats(trip_id: trip_id).time_limit
|
48
|
+
|
49
|
+
# ticketsBooking
|
50
|
+
order_id = SecureRandom.uuid
|
51
|
+
|
52
|
+
puts "making order: #{order_id}"
|
53
|
+
passengers = [
|
54
|
+
{ first_name: 'Иван', last_name: 'Иванов' },
|
55
|
+
{ first_name: 'Петр', last_name: 'Петров' }
|
56
|
+
]
|
57
|
+
|
58
|
+
rt = g.reserve_tickets(
|
59
|
+
order_id: order_id,
|
60
|
+
mail_address: 'ivan@mail.ru',
|
61
|
+
note: 'test',
|
62
|
+
passengers: passengers
|
63
|
+
)
|
64
|
+
|
65
|
+
# отмена брони
|
66
|
+
order_number = rt.tickets.first.order_number
|
67
|
+
canceling = g.cancel_order(order_number: order_number, cancel_reason: 'no_reason')
|
68
|
+
puts "canceling: " + canceling.inspect
|
69
|
+
puts "success? " + canceling.order_cancel.confirmation.inspect
|
@@ -0,0 +1,88 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
lib = File.expand_path('../../lib', __FILE__)
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
+
require 'gillbus'
|
5
|
+
require 'pry'
|
6
|
+
require 'securerandom'
|
7
|
+
|
8
|
+
GILLBUS_SERVER = "http://mdc.demo.gillbus.com"
|
9
|
+
GILLBUS_PASSWORD = "3DVG/x1AOk+xwNlAEXytMCxZMsb73r39DOg97k8b8c4YaMrlOar071diefS0IyZT"
|
10
|
+
|
11
|
+
require 'logger'
|
12
|
+
|
13
|
+
driver = Faraday.new(url: GILLBUS_SERVER) { |c|
|
14
|
+
c.response :logger, Logger.new(STDOUT), bodies: true
|
15
|
+
c.request :url_encoded
|
16
|
+
c.adapter Faraday.default_adapter
|
17
|
+
}
|
18
|
+
|
19
|
+
g = Gillbus.new(driver: driver).login(
|
20
|
+
password: GILLBUS_PASSWORD,
|
21
|
+
locale: :ru
|
22
|
+
)
|
23
|
+
|
24
|
+
# getCities
|
25
|
+
|
26
|
+
cities = g.get_cities.cities
|
27
|
+
|
28
|
+
kiiv_id = cities.find {|c| c.name == "Киев" }.id
|
29
|
+
lviv_id = cities.find {|c| c.name == "Львов" }.id
|
30
|
+
|
31
|
+
|
32
|
+
# searchTrips
|
33
|
+
|
34
|
+
search_date = Date.today + 7
|
35
|
+
trips = g.search_trips(
|
36
|
+
start_city_id: kiiv_id,
|
37
|
+
end_city_id: lviv_id,
|
38
|
+
start_date_search: search_date,
|
39
|
+
ticket_count: 2,
|
40
|
+
selected_modes: 1,
|
41
|
+
).trips
|
42
|
+
|
43
|
+
trip_id = trips.find { |trip| trip.reservation_enabled == true }.id
|
44
|
+
|
45
|
+
# lockSeats
|
46
|
+
|
47
|
+
tl = g.lock_seats(
|
48
|
+
trip_id: trip_id,
|
49
|
+
).time_limit
|
50
|
+
|
51
|
+
# ticketsBooking
|
52
|
+
order_id = SecureRandom.uuid
|
53
|
+
|
54
|
+
puts "making order: #{order_id}"
|
55
|
+
passengers = [
|
56
|
+
{ first_name: 'Иван', last_name: 'Иванов' },
|
57
|
+
{ first_name: 'Петр', last_name: 'Петров' }
|
58
|
+
]
|
59
|
+
|
60
|
+
rt = g.reserve_tickets(
|
61
|
+
order_id: order_id,
|
62
|
+
mail_address: 'ivan@mail.ru',
|
63
|
+
note: 'test',
|
64
|
+
passengers: passengers
|
65
|
+
)
|
66
|
+
ticket_numbers = rt.tickets.map(&:ticket_number)
|
67
|
+
|
68
|
+
# relogging again
|
69
|
+
|
70
|
+
g = Gillbus.new(driver: driver).login(password: GILLBUS_PASSWORD, locale: :ru)
|
71
|
+
|
72
|
+
# buyBooking
|
73
|
+
response = g.buy_booking(
|
74
|
+
ticket_count: 2,
|
75
|
+
ticket_numbers: ticket_numbers,
|
76
|
+
order_ids: [order_id, order_id]
|
77
|
+
)
|
78
|
+
p "confirmation: " + response.ticket.confirmation.inspect
|
79
|
+
p "ticket_numbers: " + response.ticket.position_numbers.inspect
|
80
|
+
|
81
|
+
# getOrderTicket
|
82
|
+
ot = g.get_order_ticket order_id: order_id, base64: true
|
83
|
+
|
84
|
+
filename = order_id + ".pdf"
|
85
|
+
puts "saving " + filename
|
86
|
+
File.open filename, 'wb' do |f|
|
87
|
+
f << ot.ticket
|
88
|
+
end
|