Изменения

Перейти к навигации Перейти к поиску

Агентский API Оплата

19 452 байта добавлено, 15:52, 5 декабря 2018
м
Возможные ошибки в результате выполнения запроса.
[[Категория:Интеграция]]
[[Категория:Агентский API]]
== Подключение ==
Это сервис внутри Nemo, который предназначен для выполнения различных операций, относящихся к оплате заказов.
Для подключения к данной веб-службе необходимо открыть доступ нужному пользователю. Это можно сделать в разделе '''«Администрирование»''' ⇨ '''«Веб-служба. Авторизация»'''«Настройки системы» → «Интеграция» → «Nemo 1После добавления пользователя, ему будут присвоены Номер 0 (ClientIdSOAP API) и API ключ клиента, которые нужно использовать для подключения.  == Фиксация оплаты внешним запросом == Сервис предназначен для приема информации о получении оплаты и простановки статуса '''«Оплачено»''' для определенного заказа. Сервис вызывается следующим образом: http://CLIENT_DOMAIN/index»<!--{{Menu|Настройки системы|Интеграция|Nemo 1.php?go=payment/bill  '''Подпись запроса''' Подпись sig сверяется c md50 ($booking_id.$secretSOAP API$booking_id }}- Id заказа в системе Nemo, $secret - значение настройки в разделе '''«Администрирование»''' ⇨ '''«Настройки агентства»''' ⇨ '''''«Ключ безопасности для сервиса выставления оплаты и получения XML выгрузки»''''' '''Пример:''' <pre>Если booking_id: 263330ключ безопасности: 12345 То sig=md5(26333012345) = a439a4492131f4b866ed1a17d018d3a6</pre> Для фиксации оплаты получается такая ссылка:http://CLIENT_DOMAIN/index.php?go=payment/bill&booking_id=263330&sig=a439a4492131f4b866ed1a17d018d3a6 Дополнительная информация в статье [[Интеграция]]
После добавления пользователя ему будут присвоены Номер (ClientId) и API ключ клиента, которые нужно использовать для подключения.
== Получение списка доступных способов оплаты ==
 
WSDL находится по адресу: http://CLIENT_DOMAIN/wsdev/wsdl.php?version=1.0&for=PaymentInitialization
На данный момент метод доступен для платежных шлюзов Юнителлер и Рапида.
Для получения результата необходим параметр «OrderId» — Id ID забронированного заказа, который необходимо оплатить.
Данный запрос позволяет получить список платёжных шлюзов, через которые есть возможность оплатить указанный заказ.
* дополнительную наценку, которая добавляется к заказу при проведении оплаты через данный шлюз
* URL, перенаправляющий пользователя непосредственно на страницу оплаты через данный платёжный шлюз
* в случае отправки запроса с мобильной платформы может дополнительно возвращается возвращаться URL, на который происходит перенаправление пользователя для оплаты
=== Общий формат запроса / ответа ===
<div class="toccolours mw-collapsible mw-collapsed" style="width:1000px">
<Source>
<ClientId>?</ClientId>
<!--ClientId — ID клиента в системе Nemo. Можно посмотреть/добавить в разделе "Администрирование" - "Веб-служба«Настройки системы» → «Интеграция» → «Nemo 1. Авторизация"0 (SOAP API)».-->
<APIKey>?</APIKey>
<!--APIKey — секретный ключ доступа к API Nemo. Можно посмотреть/добавить в разделе "Администрирование" - "Веб-служба«Настройки системы» → «Интеграция» → «Nemo 1. Авторизация"0 (SOAP API)».-->
<Language>?</Language>
<!--Language — язык, например: RU-->
</Gateway>
</Gateways>
<Error>
<NewPrice/>
<Message>Сообщение об ошибке</Message>
</Error>
</Response>
</ResponseBin>
</div>
=== Примеры использования ===
<div class="toccolours mw-collapsible mw-collapsed" style="width:1000px">
</div>
</div>
 
 
<div class="toccolours mw-collapsible mw-collapsed" style="width:1000px">
 
==== Ответ с ошибкой====
<div class="mw-collapsible-content">
<ResponseBin>
<Error>
<NewPrice/> <Message>Unknown order status: Problematic</Message>
</Error>
</ResponseBin>
</div>
</div>
 
 
 
