bronevik / hotels-connector
Bronevik 酒店预订客户端库
Requires
- php: >=5.6
- ext-soap: *
Requires (Dev)
- dev-master
- v5.2.0
- v5.1.3
- v5.1.2
- v5.1.1
- v5.1.0
- v5.0.4
- 5.0.3
- v5.0.2
- v5.0.1
- v5.0.0
- 2.6.0
- v2.5.0
- v2.4.3
- v2.4.2
- v2.4.1
- v2.4.0
- v2.3.1
- v2.3.0
- v2.2.1
- v2.2.0
- v2.1.0
- v2.0.1
- dev-version-2.5.x
- dev-update-to-2.4.0-version
- dev-version-5.0.x
- dev-version-5.1.x
- dev-version-5.x.x
- dev-version-2.2.x
- dev-version-2.3.x
- dev-connector-unit-tests
This package is auto-updated.
Last update: 2024-09-17 07:00:53 UTC
README
版本控制
从 API 2.5.0 版本的连接器开始,版本控制发生了变化。对于 2.5.0 之前的版本,连接器的版本与 API 版本相对应,现在连接器有自己的标签:对于 2.5.0 API 版本,发布了 5.0.0 版本的连接器
安装
要求
PHP 5.6+
ext-soap
通过 Composer
要使用 Composer 安装,需要执行以下命令
composer require bronevik/hotels-connector
不使用 Composer
<?php spl_autoload_register(function ($class) { $file = 'ПУТЬ_К_ФАЙЛАМ_КОННЕКТОРА' . '/src/' . strtr($class, ['Bronevik/HotelsConnector/' => '', '\\' => '/']) . '.php'; if (is_readable($file)) { require_once $file; } });
准备
初始化连接器
<?php $connector = new Bronevik\HotelsConnector( Bronevik\HotelsConnector\Enum\Endpoints::DEVELOPMENT, Bronevik\HotelsConnector\Enum\Endpoints::SECURE_DEVELOPMENT, true ); $connector->setCredentials('login', 'password', 'privateKey'); $connector->setLanguage(Bronevik\HotelsConnector\Enum\Languages::RUSSIAN);
连接器构造函数接收 SOAP 服务器端点 endpoint
和标志 debugMode
。
endpoint
可能有两个值
\Bronevik\HotelsConnector\Enum\Endpoints::DEVELOPMENT
- 用于开发,请求发送到测试服务器。\Bronevik\HotelsConnector\Enum\Endpoints::PRODUCTION
- 用于生产。
secureEndpoint
可能有两个值
\Bronevik\HotelsConnector\Enum\Endpoints::SECURE_DEVELOPMENT
- 用于开发,请求发送到测试服务器。\Bronevik\HotelsConnector\Enum\Endpoints::SECURE_PRODUCTION
- 用于生产。
将 debugMode
设置为 true
的标志允许使用以下方法
$connector->getLastResponse()
以获取服务器最后响应的内容。$connector->getLastResponseHeaders()
以获取服务器最后响应的 HTTP 头部。$connector->getLastRequest()
以获取服务器最后请求的内容。$connector->getLastRequestHeaders()
以获取服务器最后请求的 HTTP 头部。
在 setCredentials()
方法中传递
- 您的 bronevik.com 账户登录名。
- 您的 bronevik.com 账户密码
- 客户端密钥。仅在签订使用服务协议后提供。
setLanguage()
方法只接受 \Bronevik\HotelsConnector\Enum\Languages::RUSSIAN
或 \Bronevik\HotelsConnector\Enum\Languages::ENGLISH
。
检查连接
传递给 ping()
方法的字符串将被服务器回传。
<?php echo $connector->ping('Привет, Броневичок!'); // Привет, Броневичок!
关于使用 SOAP 服务器的文档(不使用此连接器)
PDF 格式的文档: https://hotels-api.bronevik.com/v2.5.0/api.pdf
应当注意,在调用 SearchHotelOffersRequest
方法时,参数 currency
是必填的,目前只有一个可能的值:rub
。如果没有填写此参数,服务将返回错误消息。
关于客户端和使用示例的文档
手册
获取国家列表
请求
<?php /** @var Bronevik\HotelsConnector\Element\Countries $countries */ $countries = $connector->getCountries();
解析结果
<?php /** @var Bronevik\HotelsConnector\Element\Countries $countries */ foreach ($countries->getCountry() as $country) { $country->getId(); // 1 $country->getName(); // Россия /** @var Bronevik\HotelsConnector\Element\CountryCodes $codes */ $codes = $country->getCodes(); $codes->getAlpha2(); // RU $codes->getAlpha3(); // RUS }
获取城市列表
获取国家下的城市列表
<?php /** @var Bronevik\HotelsConnector\Element\Cities $cities */ $cities = $connector->getCitiesByCountryId(1);
获取城市下的城市列表
<?php /** @var Bronevik\HotelsConnector\Element\Cities $cities */ $cities = $connector->getCitiesByCityIds([1]);
解析结果
<?php /** @var Bronevik\HotelsConnector\Element\Cities $cities */ foreach ($cities->city as $city) { $city->getId(); // 539 $city->getName(); // Абаза $city->getRegionId(); // 102 $city->getRegionName(); // Хакасия $city->getLatitude(); // 52.6439447 $city->getLongitude(); // 90.1039492 $city->getCountryId(); // 1 $city->getCountryName() // Россия }
获取设施列表
请求
<?php /** @var Bronevik\HotelsConnector\Element\Amenities $amenities */ $amenities = $connector->getAmenities();
解析结果
<?php /** @var Bronevik\HotelsConnector\Element\Amenities $amenities */ foreach ($amenities->amenity as $amenity) { $amenity->getId(); // 5 $amenity->getName(); // Трансфер $amenity->getGroupName(); // Общие услуги отеля }
获取餐饮列表
<?php /** @var Bronevik\HotelsConnector\Element\Meals $meals */ $meals = $connector->getMeals();
解析结果
<?php /** @var Bronevik\HotelsConnector\Element\Meals $meals */ foreach ($meals->meal as $meal) { $meal->getId(); // 2 $meal->getName(); // Завтрак континентальный }
搜索酒店报价
简单查询
<?php $currency = \Bronevik\HotelsConnector\Enum\CurrencyCodes::RUB /** @var Bronevik\HotelsConnector\Element\Hotels $hotelsWithOffers */ $hotelsWithOffers = $connector->searchHotelOffers( '2016-01-22', // дата заезда '2016-01-24', // дата выезда, $currency, // Валюта 1 // Id города );
带筛选条件的查询
<?php // Массив фильтров $criteria = []; // Фильтр предложений по категории отеля (количеству звёзд) $criterion = new Bronevik\HotelsConnector\Element\SearchOfferCriterionHotelCategory(); $criterion->addCategory(4); $criterion->addCategory(5); $criteria[] = $criterion; // Фильтр предложений по количеству гостей $criterion = new Bronevik\HotelsConnector\Element\SearchOfferCriterionNumberOfGuests(); $criterion->setAdults(2); $criteria[] = $criterion; // Фильтр предложений по количеству гостей с детьми $criterion = new Bronevik\HotelsConnector\Element\SearchOfferCriterionNumberOfGuests(); $criterion->setAdults(1); // Количество взрослых обязательно $child = new HotelsConnector\Element\Child(); $child->setAge(5); $child->setCount(1); $criterion->addChild($child); $criteria[] = $criterion; // Фильтр предложений по возможности моментального подтверждения бронирования (онлайн) $criterion = new Bronevik\HotelsConnector\Element\SearchOfferCriterionOnlyOnline(); $criteria[] = $criterion; // фильтр по названию отеля $criterion = new Bronevik\HotelsConnector\Element\SearchOfferCriterionHotelName(); $criterion->setName('Название отеля'); $criteria[] = $criterion; // фильтр предложений по включенному завтраку $criterion = new Bronevik\HotelsConnector\Element\SearchOfferCriterionBreakfastIncluded(); $criteria[] = $criterion; // фильтр предложений по способу оплаты $criterion = new Bronevik\HotelsConnector\Element\SearchOfferCriterionPaymentRecipient(); // в качестве paymentRecipient можно использовать только константы \Bronevik\HotelsConnector\Enum\PaymentRecipients $criterion->addPaymentRecipient(Bronevik\HotelsConnector\Enum\PaymentRecipients::HOTEL); // оплата в отеле $criterion->addPaymentRecipient(Bronevik\HotelsConnector\Enum\PaymentRecipients::AGENCY); // безналичный расчёт $criteria[] = $criterion; $currency = \Bronevik\HotelsConnector\Enum\CurrencyCodes::RUB /** @var Bronevik\HotelsConnector\Element\Hotels $hotelsWithOffers */ $hotelsWithOffers = $connector->searchHotelOffers( '2016-01-22', // дата заезда '2016-01-24', // дата выезда $currency, // Валюта 1, // Id города $criteria // массив фильтров );
特定酒店的报价查询
<?php /** * Фильтр предложений по конкретным отелям (по ids отелей) * Можно указать до 100 отелей * @var int[] */ $hotelIds = [1, 2, 3]; $currency = \Bronevik\HotelsConnector\Enum\CurrencyCodes::RUB /** @var Bronevik\HotelsConnector\Element\Hotels $hotelsWithOffers */ $hotelsWithOffers = $connector->searchHotelOffers( '2016-01-22', // дата заезда '2016-01-24', // дата выезда $currency, // Валюта null, // Id города [], // массив фильтров $hotelIds // ids отелей );
基于地理坐标和半径的搜索
<?php $latitude = 30.1234; // широта $longitude = 30.1234; // долгота $radius = 12.1; // радиус в км (от 0 до 30 км, точность до 1 десятой) $geolocation = new Bronevik\HotelsConnector\Element\GeoLocation(); $geolocation->latitude = $latitude; $geolocation->longitude = $longitude; $geolocation->radius = $radius; $currency = \Bronevik\HotelsConnector\Enum\CurrencyCodes::RUB /** @var Bronevik\HotelsConnector\Element\Hotels $hotelsWithOffers */ $hotelsWithOffers = $connector->searchHotelOffers( '2016-01-22', // дата заезда '2016-01-24', // дата выезда $currency, // Валюта null, // Id города [], // массив фильтров [], // ids отелей [], // skipElements $geolocation );
管理响应内容
您可以在搜索中跳过一些元素
<?php $skipElements = [ Bronevik\HotelsConnector\Enum\SkipElementTypes::DAILY_PRICES, // ежедневные цены Bronevik\HotelsConnector\Enum\SkipElementTypes::DESCRIPTION_DETAILS, // описание отеля ]; // Все доступные для пропуска элементы для SearchHotelOffers - \Bronevik\HotelsConnector\Enum\SkipElementTypes::$availableSkipElementsForSearchHotelOffers $currency = \Bronevik\HotelsConnector\Enum\CurrencyCodes::RUB; /** @var Bronevik\HotelsConnector\Element\Hotels $hotelsWithOffers */ $hotelsWithOffers = $connector->searchHotelOffers( '2016-01-22', // дата заезда '2016-01-24', // дата выезда $currency, // Валюта 1, // Id города [], // массив фильтров [], // ids отелей $skipElements // элементы для пропуска );
酒店优惠
<?php /** @var Bronevik\HotelsConnector\Element\Hotels $hotelsWithOffers */ foreach ($hotelsWithOffers->getHotel() as $hotelWithOffers) { $hotelWithOffers->getId(); // Id отеля (например, 716) $hotelWithOffers->getCityId(); // Id города (например, 1) $hotelWithOffers->getCityName(); // Название города (например, Екатеринбург) $hotelWithOffers->getName(); // Название отеля (например, Октябрьская) $hotelWithOffers->getAddress(); // Адрес отеля (например, ул. Софьи Ковалевской, 17) $hotelWithOffers->getCategory(); // Количество звезд в отеле (например, 4) $hotelWithOffers->getCheckinTime(); // Расчётный час заезда (например, 12:00:00) $hotelWithOffers->getCheckoutTime(); // Расчётный час выезда (например, 12:00:00) $hotelWithOffers->getVatApplicable(); // Применим ли к отелю НДС? (например, true) $hotelWithOffers->getVatIncluded(); // Включен ли НДС? (например, true) $hotelWithOffers->getVATPercent(); // Процент НДС (например, 20) $hotelWithOffers->getHasTaxes(); // Наличие в отеле дополнительных сборов (например, false) $hotelWithOffers->getType(); // Тип отеля (например, hotel) $hotelWithOffers->isOnline(); // Работает ли отель онлайн // Информация для гостя $informationForGuest = $hotelWithOffers->getInformationForGuest(); $allowableCheckinTime = $hotelWithOffers->getAllowableCheckinTime(); // Допустимое время заезда. $allowableCheckinTime->getTimeFrom(); // Начальное время. $allowableCheckinTime->getTimeTo(); // Конечное время. $allowableCheckoutTime = $hotelWithOffers->getAllowableCheckoutTime(); // Допустимое время выезда. $allowableCheckoutTime->getTimeFrom(); // Начальное время $allowableCheckoutTime->getTimeTo(); // Конечное время // уведомления для гостя foreach ($informationForGuest->getNotification() as $notification) { $notification->getType(); // тип уведомления $notification->getValue(); // текст уведомления } // Описание отеля /** @var Bronevik\HotelsConnector\Element\DescriptionDetails $descriptionDetails */ /** * Примечание: если в skipElements одним из элементов указать * @see \Bronevik\HotelsConnector\Enum\SkipElementTypes::DESCRIPTION_DETAILS * То $hotelWithOffers->getDescriptionDetails() вернет пустой объект */ $descriptionDetails = $hotelWithOffers->getDescriptionDetails(); $descriptionDetails->getCountryId(); // Id страны (например, 1) $descriptionDetails->getCountryName(); // Название страны (например, Россия) $descriptionDetails->getDistanceToCenter(); // Расстояние до центра в км (например, 1) $descriptionDetails->getLatitude(); // Широта (например, 56.8499105) $descriptionDetails->getLongitude(); // Долгота (например, 60.6525664) $descriptionDetails->getDescription(); // Описание отеля $descriptionDetails->getZipCode(); // Почтовый адрес отеля // Фотографии отеля /** @var Bronevik\HotelsConnector\Element\Image $photo */ foreach ($descriptionDetails->getPhotos()->photo as $photo) { $photo->getGuid(); // 73c7c9b97a36ac0d970990937d842417 $photo->getUrl(); // //dev.bronevik.tech/static/photo/g/250x250a/73c7c9b97a36ac0d970990937d842417 } /** @var Bronevik\HotelsConnector\Element\AvailableAmenity $amenity */ foreach ($descriptionDetails->getAvailableAmenities()->availableAmenity as $amenity) { $amenity->getId(); // 1 $amenity->getIncluded(); // false $amenity->getPrice(); // 125.00 $amenity->getCurrency()// Валюта - RUB } // предложения $offers = $hotelWithOffers->getOffers(); /** @var Bronevik\HotelsConnector\Element\HotelOffer $offer */ foreach ($offers->getOffer() as $offer) { $offer->getCode(); // Код предложения (например, T1I3MTYjI2RvdWJsZSMxMDY0IzIwMTYtMDEtMjIjMjAxNi0wMS0yNCMyLDE=) $offer->getName(); // Название предложения (например, Люкс) $offer->getNonRefundable(); // Является ли предложение невозвратным (например, false) $offer->getCurrency(); // Валюта оплаты (например, RUB) $offer->getImmediateConfirmation(); // Возможно ли немедленное подтверждение (например, true) $offer->getFreeRooms(); // Количество свободных номеров (например, 5) $offer->getRoomId(); // Id номера (например, 24) $offer->getRoomType(); // Тип размещения (например, single) $offer->getIsSharedRoom(); // Является ли номер номером с подселением (например, false) $offer->getIsBlockRoom(); // Является ли номер блочным (например, false) $offer->getPaymentRecipient(); // Способ оплаты (например, \Bronevik\HotelsConnector\Enum\PaymentRecipients::AGENCY) $offer->getDeepLink(); // Элемент для работы метапоисковых систем (например, http://dev.bronevik.tech/ru/hotel/russia/yekaterinburg/oktyabrskaya?sd=2019-06-01&ed=2019-06-02&code=T1I3MTYjOTgxNSNzaW5nbGUjMjQjMjAxOS0wNi0wMSMyMDE5LTA2LTAyIzIjMA==¤cy=RUB&spk=Corteos) $offer->getRoomWithWindow(); // Наличие окна в номере (например, true) $offer->getGuaranteeType(); // Тип гарантии // информация о тарифе /** @var Bronevik\HotelsConnector\Element\RateType $rateType */ $rateType = $offer->getRateType(); $rateType->getRateName(); // Название тарифа $rateType->getRateDescription(); // Описание тарифа /** * Детализация стоимости * * @var Bronevik\HotelsConnector\Element\PriceDetails $priceDetails */ $priceDetails = $offer->getPriceDetails(); $priceDetails->getVatApplicable(); // Применим ли к отелю НДС $clientDetails = $priceDetails->getClient(); // Детализация клиентской стоимости $hotelDetails = $priceDetails->getHotel(); // Детализация отельной стоимости $additionalPrices = $clientDetails->getClientCurrency()->getExtra() // Дополнительные цены $clientDetails->getVatIncluded(); // Включен ли НДС в клиентскую стоимость $clientDetails->getClientCurrency() // Цены в валюте клиента $clientDetails->getCommission(); // Информация о комиссии $clientDetails->getGross(); // Брутто-стоимость $clientDetails->getNet(); // Нетто-стоимость /** * @var Bronevik\HotelsConnector\Element\ClientPriceDetails $clientDetails * getClientCurrency, getGross, getNet, getCommission возвращают объект DetailedPrice, который содержит в себе: */ $clientDetails->getGross()->getCurrency(); // Валюта $clientDetails->getGross()->getPrice(); // Стоимость $clientDetails->getGross()->getVatAmount(); // Сумма ндс $hotelDetails->getVatIncluded(); // Включен ли НДС в отельную стоимость foreach ($additionalPrices as $detailedPrice) { $detailedPrice->getName(); // Наименование цены $detailedPrice->getVatAmount(); // Сумма ндс $detailedPrice->getPrice(); // Стоимость $detailedPrice->getCurrency(); // Валюта } /** @var Bronevik\HotelsConnector\Element\Tax $tax */ // Дополнительные сборы при заселении foreach ($offer->getTaxes()->tax as $tax) { $tax->getCurrency(); // Валюта оплаты $tax->getComment(); // Комментарий $tax->getType(); // Тип сбора $tax->getAmount(); // Величина сбора $tax->getIncluded(); // Включен ли сбор в стоимость предложения } /** @var Bronevik\HotelsConnector\Element\HotelOfferCancellationPolicy $cancellationPolicy */ // политика аннуляции foreach ($offer->getCancellationPolicies() as $cancellationPolicy) { $cancellationPolicy->getPenaltyDateTime(); // Дата наступления штрафа $cancellationPolicy->getPenaltyPriceDetails(); // Детализация цен штрафа /** @var Bronevik\HotelsConnector\Element\ClientPriceDetails $cancellationPriceDetails */ $cancellationPriceDetails = $cancellationPolicy->getPenaltyPriceDetails(); /** @var Bronevik\HotelsConnector\Element\DetailedPrice $commission */ $commission = $cancellationPriceDetails->getCommission(); $commission->getPrice(); // стоимость $commission->getVatAmount(); // сумма НДС $commission->getCurrency(); // валюта /** @var Bronevik\HotelsConnector\Element\DetailedPrice $net */ $net = $cancellationPriceDetails->getNet(); $net->getPrice(); // стоимость $net->getVatAmount(); // сумма НДС $net->getCurrency(); // валюта /** @var Bronevik\HotelsConnector\Element\DetailedPrice $gross */ $gross = $cancellationPriceDetails->getGross(); $gross->getPrice(); // стоимость $gross->getVatAmount(); // сумма НДС $gross->getCurrency(); // валюта $cancellationPriceDetails->getVatIncluded(); // включен ли в стоимость НДС } /** @var Bronevik\HotelsConnector\Element\AvailableMeal $meal */ // питание foreach ($offer->getMeals()->meal as $meal) { $meal->getId(); // Идентификатор услуги питания $meal->getIncluded(); // Включена ли услуга в предложение $meal->getVATPercent(); // Ставка НДС /** @var Bronevik\HotelsConnector\Element\ClientPriceDetails $mealPriceDetails */ $mealPriceDetails = $meal->getPriceDetails(); /** @var Bronevik\HotelsConnector\Element\DetailedPrice $commission */ $commission = $mealPriceDetails->getCommission(); $commission->getPrice(); // стоимость $commission->getVatAmount(); // сумма НДС $commission->getCurrency(); // валюта /** @var Bronevik\HotelsConnector\Element\DetailedPrice $net */ $net = $mealPriceDetails->getNet(); $net->getPrice(); // стоимость $net->getVatAmount(); // сумма НДС $net->getCurrency(); // валюта /** @var Bronevik\HotelsConnector\Element\DetailedPrice $gross */ $gross = $mealPriceDetails->getGross(); $gross->getPrice(); // стоимость $gross->getVatAmount(); // сумма НДС $gross->getCurrency(); // валюта $mealPriceDetails->getVatIncluded(); // включен ли в стоимость НДС } // ежедневные цены /** @var Bronevik\HotelsConnector\Element\DailyPrice $dailyPrice */ /** * Примечание: если в skipElements одним из элементов указать * @see \Bronevik\HotelsConnector\Enum\SkipElementTypes::DAILY_PRICES * То массив $offer->getDailyPrices() будет пустой */ foreach ($offer->getDailyPrices() as $dailyPrice) { $dailyPrice->getDate(); // Дата, на которую рассчитана цена $dailyPrice->getBookingFee(); // Стоимость брони в отеле $dailyPrice->getEarlyArrival(); // Стоимость раннего заезда $dailyPrice->getLateDeparture(); // Стоимость позднего выезда $dailyPrice->getRate(); // Стоимость номера // Стоимость платного питания /** @var Bronevik\HotelsConnector\Element\MealPriceDetails $mealPriceDetails */ foreach ($dailyPrice->getMeals()->meal as $mealPriceDetails) { $mealPriceDetails->getId(); // Идентификатор услуги питания $mealPriceDetails->getCommission(); // Информация о комиссии $mealPriceDetails->getGross(); // Брутто-стоимость $mealPriceDetails->getNet(); // Нетто-стоимость $mealPriceDetails->getVatIncluded(); // Включен ли НДС в клиентскую стоимость $mealPriceDetails->getIncluded(); // Включена ли услуга в предложение } /** * getBookingFee, getEarlyArrival, getLateDeparture, getRate возвращает объект ClientPriceDetails, который описан чуть выше * @see \Bronevik\HotelsConnector\Element\ClientPriceDetails */ } // Правила предоставления предложения /** @var Bronevik\HotelsConnector\Element\OfferPolicies $offerPolicy */ $offerPolicies = $offer->getOfferPolicies(); foreach ($offerPolicies->getPolicy() as $policy) { $policy->getType(); $policy->getValue(); } //Информация о детях if ($offer->getChildrenAccommodation()) { foreach ($offer->getChildrenAccommodation()->getChildren() as $childAccommodation) { $childAccommodation->getAge(); // Возраст $childAccommodation->getCount(); // Количество детей данного возраста $childAccommodation->isIncluded(); // Дети включены в услугу $childAccommodation->getAccommodation(); // Тип размещения в номере } } // размещения кроватей в номере /** @var Bronevik\HotelsConnector\Element\BedSets $bedSets */ $bedSets = $offer->getBedSets(); // Массив вариантов комбинаций кроватей /** @var Bronevik\HotelsConnector\Element\BedSet $bedSet */ foreach ($bedSets->getBedSet() as $bedSet) { // Вариант размещения кроватей /** @var Bronevik\HotelsConnector\Element\Bed $bed */ foreach ($bedSet->getBed() as $bed) { $bed->getType(); // Тип размещения в номере $bed->getAmount(); // Количество кроватей } } } }
获取酒店信息
getHotelInfo()
方法接收酒店标识符数组。
返回与 searchHotelOffers()
方法相同的数据,但没有优惠信息,有酒店房间信息。
<?php /** @var Bronevik\HotelsConnector\Element\HotelWithInfo[] $hotelsWithInfo */ $hotelsWithInfo = $connector->getHotelInfo([716, 901]); //Получить по Id отелей $cityIds = [1, 2, 3]; $hotelsWithInfo = $connector->getHotelInfoByCityIds($cityIds); //Получить по Id городов
响应
<?php /** @var Bronevik\HotelsConnector\Element\HotelWithInfo[] $hotelsWithInfo */ foreach ($hotelsWithInfo as $hotelWithInfo) { // Сертификат, подтверждающий звездность отеля. /** @var Bronevik\HotelsConnector\Element\CategoryCertificate $categoryCertificate */ $categoryCertificate = $hotelWithInfo->getCategoryCertificate(); $categoryCertificate->getNumber(); // Номер сертификата $categoryCertificate->getEndDate(); // Дата истечения сертификата /** @var Bronevik\HotelsConnector\Element\HotelRoom $hotelRoom */ foreach ($hotelWithInfo->getRooms()->room as $hotelRoom) { $hotelRoom->getId(); // Id номера $hotelRoom->getName(); // Название номера $hotelRoom->getDescription(); // Описание номера $hotelRoom->getSize(); // Площадь номера $hotelRoom->getWithWindow(); // Есть ли окно в номере $hotelRoom->getBuildingPart(); // Часть здания, в которой расположен номер $hotelRoom->getBedroomAmount(); // Кол-во комнат в номере // Удобства в номере /** @var Bronevik\HotelsConnector\Element\AvailableAmenity $availableAmenity */ foreach ($hotelRoom->getAvailableAmenities()->availableAmenity as $availableAmenity) { $availableAmenity->getId(); $availableAmenity->getPrice(); $availableAmenity->getIncluded(); $availableAmenity->getCurrency(); } // Фотограции номера /** @var Bronevik\HotelsConnector\Element\Image $photo */ foreach ($hotelRoom->getPhotos()->photo as $photo) { $photo->getUrl(); $photo->getGuid(); } // размещения кроватей в номере /** @var Bronevik\HotelsConnector\Element\BedSets $bedSets */ $bedSets = $hotelRoom->getBedSets(); // Далее аналогично ответу SearchHotelOffers /** @var Bronevik\HotelsConnector\Element\WindowViews $windowViews */ $windowViews = $hotelRoom->getWindowViews(); // Массив видов из окна foreach ($windowViews->getName() as $windowViewName) { // название вида из номера echo $windowViewName; } } }
预订住宿和订单操作
创建订单
预订订单基于 \Bronevik\HotelsConnector\Element\HotelOffer
提供的优惠。对于每个预订的房间,需要创建一个住宿服务对象($accomodation
)。所有服务对象都添加到订单中。
本例中预订了两间房间供四个人使用
<?php // Создание запроса на бронирование номеров $orderRequest = new Bronevik\HotelsConnector\Element\CreateOrderRequest(); $orderRequest->setCurrency(\Bronevik\HotelsConnector\Enum\CurrencyCodes::RUB); $orderRequest->setContactPerson('Григорий'); $orderRequest->setContactEmail('grigoriy@example.com'); $orderRequest->setContactPhone('+79991234567'); $orderRequest->setComment('Гости приедут в районе 18 часов.'); // Создание услуг проживания и привязка их к заказу. $accommodation = new Bronevik\HotelsConnector\Element\ServiceAccommodation; $accommodation->setOfferCode('T1I3MTYjI2RvdWJsZSMxMDY0IzIwMTYtMDEtMjIjMjAxNi0wMS0yNCMyLDE='); $accommodation->setComment('Гостям потребуется высокоскоростное подключение к Интернет.'); $guest = new Bronevik\HotelsConnector\Element\Guest(); $guest->setFirstName('Спанч'); $guest->setLastName('Боб'); $accommodation->guests->add($guest); // Добавление детей $child = new \Bronevik\HotelsConnector\Element\Child(); $child->setAge(3); $child->setCount(2); $accommodation->guests->addChild($child); //Добавление предпочитаемого набора кроватей $bed = new HotelsConnector\Element\Bed(); $bed->setAmount(1); //Установить количество кроватей $bed->setType(HotelsConnector\Enum\BedTypes::DOUBLE); //Установить тип кроватей $preferredBedSet = new HotelsConnector\Element\BedSet(); $preferredBedSet->addBed($bed); $accommodation->setPreferredBedSet($preferredBedSet); $accommodation->addMeals(2); // Добавить питание в услугу $accommodation->addMeals(34); // Если нужно несколько услуг питания $accommodation->setCheckinHour(10); // Установить час заезда $accommodation->setCheckoutHour(8); // Установить час выезда $accommodation->setSellingPrice(1000); // Установить желаемую цену продажи $accommodation->setReferenceId('test'); // Установить номер услуги в системе клиента // также можно добавить доп. поля для создания услуг $serviceExtraField = new Bronevik\HotelsConnector\Element\ServiceExtraField(); $serviceExtraField->setName('name'); $serviceExtraField->setValue('value'); $accommodation->addExtraField($serviceExtraField); $orderRequest->addServices($accommodation); // Нужно создавать по услуге на каждый бронируемый номер. $accommodation = new Bronevik\HotelsConnector\Element\ServiceAccommodation; $accommodation->setOfferCode('T1I3MTYjI2RvdWJsZSMxMDY0IzIwMTYtMDEtMjIjMjAxNi0wMS0yNCMyLDE='); $accommodation->setComment('Не представлять напитки из минибара.'); $guestNikolay = new \Bronevik\HotelsConnector\Element\Guest(); $guestNikolay->setFirstName('Николай'); $guestNikolay->setLastName('Петрович'); $guestEldar = new \Bronevik\HotelsConnector\Element\Guest(); $guestEldar->setFirstName('Эльдар'); $guestEldar->setLastName('Джарахов'); $accommodation->guests->add($guestNikolay); $accommodation->guests->add($guestEldar); $orderRequest->addServices($accommodation); // Отправка заказа /** @var Bronevik\HotelsConnector\Element\Order $order */ $order = $connector->createOrder($orderRequest);
解析结果
<?php /** @var Bronevik\HotelsConnector\Element\Order $order */ $order->getId(); // Id заказа $order->getComment(); // Комментарий к заказу, который был указан при создании $order->getContactPerson(); // Контактное лицо $order->getContactPhone(); // Контактный телефон $order->getContactEmail(); // Контактный email /** @var Bronevik\HotelsConnector\Element\OrderServiceAccommodation $service */ foreach ($order->getServices()->service as $service) { $service->getId(); // Id услуги $service->getDate(); // Дата создания услуги $service->getComment(); // Комментарий к услуге, который был указан при создании $service->getPaymentRecipient(); // Способ оплаты, возможные значения: \Bronevik\HotelsConnector\Enum\PaymentRecipients $service->getIsBlockRoom(); // Блочный ли номер? $service->getIsSharedRoom(); // Является ли номер номером с подселением? $service->getRoomId(); // Id номера $service->getCountryId(); // Id страны $service->getCountryName(); // Название страны $service->getCityId(); // Id города $service->getCityName(); // Название города $service->getHotelId(); // Id отеля $service->getHotelName(); // Название отеля $service->getReferenceId(); // Номер услуги в системе клиента $service->getStatusId(); // Id статуса $service->getStatusName(); // Название статуса $service->getCheckin(); // Час заезда $service->getCheckout(); // Час выезда $service->getNonRefundable(); // Является ли тариф невозвратным? $service->getOfferCode(); // Код предложения, с помощью которого оформлена услуга $service->getOfferName(); // Название предложения $service->getRoomType(); // Тип размещения $service->getVATPercent(); // Ставка НДС $service->getGuaranteeType(); // Тип гарантии $service->getGuests(); // Гости услуги $service->getPaymentTerms() // Условия оплаты // информация о тарифе /** @var Bronevik\HotelsConnector\Element\RateType $rateType */ $rateType = $service->getRateType(); /** * Название тарифа * @see \Bronevik\HotelsConnector\Enum\RateTypeNames */ $rateType->getRateName(); $rateType->getRateDescription(); // Описание тарифа /** @var Bronevik\HotelsConnector\Element\ServiceExtraField $serviceExtraField */ // доп. поля для создания услуг foreach ($service->getExtraField() as $serviceExtraField) { $serviceExtraField->getName(); // Название $serviceExtraField->getValue(); // Значение } // ежедневные цены /** @var Bronevik\HotelsConnector\Element\DailyPrice $dailyPrice */ foreach ($service->getDailyPrices()->dailyPrice as $dailyPrice) { // аналогично dailyPrice в SearchHotelOffers $dailyPrice->getDate(); // Дата, на которую рассчитана цена $dailyPrice->getBookingFee(); // Стоимость брони в отеле $dailyPrice->getEarlyArrival(); // Стоимость раннего заезда $dailyPrice->getLateDeparture(); // Стоимость позднего выезда $dailyPrice->getRate(); // Стоимость номера } // гости foreach ($service->getGuests()->guest as $guest) { /** @var Bronevik\HotelsConnector\Element\Guest $guest */ echo $guest->getLastName() . ' ' . $guest->getFirstName(); } // договор, привязанный к услуге /** @var Bronevik\HotelsConnector\Element\Contract $contract */ $contract = $service->getContract(); $contract->getId(); // Id договора $contract->getNumber(); // Номер договора $contract->getBeginsAt(); // Дата начала действия договора $contract->getLegalEntity(); // Юридическое лицо $service->getPriceDetails(); // аналогично как и для SearchHotelOffers $service->getCancellationPolicies(); // аналогично как и для SearchHotelOffers $service->getMeals(); // аналогично как и для SearchHotelOffers $service->getOfferPolicies(); // аналогично как и для SearchHotelOffers //Информация о детях аналогично как и для SearchHotelOffers if ($service->getChildrenAccommodation()) { foreach ($service->getChildrenAccommodation()->getChildren() as $childAccommodation) { $childAccommodation->getAge(); // Возраст $childAccommodation->getCount(); // Количество детей данного возраста $childAccommodation->isIncluded(); // Дети включены в услугу $childAccommodation->getAccommodation(); // Тип размещения в номере } } // Предпочитаемые кровати if ($service->getPreferredBedSet()) { foreach ($service->getPreferredBedSet()->getBed() as $bed) { $bed->getAmount(); // Количество кроватей $bed->getType(); // Тип размещения } } }
使用银行卡数据创建订单
请求
<?php // Создание запроса на бронирование номеров $orderRequest = new Bronevik\HotelsConnector\Element\CreateOrderWithCardDetailsRequest(); $orderRequest->setCurrency(\Bronevik\HotelsConnector\Enum\CurrencyCodes::RUB) //Валюта // Заполнение данных банковской карты $orderRequest->guestInfo = new Bronevik\HotelsConnector\Element\GuestInfo(); $orderRequest->guestInfo->cardDetails = new Bronevik\HotelsConnector\Element\CardDetails(); $orderRequest->guestInfo->cardDetails->pan = '1234123412341234'; // Номер карты $orderRequest->guestInfo->cardDetails->cardholder = 'IVANOV IVAN'; // Владелец карты $orderRequest->guestInfo->cardDetails->expirationMonth = '01'; // Месяц истечения карты $orderRequest->guestInfo->cardDetails->expirationYear = '20'; // Год истечения карты $orderRequest->guestInfo->cardDetails->CVV = '123'; // CVV/CVC // Заполнение информации о госте $orderRequest->guestInfo->contacts = new Bronevik\HotelsConnector\Element\GuestContacts(); $orderRequest->guestInfo->contacts->email = 'guest@email.com'; // email гостя $orderRequest->guestInfo->contacts->phone = '+79999999999'; // контактный телефон гостя $orderRequest->setContactPerson('Григорий'); $orderRequest->setContactEmail('grigoriy@example.com'); $orderRequest->setContactPhone('+79991234567'); $orderRequest->setComment('Гости приедут в районе 18 часов.'); // Создание услуг проживания и привязка их к заказу. $accommodation = new Bronevik\HotelsConnector\Element\ServiceAccommodation; $accommodation->setOfferCode('T1I3MTYjI2RvdWJsZSMxMDY0IzIwMTYtMDEtMjIjMjAxNi0wMS0yNCMyLDE='); $accommodation->setComment('Гостям потребуется высокоскоростное подключение к Интернет.'); $guest = new Bronevik\HotelsConnector\Element\Guest(); $guest->setFirstName('Спанч'); $guest->setLastName('Боб'); $accommodation->guests->add($guest); // Добавление детей $child = new \Bronevik\HotelsConnector\Element\Child(); $child->setAge(3); $child->setCount(2); $accommodation->guests->addChild($child); $accommodation->addMeals(2); // Добавить питание в услугу $accommodation->addMeals(34); // Если нужно несколько услуг питания $accommodation->setCheckinHour(10); // Установить час заезда $accommodation->setCheckoutHour(8); // Установить час выезда $accommodation->setSellingPrice(1000); // Установить желаемую цену продажи $accommodation->setReferenceId('test'); // Установить номер услуги в системе клиента // также можно добавить доп. поля для создания услуг $serviceExtraField = new Bronevik\HotelsConnector\Element\ServiceExtraField(); $serviceExtraField->setName('name'); $serviceExtraField->setValue('value'); $accommodation->addExtraField($serviceExtraField); $orderRequest->addServices($accommodation); // Нужно создавать по услуге на каждый бронируемый номер. $accommodation = new Bronevik\HotelsConnector\Element\ServiceAccommodation; $accommodation->setOfferCode('T1I3MTYjI2RvdWJsZSMxMDY0IzIwMTYtMDEtMjIjMjAxNi0wMS0yNCMyLDE='); $accommodation->setComment('Не представлять напитки из минибара.'); $guestNikolay = new \Bronevik\HotelsConnector\Element\Guest(); $guestNikolay->setFirstName('Николай'); $guestNikolay->setLastName('Петрович'); $guestEldar = new \Bronevik\HotelsConnector\Element\Guest(); $guestEldar->setFirstName('Эльдар'); $guestEldar->setLastName('Джарахов'); $accommodation->guests->add($guestNikolay); $accommodation->guests->add($guestEldar); $orderRequest->addServices($accommodation); // Отправка заказа /** @var Bronevik\HotelsConnector\Element\Order $order */ $order = $connector->createOrderWithCardDetails($orderRequest);
返回的结果与常规创建订单(CreateOrder)相同。
获取订单信息
getOrder()
方法接收订单 ID。
返回与 createOrder() 方法相同的数据。
<?php /** @var Bronevik\HotelsConnector\Element\Order $order */ $order = $connector->getOrder(349007);
获取订单账单
请求
<?php $orderId = 1; // id Заказа $orderInvoices = $connector->getOrderInvoices($orderId);
解析结果
/** @var Bronevik\HotelsConnector\Element\OrderInvoices $invoice */ $orderInvoices->getId(); // id Заказа $invoices = $orderInvoices->getInvoices(); // Счета заказа /** @var Bronevik\HotelsConnector\Element\Invoice $invoice */ foreach($invoices as $invoice) { $invoice->getInvoiceLink(); // Временная ссылка для скачивания счета $invoiceInfo = $invoice->getInvoiceInfo(); // Информация о счете /** @var Bronevik\HotelsConnector\Element\Info $info */ foreach($invoiceInfo->getInfo() as $info) { $info->getName(); // Название параметра $info->getValue(); // Значение параметра } }
取消订单
<?php /** @var Bronevik\HotelsConnector\Element\Order $order */ /** @var bool $cancelResult */ $cancelResult = $connector->cancelOrder($order->getId());
搜索订单
<?php // критерии поиска $criteria = []; // поиск по id заказа $criterion = new Bronevik\HotelsConnector\Element\SearchOrderCriterionOrderId(); $criterion->setOrderId(123); // id заказа $criteria[] = $criterion; // поиск по id услуги $criterion = new Bronevik\HotelsConnector\Element\SearchOrderCriterionServiceId(); $criterion->setServiceId(123); // id услуги $criteria[] = $criterion; // поиск по номеру услуги в системе клиента $criterion = new Bronevik\HotelsConnector\Element\SearchOrderCriterionServiceReferenceId(); $criterion->setReferenceId(123); // номер услуги в системе клиента $criteria[] = $criterion; // поиск по дате создания заказа $criterion = new Bronevik\HotelsConnector\Element\SearchOrderCriterionCreateDate(); $criterion->setDateStart('2019-01-01'); // начальная дата периода поиска $criterion->setDateEnd('2019-01-10'); // конечная дата периода поиска $criteria[] = $criterion; // поиск по дате заезда $criterion = new Bronevik\HotelsConnector\Element\SearchOrderCriterionArrivalDate(); $criterion->setDateStart('2019-01-01'); // начальная дата периода поиска $criterion->setDateEnd('2019-01-10'); // конечная дата периода поиска $criteria[] = $criterion; // поиск по дате выезда $criterion = new Bronevik\HotelsConnector\Element\SearchOrderCriterionDepartureDate(); $criterion->setDateStart('2019-01-01'); // начальная дата периода поиска $criterion->setDateEnd('2019-01-10'); // конечная дата периода поиска $criteria[] = $criterion; // поиск по имени гостя $criterion = new Bronevik\HotelsConnector\Element\SearchOrderCriterionGuest(); $criterion->setName('Имя гостя'); // Имя гостя $criteria[] = $criterion; // поиск по типам гарантии $criterion = new Bronevik\HotelsConnector\Element\SearchOfferCriterionGuaranteeTypes(); $criterion->addGuaranteeType(Bronevik\HotelsConnector\Enum\GuaranteeTypes::CLIENT_CONTRACT); $criterion->addGuaranteeType(Bronevik\HotelsConnector\Enum\GuaranteeTypes::CONSUMER_CARD_WITH_CVV); $criteria[] = $criterion; $orders = $connector->searchOrders($criteria);
服务
变更历史
获取变更历史记录
还可以查看客户所有服务的更改历史。
<?php /** @var Bronevik\HotelsConnector\Element\OrdersChangelogRecord[] $changelogRecords */ $changelogRecords = $connector->getOrdersChangelog()->getOrdersChangelogRecord(); /** @var Bronevik\HotelsConnector\Element\OrdersChangelogRecord[] $changelogRecords */ foreach ($changelogRecords as $changelogRecord) { $changelogRecord->getId(); // идентификатор записи $changelogRecord->getOrderId(); // номер заказа $changelogRecord->getServiceId(); // номер услуги $changelogRecord->getReferenceId(); // номер услуги в системе клиента $changelogRecord->getCreatedAt(); // дата создания записи об изменениях $changelogRecord->getServiceCreationSource(); // ресурс, откуда создана услуга /** @var Bronevik\HotelsConnector\Element\ChangeList $changes */ $changes = $changelogRecord->getChangeList(); /** @var Bronevik\HotelsConnector\Element\Change $change */ foreach ($changes->change as $change) { $change->getElement(); // Название элемента $value = $change->getNewValue(); // Его новое значение //Информации о проживающих if ($value instanceof HotelsConnector\Element\GuestsChangeValue) { $guests = $value->getGuests(); $guests->getChildren(); // Информация о взрослых $guests->getGuest(); // Информация о Детях } } }
从变更历史中删除记录
要删除更改历史记录,需要使用 RemoveOrdersChangelogRecords 操作,并将记录 ID 数组作为参数传递。
<?php // идентификаторы записей в историю изменений $ids = [1, 2, 3]; /** @var string $status */ $status = $connector->removeOrdersChangelogRecords($ids); // при успешном удалении записей будет возвращен статус 'ok' // в случае ошибки будет выброшено исключение
评论
获取评论
要获取评论,需要使用 getServiceMessages 操作。可以作为参数传递服务 ID 或消息 ID。
注意。如果同时传递服务 ID 和消息 ID,则将在该服务中搜索评论 ID。
<?php // идентификаторы записей в историю изменений $serviceId = 123; // id услуги $messageIds = [1, 2, 3]; // ids сообщений /** @var Bronevik\HotelsConnector\Element\Messages $messages */ $messages = $connector->getServiceMessages( $serviceId, $messageIds ); /** @var Bronevik\HotelsConnector\Element\Message $message */ foreach ($messages->getMessage() as $message) { $message->getId(); // id сообщения $message->getServiceId(); // id услуги $message->getDate(); // Дата и время отправки комментария. $message->getSenderName(); // Имя отправителя комментария $message->getSenderType(); // Тип отправителя: менеджер или клиент. $message->getText(); // Текст комментария }
发送评论
要发送评论,需要传递服务 ID 和评论文本。作为响应,将是刚刚创建的评论 ID。
<?php // идентификаторы записей в историю изменений $serviceId = 123; // id услуги $text = 'Текст комментария'; // Текст комментария /** @var int $messageId */ $messageId = $connector->sendServiceMessage( $serviceId, $text );
报价详情
要获取优惠详情,可以使用 GetHotelOfferPricing 操作,它允许查看服务的详细情况,而无需创建订单。
<?php // массив услуг $services = []; // Проживание создается также как и для создания заказа $accommodation = new Bronevik\HotelsConnector\Element\ServiceAccommodation; $accommodation->setOfferCode('offer-code'); $accommodation->setComment('Гостям потребуется высокоскоростное подключение к Интернет.'); $guest = new \Bronevik\HotelsConnector\Element\Guest(); $guest->setFirstName('Валентин'); $guest->setLastName('Валентинович'); $accommodation->guests->add($guest); $services[] = $accommodation; // Нужно создавать по услуге на каждый бронируемый номер. $accommodation = new Bronevik\HotelsConnector\Element\ServiceAccommodation; $accommodation->setOfferCode('offer-code'); $accommodation->setComment('Не представлять напитки из минибара.'); $accommodation->guests->add($guest); $services[] = $accommodation; $currency = \Bronevik\HotelsConnector\Enum\CurrencyCodes::RUB; // Валюта /** @var Bronevik\HotelsConnector\Element\OrderServiceAccommodation[] $orderServices */ $orderServices = $connector->getHotelOfferPricing($services, $currency); // объект услуги в ответе точно такой же как и при создании заказа
在线服务校正
服务修正
请求
<?php $serviceId = 1; // Id услуги $updateService = new \Bronevik\HotelsConnector\Element\UpdateService(); $updateService->setArrivalDate("2021-09-18"); // Коррекция даты заезда $updateService->setDepartureDate("2021-09-22"); // Коррекция даты выезда $updateService->setReferenceId(1); // Коррекция номера услуги в системе клиента $addMeals = new \Bronevik\HotelsConnector\Element\MealIds(); $addMeals->addMeal(1); // id услуги питания $removeMeals = new \Bronevik\HotelsConnector\Element\MealIds(); $removeMeals->addMeal(2); // id услуги питания $updateService->setAddMeals($addMeals); // Добавить питание в услугу $updateService->setRemoveMeals($removeMeals); // Удалить питание из услуги $updateService->setCheckinHour(15); // Коррекция часа заезда $updateService->setCheckoutHour(21); // Коррекция часа выезда $updateService->setComment('Комментарий'); // Коррекция комментария к услуге $response = $connector->updateService($serviceId, $updateService);
用于修正销售价格的请求
<?php $serviceId = 1; // Id услуги $updateService = new \Bronevik\HotelsConnector\Element\UpdateService(); $updateService->setSellingPrice(100); // Цена продажи $response = $connector->updateService($serviceId, $updateService);
解析结果
<?php /** @var \Bronevik\HotelsConnector\Element\GetServicePricingResponse $response */ $order = $response->getOrder(); $order->getId(); // Id заказа $order->getComment(); // Комментарий к заказу, который был указан при создании $order->getContactPerson(); // Контактное лицо $order->getContactPhone(); // Контактный телефон $order->getContactEmail(); // Контактный email /** @var Bronevik\HotelsConnector\Element\OrderServiceAccommodation $service */ foreach ($order->getServices()->service as $service) { $service->getId(); // Id услуги $service->getDate(); // Дата создания услуги $service->getComment(); // Комментарий к услуге, который был указан при создании $service->getPaymentRecipient(); // Способ оплаты, возможные значения: \Bronevik\HotelsConnector\Enum\PaymentRecipients $service->getIsBlockRoom(); // Блочный ли номер? $service->getIsSharedRoom(); // Является ли номер номером с подселением? $service->getRoomId(); // Id номера $service->getCountryId(); // Id страны $service->getCountryName(); // Название страны $service->getCityId(); // Id города $service->getCityName(); // Название города $service->getHotelId(); // Id отеля $service->getHotelName(); // Название отеля $service->getReferenceId(); // Номер услуги в системе клиента $service->getStatusId(); // Id статуса $service->getStatusName(); // Название статуса $service->getCheckin(); // Час заезда $service->getCheckout(); // Час выезда $service->getNonRefundable(); // Является ли тариф невозвратным? $service->getOfferCode(); // Код предложения, с помощью которого оформлена услуга $service->getOfferName(); // Название предложения $service->getRoomType(); // Тип размещения $service->getVATPercent(); // Ставка НДС $service->getGuaranteeType(); // Тип гарантии $service->getGuests(); // Гости услуги $service->getPaymentTerms() // Условия оплаты // информация о тарифе /** @var Bronevik\HotelsConnector\Element\RateType $rateType */ $rateType = $service->getRateType(); /** * Название тарифа * @see \Bronevik\HotelsConnector\Enum\RateTypeNames */ $rateType->getRateName(); $rateType->getRateDescription(); // Описание тарифа /** @var Bronevik\HotelsConnector\Element\ServiceExtraField $serviceExtraField */ // доп. поля для создания услуг foreach ($service->getExtraField() as $serviceExtraField) { $serviceExtraField->getName(); // Название $serviceExtraField->getValue(); // Значение } // ежедневные цены /** @var Bronevik\HotelsConnector\Element\DailyPrice $dailyPrice */ foreach ($service->getDailyPrices()->dailyPrice as $dailyPrice) { // аналогично dailyPrice в SearchHotelOffers $dailyPrice->getDate(); // Дата, на которую рассчитана цена $dailyPrice->getBookingFee(); // Стоимость брони в отеле $dailyPrice->getEarlyArrival(); // Стоимость раннего заезда $dailyPrice->getLateDeparture(); // Стоимость позднего выезда $dailyPrice->getRate(); // Стоимость номера } // гости foreach ($service->getGuests() as $guest) { /** @var Bronevik\HotelsConnector\Element\Guest $guest */ echo $guest->getLastName() . ' ' . $guest->getFirstName(); } // договор, привязанный к услуге /** @var Bronevik\HotelsConnector\Element\Contract $contract */ $contract = $service->getContract(); $contract->getId(); // Id договора $contract->getNumber(); // Номер договора $contract->getBeginsAt(); // Дата начала действия договора $contract->getLegalEntity(); // Юридическое лицо $service->getPriceDetails(); // аналогично как и для SearchHotelOffers $service->getCancellationPolicies(); // аналогично как и для SearchHotelOffers $service->getMeals(); // аналогично как и для SearchHotelOffers $service->getOfferPolicies(); // аналогично как и для SearchHotelOffers //Информация о детях аналогично CreateOrder //Информация о предпочитаемых кроватях аналогично CreateOrder }
获取考虑修正后的服务成本
请求
<?php $serviceId = 1; // Id услуги $updateService = new \Bronevik\HotelsConnector\Element\UpdateService(); $updateService->setArrivalDate("2021-09-18"); // Коррекция даты заезда $updateService->setDepartureDate("2021-09-22"); // Коррекция даты выезда $updateService->setReferenceId(1); // Коррекция номера услуги в системе клиента $addMeals = new \Bronevik\HotelsConnector\Element\MealIds(); $addMeals->addMeal(1); // id услуги питания $removeMeals = new \Bronevik\HotelsConnector\Element\MealIds(); $removeMeals->addMeal(2); // id услуги питания $updateService->setAddMeals($addMeals); // Добавить питание в услугу $updateService->setRemoveMeals($removeMeals); // Удалить питание из услуги $updateService->setCheckinHour(15); // Коррекция часа заезда $updateService->setCheckoutHour(21); // Коррекция часа выезда $updateService->setComment('Комментарий'); // Коррекция комментария к услуге $response = $connector->getServicePricing($serviceId, $updateService);
用于修正销售价格的请求
<?php $serviceId = 1; // Id услуги $updateService = new \Bronevik\HotelsConnector\Element\UpdateService(); $updateService->setSellingPrice(100); // Цена продажи $response = $connector->updateService($serviceId, $updateService);
解析结果
<?php /** @var \Bronevik\HotelsConnector\Element\GetServicePricingResponse $response */ $order = $response->getOrder(); $order->getId(); // Id заказа $order->getComment(); // Комментарий к заказу, который был указан при создании $order->getContactPerson(); // Контактное лицо $order->getContactPhone(); // Контактный телефон $order->getContactEmail(); // Контактный email /** @var Bronevik\HotelsConnector\Element\OrderServiceAccommodation $service */ foreach ($order->getServices()->service as $service) { $service->getId(); // Id услуги $service->getDate(); // Дата создания услуги $service->getComment(); // Комментарий к услуге, который был указан при создании $service->getPaymentRecipient(); // Способ оплаты, возможные значения: \Bronevik\HotelsConnector\Enum\PaymentRecipients $service->getIsBlockRoom(); // Блочный ли номер? $service->getIsSharedRoom(); // Является ли номер номером с подселением? $service->getRoomId(); // Id номера $service->getCountryId(); // Id страны $service->getCountryName(); // Название страны $service->getCityId(); // Id города $service->getCityName(); // Название города $service->getHotelId(); // Id отеля $service->getHotelName(); // Название отеля $service->getReferenceId(); // Номер услуги в системе клиента $service->getStatusId(); // Id статуса $service->getStatusName(); // Название статуса $service->getCheckin(); // Час заезда $service->getCheckout(); // Час выезда $service->getNonRefundable(); // Является ли тариф невозвратным? $service->getOfferCode(); // Код предложения, с помощью которого оформлена услуга $service->getOfferName(); // Название предложения $service->getRoomType(); // Тип размещения $service->getVATPercent(); // Ставка НДС $service->getGuaranteeType(); // Тип гарантии $service->getGuests(); // Гости услуги $service->getPaymentTerms() // Условия оплаты // информация о тарифе /** @var Bronevik\HotelsConnector\Element\RateType $rateType */ $rateType = $service->getRateType(); /** * Название тарифа * @see \Bronevik\HotelsConnector\Enum\RateTypeNames */ $rateType->getRateName(); $rateType->getRateDescription(); // Описание тарифа /** @var Bronevik\HotelsConnector\Element\ServiceExtraField $serviceExtraField */ // доп. поля для создания услуг foreach ($service->getExtraField() as $serviceExtraField) { $serviceExtraField->getName(); // Название $serviceExtraField->getValue(); // Значение } // ежедневные цены /** @var Bronevik\HotelsConnector\Element\DailyPrice $dailyPrice */ foreach ($service->getDailyPrices()->dailyPrice as $dailyPrice) { // аналогично dailyPrice в SearchHotelOffers $dailyPrice->getDate(); // Дата, на которую рассчитана цена $dailyPrice->getBookingFee(); // Стоимость брони в отеле $dailyPrice->getEarlyArrival(); // Стоимость раннего заезда $dailyPrice->getLateDeparture(); // Стоимость позднего выезда $dailyPrice->getRate(); // Стоимость номера } // гости foreach ($service->getGuests() as $guest) { /** @var Bronevik\HotelsConnector\Element\Guest $guest */ echo $guest->getLastName() . ' ' . $guest->getFirstName(); } // договор, привязанный к услуге /** @var Bronevik\HotelsConnector\Element\Contract $contract */ $contract = $service->getContract(); $contract->getId(); // Id договора $contract->getNumber(); // Номер договора $contract->getBeginsAt(); // Дата начала действия договора $contract->getLegalEntity(); // Юридическое лицо $service->getPriceDetails(); // аналогично как и для SearchHotelOffers $service->getCancellationPolicies(); // аналогично как и для SearchHotelOffers $service->getMeals(); // аналогично как и для SearchHotelOffers $service->getOfferPolicies(); // аналогично как и для SearchHotelOffers //Информация о детях аналогично CreateOrder //Информация о предпочитаемых кроватях аналогично CreateOrder }
获取服务修正的可用性
请求
<?php $serviceIds = 123; $availableCorrectionTypes = new Bronevik\HotelsConnector\Element\AvailableCorrectionTypes(); $availableCorrectionTypes->addCorrectionType(\Bronevik\HotelsConnector\Enum\CorrectionTypes::MEALS); $response = $connector->getServiceAvailableCorrections($serviceIds, $availableCorrectionTypes);
解析结果
<?php /** @var Bronevik\HotelsConnector\Element\GetServiceAvailableCorrectionsResponse $response */ $editService = $response->getEditService(); $editService->getServiceId(); // Id услуги $arrivalDepartureDate = $editService->getArrivalDepartureDates(); // Информация о коррекции дат заезда/выезда $arrivalDepartureDate->getArrivalDate(); // Дата заезда $departureDate = $arrivalDepartureDate->getDepartureDate(); // Дата выезда $departureDate->getMaxAvailableDate(); // Максимально доступная дата для коррекции $departureDate->getMinAvailableDate(); // Минимально доступная дата для коррекции /** @var Bronevik\HotelsConnector\Element\AvailableMeals $meals */ $meals = $editService->getMeals(); // Доступность питания /** @var Bronevik\HotelsConnector\Element\AvailableMeal $meal */ foreach($meals->meal as $meal) { $meal->getId(); // Идентификатор услуги питания $meal->getIncluded(); // Включена ли услуга в предложение $meal->getVATPercent(); // Детализация услуги питания $meal->getPriceDetails(); // Ставка НДС } $meals->getCorrectionAvailability()->isAdding(); // Доступно ли добавление услуг питания $meals->getCorrectionAvailability()->isRemoving(); // Доступно ли удаление услуг питания $checkinCheckoutPrice = $editService->getCheckinCheckoutPrices(); // Цены и доступность РЗПВ $checkin = $checkinCheckoutPrice->getCheckin(); // Информация о раннем заезде $checkout = $checkinCheckoutPrice->getCheckout(); // Информация о позднем выезде $hoursPrice = $checkin->getHourPrice(); // Массив с ценами по часам. /** @var Bronevik\HotelsConnector\Element\EditServiceHourPrice $hourPrice */ foreach($hoursPrice as $hourPrice) { $hourPrice->getHour(); // Час $hourPrice->getAvailabilityCode(); // Код доступности. $hourPrice->getPriceDetails(); // Детализация часа. } $correctionAvailability = $editService->getCorrectionAvailability(); // Информация о доступности коррекции $correctionAvailability->getAvailableCorrectionNumber(); // Доступное количество коррекций $correctionAvailability->getIsCorrectionAvailable(); // Доступна ли коррекция услуги $correctionAvailability->getMeals(); // Доступна ли коррекция питания $correctionAvailability->getCheckinHour(); // Доступна ли коррекция часов заезда $correctionAvailability->getCheckoutHour(); // Доступна ли коррекция часов выезда $correctionAvailability->getArrivalDate(); // Доступна ли коррекция даты заезда $correctionAvailability->getDepartureDate(); // Доступна ли коррекция даты выезда $correctionAvailability->getSellingPrice(); // Доступна ли коррекция свайп шкалы $correctionAvailability->getComment(); // Доступна ли коррекция комментария $correctionAvailability->getGuests(); // Доступна ли коррекция гостей $correctionAvailability->getReferenceId(); // Доступна ли коррекция referenceId
撤销服务
要取消服务,需要使用 cancelServices 方法,该方法接收服务 ID 数组作为输入。
<?php $serviceIds = [123 ,234]; // идентификаторы услуг /** @var Bronevik\HotelsConnector\Element\CancelledService[] $cancelledServices */ $cancelledServices = $connector->cancelServices($serviceIds); foreach ($cancelledServices as $cancelledService) { /** @var Bronevik\HotelsConnector\Element\CancelledService $cancelledService */ $cancelledService->getId(); // идентификатор услуги $cancelledService->getStatus(); // статус услуги (Описание статусов есть в документации) $cancelledService->getResult(); // результат аннуляции услуги }
无评分搜索
按城市搜索
<?php $checkinDate = '2019-08-01'; // дата заезда $checkoutDate = '2019-08-02'; // дата выезда $cityId = 1; // идентификатор города /** @var Bronevik\HotelsConnector\Element\HotelWithCheapestOffer[] $hotelsWithCheapestOffers */ $hotelsWithCheapestOffers = $connector->searchHotelAvailability( $checkinDate, $checkoutDate, \Bronevik\HotelsConnector\Enum\CurrencyCodes::RUB, $cityId );
按酒店搜索
<?php $checkinDate = '2019-08-01'; // дата заезда $checkoutDate = '2019-08-02'; // дата выезда $hotelIds = [1, 2, 3]; // идентификаторы отелей (до 100 шт) /** @var Bronevik\HotelsConnector\Element\HotelWithCheapestOffer[] $hotelsWithCheapestOffers */ $hotelsWithCheapestOffers = $connector->searchHotelAvailability( $checkinDate, $checkoutDate, \Bronevik\HotelsConnector\Enum\CurrencyCodes::RUB, null, $hotelIds );
按坐标和半径搜索
<?php $latitude = 30.1234; // широта $longitude = 30.1234; // долгота $radius = 12.1; // радиус в км (от 0 до 30 км, точность до 1 десятой) $geolocation = new Bronevik\HotelsConnector\Element\GeoLocation(); $geolocation->latitude = $latitude; $geolocation->longitude = $longitude; $geolocation->radius = $radius; $checkinDate = '2019-08-01'; // дата заезда $checkoutDate = '2019-08-02'; // дата выезда /** @var Bronevik\HotelsConnector\Element\HotelWithCheapestOffer[] $hotelsWithCheapestOffers */ $hotelsWithCheapestOffers = $connector->searchHotelAvailability( $checkinDate, $checkoutDate, \Bronevik\HotelsConnector\Enum\CurrencyCodes::RUB, null, [], $geolocation );
按条件搜索
<?php $checkinDate = '2019-08-01'; // дата заезда $checkoutDate = '2019-08-02'; // дата выезда $cityId = 1; // идентификатор города $criteria = []; // массив критериев $criteria[] = new Bronevik\HotelsConnector\Element\SearchOfferCriterionOnlyOnline(); /** * Более подробную информацию о критериях смотрите в методе searchHotelOffers */ /** @var Bronevik\HotelsConnector\Element\HotelWithCheapestOffer[] $hotelsWithCheapestOffers */ $hotelsWithCheapestOffers = $connector->searchHotelAvailability( $checkinDate, $checkoutDate, \Bronevik\HotelsConnector\Enum\CurrencyCodes::RUB, $cityId, [], null, [], $criteria );
管理搜索响应内容
<?php $checkinDate = '2019-08-01'; // дата заезда $checkoutDate = '2019-08-02'; // дата выезда $cityId = 1; // идентификатор города $addElements = []; // массив с названиями нужных элементов /** * Все названия элементов содержатся в классе * @see \Bronevik\HotelsConnector\Enum\AddElementsTypes */ $addElements[] = Bronevik\HotelsConnector\Enum\AddElementsTypes::HOTEL_AMENITIES; $addElements[] = Bronevik\HotelsConnector\Enum\AddElementsTypes::GEO; /** @var Bronevik\HotelsConnector\Element\HotelWithCheapestOffer[] $hotelsWithCheapestOffers */ $hotelsWithCheapestOffers = $connector->searchHotelAvailability( $checkinDate, $checkoutDate, \Bronevik\HotelsConnector\Enum\CurrencyCodes::RUB, $cityId, [], null, $addElements );
无评分搜索响应
<?php $checkinDate = '2019-08-01'; // дата заезда $checkoutDate = '2019-08-02'; // дата выезда $cityId = 1; // идентификатор города /** @var Bronevik\HotelsConnector\Element\HotelWithCheapestOffer[] $hotelsWithCheapestOffers */ $hotelsWithCheapestOffers = $connector->searchHotelAvailability( $checkinDate, $checkoutDate, \Bronevik\HotelsConnector\Enum\CurrencyCodes::RUB, $cityId ); foreach ($hotelsWithCheapestOffers as $hotelWithCheapestOffer) { $hotelWithCheapestOffer->getId(); // идентификатор отеля /** * Детализация стоимости * * @var Bronevik\HotelsConnector\Element\PriceDetails $priceDetails */ $priceDetails = $hotelWithCheapestOffer->getMinimalPriceDetails(); $priceDetails->getVatApplicable(); // Применим ли к отелю НДС $clientDetails = $priceDetails->getClient(); // Детализация клиентской стоимости $hotelDetails = $priceDetails->getHotel(); // Детализация отельной стоимости $additionalPrices = $priceDetails->getExtra(); // Дополнительные цены $clientDetails->getVatIncluded(); // Включен ли НДС в клиентскую стоимость $clientDetails->getClientCurrency() // Цены в валюте клиента $clientDetails->getCommission(); // Информация о комиссии $clientDetails->getGross(); // Брутто-стоимость $clientDetails->getNet(); // Нетто-стоимость /** @var Bronevik\HotelsConnector\Element\AvailableAmenities */ $availableAmenities = $hotelWithCheapestOffer->getAmenities(); /** @var Bronevik\HotelsConnector\Element\AvailableAmenity $availableAmenity */ foreach ($availableAmenities->availableAmenity as $availableAmenity) { $availableAmenity->getId(); $availableAmenity->getPrice(); $availableAmenity->getIncluded(); $availableAmenity->getCurrency(); } /** @var Bronevik\HotelsConnector\Element\HotelGeo $geoInfo */ $geoInfo = $hotelWithCheapestOffer->getGeo(); $geoInfo->getCityId(); // идентификатор города $geoInfo->getCityName(); // название города $geoInfo->getAddress(); // адрес отеля $geoInfo->getDistanceToCenter(); // расстояние до центра города /** @var Bronevik\HotelsConnector\Element\Coordinates $coordinates */ $coordinates = $geoInfo->getCoordinates(); $coordinates->getLatitude(); // широта $coordinates->getLongitude(); // долгота /** @var Bronevik\HotelsConnector\Element\HotelInfo $hotelInfo */ $hotelInfo = $hotelWithCheapestOffer->getInfo(); $hotelInfo->getName(); // название отеля $hotelInfo->getDescription(); // описание отеля $hotelInfo->getType(); // тип отеля $hotelInfo->getCategory(); // категория отеля $hotelInfo->getDeepLink(); // элемент для работы метапоисковых систем /** @var Bronevik\HotelsConnector\Element\Image $hotelPhoto */ $hotelPhoto = $hotelInfo->getPhoto(); // главная фотография отеля /** @var Bronevik\HotelsConnector\Element\HotelVatInfo $hotelVatInfo */ $hotelVatInfo = $hotelWithCheapestOffer->getVat(); $hotelVatInfo->getIncluded(); // включен ли НДС в отеле $hotelVatInfo->getApplicable(); // применим ли НДС к отелю $hotelVatInfo->getPercent(); // процент НДС /** @var Bronevik\HotelsConnector\Element\SearchAvailabilityHotelOffer $hotelOffer */ $hotelOffer = $hotelWithCheapestOffer->getOffer(); /** @var Bronevik\HotelsConnector\Element\Image $roomPhoto */ $roomPhoto = $hotelOffer->getPhoto(); // главная фотография отеля /** @var Bronevik\HotelsConnector\Element\AvailableAmenities $roomAmenities */ $roomAmenities = $hotelOffer->getAmenities(); $hotelOffer->getRoomId(); // идентификатор номера $hotelOffer->getName(); // название номера $hotelOffer->getRoomType(); // тип номера $hotelOffer->getFreeRooms(); // кол-во свободных номеров $hotelOffer->getIsBlockRoom(); // номер блочный? $hotelOffer->getIsSharedRoom(); // номер с подселением? $hotelOffer->getPaymentRecipient(); // способ оплаты $hotelOffer->getNonRefundable(); // невозвратный ли тариф? /** @var Bronevik\HotelsConnector\Element\AvailableMeals $meals */ $meals = $hotelOffer->getMeals(); /** @var Bronevik\HotelsConnector\Element\HotelOfferCancellationPolicy[] $cancellationPolicies */ $cancellationPolicies = $hotelOffer->getCancellationPolicies(); //Информация о детях if ($hotelOffer->getChildrenAccommodation()) { foreach ($hotelOffer->getChildrenAccommodation()->getChildren() as $childAccommodation) { $childAccommodation->getAge(); // Возраст $childAccommodation->getCount(); // Количество детей данного возраста $childAccommodation->isIncluded(); // Дети включены в услугу $childAccommodation->getAccommodation(); // Тип размещения в номере } } // Варианты комбинаций кроватей $bedSets = $hotelOffer->getBedSets(); // Далее аналогично ответу SearchHotelOffers }
查询 RZDPV 的价格
要请求早到晚走的价格,需要使用 getCheckinCheckoutPricing 方法。它接收优惠代码数组作为输入。
<?php $offerCodes = [ 'offerCode1', 'offerCode2', ]; $currency = \Bronevik\HotelsConnector\Enum\CurrencyCodes::RUB; /** @var Bronevik\HotelsConnector\Element\OfferCheckinCheckoutPrices[] $offerCheckinCheckoutPrices */ $offerCheckinCheckoutPrices = $connector->getCheckinCheckoutPricing($offerCodes, $currency); /** @var Bronevik\HotelsConnector\Element\OfferCheckinCheckoutPrices $offerCheckinCheckoutPrice */ foreach ($offerCheckinCheckoutPrices as $offerCheckinCheckoutPrice) { $offerCheckinCheckoutPrice->getOfferCode(); // оффер-код, для которого рассчитывается РЗПВ /** @var Bronevik\HotelsConnector\Element\OfferHourPrices $earlyArrival */ $earlyArrival = $offerCheckinCheckoutPrice->getCheckin(); /** @var Bronevik\HotelsConnector\Element\OfferHourPrices $lateDeparture */ $lateDeparture = $offerCheckinCheckoutPrice->getOfferCode(); foreach ($earlyArrival->hourPrice as $offerHourPrice) { $offerHourPrice->getHour(); // час $offerHourPrice->getAvailabilityCode(); // код доступности (Описание кодов доступно в документации) /** * @see \Bronevik\HotelsConnector\Enum\AvailabilityCodes */ // детализация часа заезда /** @var Bronevik\HotelsConnector\Element\PriceDetails $hourPriceDetails */ $hourPriceDetails = $offerHourPrice->getPriceDetails(); } }
错误
在 API 内部错误的情况下,将返回 SoapFault
注意。错误描述(代码、错误描述及其文本)可以在文档的
错误代码
部分找到。
<?php try { $connector->getMeals(); } catch (SoapFault $e) { /** @var \StdClass $detail */ $detail = $e->detail->Fault; $detail->traceId; // Id запроса $detail->code; // Код ошибки /** * @see \Bronevik\HotelsConnector\Enum\ExceptionCodes */ }