thomaswiener / client-eurolines
Eurolines 预订客户端
dev-master
2014-11-14 07:48 UTC
Requires
- php: >=5.4
- ext-curl: *
- guzzlehttp/guzzle: ~4.0
Requires (Dev)
- phpunit/phpunit: 3.7.*
This package is not auto-updated.
Last update: 2024-09-24 03:59:38 UTC
README
此软件包是 Eurolines (RO) Web 服务 (SOAP) 的 PHP 客户端实现。它基于此处找到的 Web 服务描述:http://rezervari.eurolines.ro/emlines_api/APIdoc.htm
端点描述可在此处找到:http://rezervari.eurolines.ro/emlines_api/api.asmx?
在继续之前,请阅读以下描述
http://rezervari.eurolines.ro/emlines_api/APIdoc.htm#_Toc211526756
以下提供了不同端点的示例调用。
安装
通过 composer 安装。
将 "thomaswiener/client-eurolines": "dev-master" 添加到您的 composer.json 并更新 vendors。
Packagist: https://packagist.org.cn/packages/thomaswiener/client-eurolines
Github: https://github.com/thomaswiener/client-eurolines
设置
$loader = require_once __DIR__ . "/./vendor/autoload.php"; $config = array( 'wsdl' => 'http://rezervari.eurolines.ro/emlines_api/api.asmx?WSDL', 'username' => 'username', 'password' => 'PA$$W0RD' ); $originCode = 'BUC'; //Bucuresti $destinationCode = 'MUN'; //Munich $client = new \EurolinesClient\Client($config, 'log'); $securityService = new \EurolinesClient\Endpoint\Security($client); $stationService = new \EurolinesClient\Endpoint\Station($client); $journeyService = new \EurolinesClient\Endpoint\Journey($client); $ticketService = new \EurolinesClient\Endpoint\Ticket($client); session_start();
安全性
登录
$user = new \EurolinesClient\Data\User(); $user ->setUsername($config['username']) ->setPassword($config['password']) ->setLanguageCode('en'); $response = $securityService->login($user); //set session id $_SESSION['ASP.NET_SessionId'] = $response->getSessionId(); //check if logged in $response = $securityService->isLoggedIn(); if (!$response->getData()->IsLoggedInResult) { echo 'not logged in'; exit(); }
####注销
$response = $securityService->logout();
登录检查
$response = $securityService->isLoggedIn(); if ($response->getData()->IsLoggedInResult) { echo 'error logging out'; exit(); }
行程
获取站点
$response = $stationService->getAll(); foreach ($response->getData()->busStopCollection->Stop as $stationService) { if ($stationService->Code == $originCode) { $busStopFrom = $stationService; } if ($stationService->Code == $destinationCode) { $busStopTo = $stationService; } }
搜索
$journeySearchData = new \EurolinesClient\Data\JourneySearch(); $journeySearchData ->setJourneyType(EurolinesClient\Data\JourneySearch::TYPE_ONE_WAY) ->setBusStopCodeFrom($busStopFrom->Code) ->setBusStopCodeTo($busStopTo->Code) ->setDepartureDate((new \DateTime())->setDate(2014, 12, 5)) #->setBusStopCodeBackFrom($busStopTo->Code) #->setBusStopCodeBackTo($busStopFrom->Code) #->setDepartureBackDate((new \DateTime())->setDate(2014, 12, 20)) ->setSearchInterval(3); $response = $journeyService->search($journeySearchData); //select first leg (trip) foreach ($response->getData()->journeyCollection->ArrayOfLeg as $leg) { break; } //==================== //get templates of leg //==================== if ($leg->FreePlaces == 0) { echo "bus fully booked"; exit(); } $response = $journeyService->getTemplatesByLineId($leg->LineId); $template = $response->getData()->printTemplateCollection->PrintTemplate[1]; $template = json_decode(json_encode($template), true); #$template['NumberingType'] = 'Sequence';
获取票价
$journeyData = new \EurolinesClient\Data\Journey(); foreach ($leg as $fieldName => $value) { $method = sprintf('set%s', $fieldName); if ($value instanceof \stdClass) { $value = json_decode(json_encode($value), true); } $journeyData->$method($value); } $response = $journeyService->getTariff($journeyData);
票务
购买
//get regular price for an adult foreach ($response->getData()->priceCollection->Price as $price) { if ($price->TariffCode == 'EURv01') { break; } } //set price object $priceData = new \EurolinesClient\Data\Price(); foreach ($price as $fieldName => $value) { $method = sprintf('set%s', $fieldName); if ($value instanceof \stdClass) { $value = json_decode(json_encode($value), true); } $priceData->$method($value); } //set passenger object $passengerData1 = new \EurolinesClient\Data\Passenger(); $passengerData1->setFirstName('John'); $passengerData1->setLastName('Doe'); $passengerData1->setStreet('Chausseestrasse 123'); $passengerData1->setCity('Berlin'); $passengerData1->setCountry('Germany'); $passengerData1->setPhoneNumber('+491711234567'); $passengerData1->setZipCode('10001'); $passengerData1->setBirthDate('01/01/1990'); $passengerData1->setNote(''); $passengerData1->setPrice(0); $passengerData1->setPassengerId(0); $passengerData1->setEmail('asdf@asdfd.de'); $passengerData1->setTax(0); $passengerData1->setPassport('asdf'); //set ticket object $ticketData = new \EurolinesClient\Data\Ticket(); $ticketData->setTicketType(EurolinesClient\Data\Ticket::TICKET_TYPE_SELL); $ticketData->setJourneyType(EurolinesClient\Data\JourneySearch::TYPE_ONE_WAY); $ticketData->addJourney($journeyData); $ticketData->addPassenger($passengerData1); #$ticketData->addPassenger($passengerData2); $ticketData->addPrice($priceData); #$ticketData->addPrice($priceData); $ticketData->setInvoiceNumber(''); //call purchase $response = $ticketService->purchase($ticketData); $sale = $response->getData()->Sale;
获取票号
foreach ($sale->Passengers as $passenger) { foreach ($passenger->Tickets as $ticket) { $response = $ticketService->saveTicketNumber($ticket->TicketId, $template); //for every passenger and every leg $ticketNumbers[] = $response->getData()->ticketNumber; } }
获取销售
$response = $ticketService->getSale($sale->SaleId);
获取打印数据
$response = $ticketService->getPrintData($sale->SaleId);
确认打印
//$response = $ticketService->confirmPrint($sale->SaleId);
取消票价
$tariffs = []; foreach ($ticketNumbers as $ticketNumber) { $tariffs[$ticket->TicketId]['tariffs'] = $ticketService->cancelTariffs($ticket->TicketId); $tariffs[$ticket->TicketId]['ticketNumber'] = $ticketNumber; }
取消票务
foreach ($tariffs as $ticketId => $tariffCollection) { $tariff = $tariffCollection['tariffs']->getData()->priceCollection->Price[0]; $ticketData = new \EurolinesClient\Data\Ticket(); $ticketData->setReferenceNumber($ticketId); #$sale->SaleId); $ticketData->setTicketNumber($tariffCollection['ticketNumber']); $ticketData->setTariffId($tariff->TariffId); $ticketData->setCancelOnlyBackWay(false); $response = $ticketService->cancel($ticketData); }