'''Примечание:''' если параметр RedirectUrl в ответе отсутствует, для инициализации оплаты необходимо использовать метод SelectPayment.
Запрос позволяет выбрать конкретный способ оплаты и получить платежный код для оплаты заказа, таймлимит на оплату и описание, заданное в настройках ПШ Рапида (содержимое поля "Сообщение пользователю").
=== Общий формат запроса / ответа ===
<div class="toccolours mw-collapsible mw-collapsed" style="width:1000px">
<Request>
<OrderId>?</OrderId>
<!--OrderId — Id ID забронированного заказа в системе Nemo{{NameSystem}}. Обязательный параметр-->
<PaymentMethodId>?</PaymentMethodId>
<!--PaymentMethodId - ID данного способа оплаты, приходит в ответе на запрос PaymentInitialization response. Обязательный параметр-->
</PaymentParameter>
</PaymentParameters>
<Error>
<NewPrice/>
<Message>Сообщение об ошибке</Message>
</Error>
</Response>
</ResponseBin>
</div>
=== Примеры использования ===
<div class="toccolours mw-collapsible mw-collapsed" style="width:1000px">
</div>
</div>
<div class="toccolours mw-collapsible mw-collapsed" style="width:1000px">
==== Ответ с ошибкой====
<div class="mw-collapsible-content">
<syntaxhighlight lang="xml" line enclose="div" style="font-size:9pt;background: #F9F9F9; border: 1px dashed #2F6FAB; padding: 10px 5px; margin: 10px 0;">
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://release.mlsd.ru/wsdev/?version%3D1.0%26for%3DSelectPayment">
<SOAP-ENV:Body>
<ns1:SelectPaymentResponse>
<ResponseBin>
<Error>
<NewPrice/>
<Message>Unknown order status: Problematic</Message>
</Error>
</ResponseBin>
</ns1:SelectPaymentResponse>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
</syntaxhighlight>
</div>
</div>
 
==Фиксации оплаты через Агентский АПИ==
 
Сервис предназначен для фиксации оплаты в заказе. Фиксация оплаты доступна, если IP-адрес пользователя совпадает с IP-адресом, указанным в настройке '''Допустимые IP-адреса для выписки без оплаты или фиксации оплаты''' (раздел '''Настройки системы → Интеграция → Nemo 1.0 (SOAP API)'''). Если IP-адрес не указан или не совпадает, произойдет блокировка оплаты.
Сервис вызывается следующим образом: http://CLIENT_DOMAIN/nemoflights/wsdl.php?for=PayOrder
 
===Общий формат запроса / ответа===
 
В запросе необходимо указать:
* номер заказа в системе Nemo, по которому производится оплата,
* название платежного шлюза - ''Deposit'' или номер ПШ в системе Nemo.
Доступ к оплате имеет только пользователь, у которого есть на это права, а именно:
* Пользователь должен иметь доступ к указанной в запросе платежной системе
* IP адрес пользователя должен соответствовать адресу, указанному в настройке Допустимые ip-адреса для выписки без оплаты или фиксации оплаты
API пользователи, относящиеся к компаниям или субагентствам, не могут выполять выписку до проведения оплаты
 
<div class="toccolours mw-collapsible mw-collapsed" style="width:1000px">
==== Запрос ====
<div class="mw-collapsible-content">
<syntaxhighlight lang="xml" line enclose="div" style="font-size:9pt;background: #F9F9F9; border: 1px dashed #2F6FAB; padding: 10px 5px; margin: 10px 0;">
 
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ver="http://nemojulia/nemoflights/?version%3D1.0%26for%3DPayOrder">
<soapenv:Header/>
<soapenv:Body>
<ver:PayOrder>
<RequestBin>
<Request>
<PayOrder>
<BookID>?</BookID>
<!--BookID — Id забронированного заказа в системе Nemo-->
<PaymentGateway>?</PaymentGateway>
<!--PaymentGateway — Либо название платежного шлюза, например: Deposit, либо идентификатор ПШ в системе Nemo, например: 1880 -->
</PayOrder>
</Request>
<Source>
<ClientId>?</ClientId>
<!--ClientId — ID клиента в системе Nemo. Можно посмотреть/добавить в разделе «Настройки системы» → «Интеграция» → «Nemo 1.0 (SOAP API)».-->
<APIKey>?</APIKey>
<!--APIKey — секретный ключ доступа к API Nemo. Можно посмотреть/добавить в разделе «Настройки системы» → «Интеграция» → «Nemo 1.0 (SOAP API)».-->
<Language>?</Language>
<!--Language — язык, например: RU-->
<Currency>?</Currency>
<!-- Currency — валюта, например: RUB, EUR-->
<ShowNames>?</ShowNames>
<!-- ShowNames — отображение названий аэропортов, авиакомпаний и воздушных судов: true - отображать, false - не отображать. Возвращает значение на том языке, который был указан в запросе. Для RU - русский вариант, для UKR, EN, ES - латинский вариант. Опциональный элемент. -->
<EndUserData>
<!--Блок с данными о конечном пользователе, необязательный, но необходим при при использовании запросов поиска и бронирования для поставщика TravelFusion-->
<EndUserIP>?</EndUserIP>
<!--IP адрес пользователя-->
<EndUserBrowserAgent>?</EndUserBrowserAgent>
<!--Браузер пользователя-->
<RequestOrigin>?</RequestOrigin>
<!--Страна и домен, с которого пользователь совершает поиск/бронирование-->
</EndUserData>
</Source>
</RequestBin>
</ver:PayOrder>
</soapenv:Body>
</soapenv:Envelope>
</syntaxhighlight>
</div>
</div>
 
<div class="toccolours mw-collapsible mw-collapsed" style="width:1000px">
 
==== Ответ ====
<div class="mw-collapsible-content">
<syntaxhighlight lang="xml" line enclose="div" style="font-size:9pt;background: #F9F9F9; border: 1px dashed #2F6FAB; padding: 10px 5px; margin: 10px 0;">
 
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://CLIENT_DOMAIN/nemoflights/?version=1.0&for=PayOrder" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<SOAP-ENV:Body>
<ns1:PayOrderResponse>
<ResponseBin>
<Response>
<PayOrder ID="" Status="?" Code="?">
<!--ID — Id брони в системе nemo.travel, целое число, обязательный-->
<!--Status — индикатор состояния брони, возможные значения:
booked — забронировано,
canceled — бронь отменена,
ticket — выписана
UNDEFINED — статус не определён-->
<!--Code — код брони в системе поставщика-->
<QueryPlace xsi:nil="true"/>
<!--QueryPlace — положение брони в очереди, Number — номер брони в очереди-->
<Flight FlightId="?">
<!--FlightId — Id перелёта в системе nemo.travel-->
<WebService>?</WebService>
<!--WebService — поставщик перелёта-->
<ValCompany>?</ValCompany>
<!--ValCompany — код авиакомпании, являющейся валидирующим перевозчиком, IATA-->
<URL>?</URL>
<!--URL — ссылка на бронирование конкретного перелета-->
<Segments>
<Segment SegNum="?" SegGroupNum="?">
<!--SegNum — номер сегмента в перелёте-->
<!--SegGroupNum – номер плеча перелёта-->
<SupplierCode>?</SupplierCode>
<!--SupplierCode – номер заказа в системе АК-->
<DepAirp CodeType="?" Name="?">?</DepAirp>
<!--DepAirp — аэропорт отправления, например: MOW — любой аэропорт в г.Москва
или SVO — Шереметьево-->
<DepTerminal>?</DepTerminal>
<!--DepTerminal — терминал пункта отправления, если пустое значение,
то в аэропорту всего 1 терминал-->
<ArrAirp CodeType="?" Name="?">?</ArrAirp>
<!--ArrAirp — аэропорт прибытия-->
<ArrTerminal xsi:nil="true"/>
<!--ArrTerminal — терминал пункта прибытия, если пустое значение,
то в аэропорту всего 1 терминал-->
<OpAirline>?</OpAirline>
<!--OpAirline — авиакомпания перевозчик, например: SU — Аэрофлот-->
<OpAirlineName>?</OpAirlineName>
<!--OpAirlineName - авиакомпания перевозчик, например: SU — Аэрофлот-->
<OpAirlineLogo>?</OpAirlineLogo>
<!--OpAirlineLogo - полное наименование АК на кириллице-->
<MarkAirline>?</MarkAirline>
<!--MarkAirline — авиакомпания, продающая перелёт-->
<MarkAirlineName>?</MarkAirlineName>
<!--MarkAirline — авиакомпания, продающая перелёт-->
<MarkAirlineLogo>?</MarkAirlineLogo>
<!--MarkAirlineName - полное наименование АК на кириллице-->
<FlightNumber>?</FlightNumber>
<!--FlightNumber — номер рейса-->
<AircraftName>?</AircraftName>
<!--AircraftName — наименование воздушного судна-->
<AircraftType>?</AircraftType>
<!--AircraftType — тип воздушного судна, код-->
<DepDateTime>?</DepDateTime>
<!--DepDateTime — дата и время отправления, формат ГГГГ-MM-ДДTЧЧ:ММ:СС-->
<ArrDateTime>?</ArrDateTime>
<!--ArrDateTime — дата и время прибытия, формат ГГГГ-MM-ДДTЧЧ:ММ:СС-->
<StopNum>?</StopNum>
<!--StopNum — количество остановок-->
<StopPoints/>
<BookingCodes>
<BookingCode ClassType="?">
<!--ClassType — класс перелета, например: economy-->
<BookingCode>?</BookingCode>
<!--BookingCode — код класса бронирования, у разных авиакомпаний один и тот же класс
может записываться разными литерами, например: L-->
</BookingCode>
</BookingCodes>
<FlightTime>?</FlightTime>
<!--FlightTime — время перелёта в минутах-->
<RemainingSeats xsi:nil="true"/>
<TimeZone Departure="?" Arrival="?"/>
<!--Departure временная зона аэропорта отправления-->
<!--Arrival — временная зона аэропорта прибытия-->
<ETicket>?</ETicket>
<!--ETicket — признак электронного билета, значения: true / false-->
<isCharter>?</isCharter>
<!--isCharter — признак чартерного перелета, значения: true / false-->
<BaggageAllowances>
<!--BaggageAllowances — информация о багаже-->
<BaggageAllowance>
<PassengerType>?</PassengerType>
<!--PassengerType — тип пассажира, соответстует типу тарифа в PricingInfo -->
<Value>?</Value>
<!--Value — количество-->
<Measurement>?</Measurement>
<!--Measurement — мера измерения, может принимать значения: kg — килограмм, pc — багажное место, lb — фунт-->
</BaggageAllowance>
</BaggageAllowances>
</Segment>
</Segments>
<PricingInfo Refundable="?">
<!--Refundable — возвратный/невозвратный, true/false. Если пустое, то не известно-->
<PassengerFare Type="?" Quantity="?">
<!--Type — тип тарифа-->
<!--Quantity — количество пассажиров данного типа-->
<TravellerRef>
<Ref>?</Ref>
<!--Ref — Номер пассажира-->
</TravellerRef>
<BaseFare Currency="?" Amount="?"/>
<!--BaseFare — базовая стоимость, в базовой валюте. Currency — код валюты, Amount — значение цены-->
<EquiveFare Currency="?" Amount="?"/>
<!--EquiveFare — базовая стоимость, в эквивалентной валюте(валюте продажи).
Currency — код валюты, Amount — значение цены-->
<TotalFare Currency="?" Amount="?"/>
<!--TotalFare — суммарная стоимость, в эквивалентной валюте.
Currency — код валюты, Amount — значение цены-->
<Taxes>
<Tax CurCode="?" TaxCode="?" Amount="?"/>
<!--CurCode — код валюты, TaxCode — код таксы, Amount — сумма таксы-->
</Taxes>
<Tariffs>
<Tariff Code="?" SegNum="?">
<!--Code — код тарифа, SegNum — номер сегмента, к которому применён тариф-->
<FareFamilies xsi:nil="true"/>
</Tariff>
</Tariffs>
<FareCalc>?</FareCalc>
<!--FareCalc — строка расчёта цены-->
<LastTicketDateTime>?</LastTicketDateTime>
<!--LastTicketDateTime — дата и время таймлимита по выписке в формате ГГГГ-MM-ДДTЧЧ:ММ:СС-->
</PassengerFare>
</PricingInfo>
<Commission/>
<Charges Currency="?">?</Charges>
<!--Charges — сборы, Currency — код валюты-->
<TotalPrice Currency="?">?</TotalPrice>
<!--TotalPrice — итоговая цена, Currency — код валюты-->
</Flight>
<Agency/>
<ItinReceipts Encoding="?" Format="?">
<!--ItinReceipts — маршрут квитанция, Encoding — кодировка, Format — формат-->
<FareStored xsi:nil="true"/>
<PaymentTransactions>
<Transaction>
<Id>?</Id>
<!--Id — номер транзакции в Немо-->
<Status>?</Status>
<!--Status — статус транзакции-->
<GatewayName>?</GatewayName>
<!--GatewayName — название платежного шлюза-->
<MoneyPaid Currency="?">?</MoneyPaid>
<!--MoneyPaid — сумма оплаты-->
<!--Currency — валюта-->
<PaymentDateTime>?</PaymentDateTime>
<!--PaymentDateTime — дата и время оплаты-->
<CreateDateTime>?</CreateDateTime>
<!--CreateDateTime — дата и время создания платежной транзакции-->
<Description/>
</Transaction>
</PaymentTransactions>
<PaymentStatus>?</PaymentStatus>
<!--PaymentStatus — статус оплаты:
not_paid — не оплачено
partly_paid — оплачено, частично
fully_paid — оплачено, полностью-->
<Travellers/>
<AutoCancelDate>?</AutoCancelDate>
<!--AutoCancelDate — дата и время таймлимита автоаннуляции в формате ГГГГ-MM-ДДTЧЧ:ММ:СС определяемые по настройкам агентства-->
<TimeLimits>
<TicketingTimeLimit>?</TicketingTimeLimit>
<!--TicketingTimeLimit — Таймлимит на выписку в формате ГГГГ-MM-ДДTЧЧ:ММ:СС-->
<PriceTimeLimit>?</PriceTimeLimit>
<!--PriceTimeLimit — Таймлимит цены из ГРС в формате ГГГГ-MM-ДДTЧЧ:ММ:СС-->
<AdvancedPurchaseTimeLimit>?</AdvancedPurchaseTimeLimit>
<!--AdvancedPurchaseTimeLimit — Таймлимит цены из тарифных правил в формате ГГГГ-MM-ДДTЧЧ:ММ:СС-->
<AgencyTimeLimit>?</AgencyTimeLimit>
<!--AgencyTimeLimit - Таймлимит по настройкам в формате ГГГГ-MM-ДДTЧЧ:ММ:СС-->
</TimeLimits>
</PayOrder>
</Response>
</ResponseBin>
</ns1:PayOrderResponse>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
</syntaxhighlight>
</div>
</div>
===Возможные ошибки в результате выполнения запроса.===
При выполнения запроса возможны следующие ошибки: * ''Deposit gateway is not available for this order'' - оплата проводится под пользователем, не имеющим на это прав.* ''You have not enough money to pay'' - недостаточно средств на депозитном счету для оплаты. При получении такой ошибки отправляется уведомление на почтовый адрес в профиле компании, указанный в настройке ''Адрес электронной почты''. * ''Price to pay(X) is greater than in request'' - стоимость к оплате выше чем указана в запросе.* ''Internal Error: Invalid BookID'' - не указан id заказа.* ''Internal Error: Object not found'' - не найден заказ с указанным id.* ''Internal Error: Invalid gateway name'' - не указан id платежного шлюза или его название.* ''Gateway XXX is not available for this order'' - платежный шлюз недоступен для оплаты. == См. также Запрет на выписку неоплаченных заказов по АПИ для субагента== Субагентам выписка по АПИ доступна только в том случае, если заказ ''имеет статус оплаты''. В противном случае выписка блокируется.
*[[Агентский АПИ]]Выписка заказов, ''не имеющих статуса оплаты'', доступна только менеджеру корневого агентства. Для успешной операции IP-адрес менеджера должен совпадать с IP-адресом параметра '''Допустимые IP-адреса для выписки без оплаты или фиксации оплаты''' в разделе '''Настройки системы → Интеграция → Nemo 1.0 (SOAP API)'''.
== См. также ==* [[Агентский API Авиабилеты]]*[[Agency API. Payments]]
1382
правки

Навигация

'