hotelbeds / hotel-api-sdk-php
Hotelbeds Hotel-API SDK for PHP
此包的官方仓库似乎已不存在,因此包已被冻结。
Requires
- php: >=5.5
- nicmart/string-template: v0.1.0
- zendframework/zend-config: 2.5.1
- zendframework/zend-http: ^2.5
- zendframework/zend-json: ^2.5
Requires (Dev)
- php: >=5.5
- phpdocumentor/phpdocumentor: 2.*
- phpunit/php-code-coverage: 3.0.1
- phpunit/phpunit: 3.7.*
- zendframework/zend-http: ^2.5
- zendframework/zend-json: ^2.5
This package is not auto-updated.
Last update: 2021-12-01 05:19:02 UTC
README
简介
Hotelbeds SDK for PHP 是一组工具,其主要目标是帮助开发使用 Hotelbeds API(APItude)的 PHP 应用程序。这是一个在 packagist.org 仓库上可用的 composer 库。
https://packagist.org.cn/packages/hotelbeds/hotel-api-sdk-php
分步指南
https://github.com/hotelbeds-sdk/hotel-api-sdk-php/wiki/Step-by-step-guide-to-start-from-scratch
许可
本软件根据 LGPL v2.1 许可证授权。请参阅文件 LICENSE 获取具体细节以及更多许可证和版权信息。
API 文档
http://hotelbeds-sdk.github.io/hotel-api-sdk-php/
安装
使用 Composer 工具从控制台安装:https://getcomposer.org/download/
composer require hotelbeds/hotel-api-sdk-php
使用 PHPStorm 中的 Composer 依赖管理器:http://blog.jetbrains.com/webide/2013/03/composer-support-in-phpstorm/
重要!!!此版本为 dev-master@dev 版本,您需要使用以下命令安装:
composer require "hotelbeds/hotel-api-sdk-php:dev-master@dev"
测试
在单元测试目录中可以找到不同的测试,可以使用 phpunit 运行。有不同的测试集:可用性和预订。
.\vendor\bin\phpunit --testsuite availability
此测试套件执行:API 状态、在 PMI 目的地上提供可用性、选择一个房间并执行预订和检查价格。
使用 SDK
概述
HotelApiClient 类有不同的方法,实现了各种 HotelAPI 调用。
- 可用性
- 检查价格
- 预订确认
- 预订取消
- 预订列表
- 状态
每个方法都有一个 ApiHelper 类型的参数,有四种可能类型
- 可用性
- 检查价格
- 预订
- 预订列表
每个调用的所有响应都可以使用 PHP 对象或数组迭代。内部将 JSON 响应结构转换为 PHP 关联数组。
重要提示
该SDK使用具有魔法属性和方法的类来描述此功能的使用,使用标准的@property标记,具体使用方法说明如下:[链接](http://manual.phpdoc.org/HTMLSmartyConverter/PHP/phpDocumentor/tutorial_tags.property.pkg.html)。SDK的不同调用都是通过相同的方法实现的魔法方法,也进行了文档说明,取决于IDE是否支持自动补全功能时是否可见。SDK已与PhpStorm IDE进行测试和认证,但用户可以根据自己的喜好使用,同时考虑到自动补全功能是否支持"@property"。
确保已将openssl和curl扩展安装到PHP环境中,并设置了cacerts路径。
使用autoload PSR-4 包含库
<?php require __DIR__ .'/vendor/autoload.php'; use hotelbeds\hotel_api_sdk\HotelApiClient; use hotelbeds\hotel_api_sdk\model\Destination; use hotelbeds\hotel_api_sdk\model\Occupancy; use hotelbeds\hotel_api_sdk\model\Pax; use hotelbeds\hotel_api_sdk\model\Rate; use hotelbeds\hotel_api_sdk\model\Stay; use hotelbeds\hotel_api_sdk\types\ApiVersion; use hotelbeds\hotel_api_sdk\types\ApiVersions; use hotelbeds\hotel_api_sdk\messages\AvailabilityRS; $reader = new Zend\Config\Reader\Ini(); $commonConfig = $reader->fromFile(__DIR__ . '\config\Common.ini'); $currentEnvironment = $commonConfig["environment"]? $commonConfig["environment"]: "DEFAULT"; $environmentConfig = $reader->fromFile(__DIR__ . '\config\Environment.' . strtoupper($currentEnvironment) . '.ini'); $cfgApi = $commonConfig["apiclient"]; $cfgUrl = $environmentConfig["url"]; $this->apiClient = new HotelApiClient($cfgUrl["default"], $cfgApi["apikey"], $cfgApi["sharedsecret"], new ApiVersion(ApiVersions::V1_0), $cfgApi["timeout"], null, $cfgUrl["secure"]); $rqData = new \hotelbeds\hotel_api_sdk\helpers\Availability(); $rqData->stay = new Stay(DateTime::createFromFormat("Y-m-d", "2018-02-01"), DateTime::createFromFormat("Y-m-d", "2018-02-10")); $rqData->destination = new Destination("PMI"); $occupancy = new Occupancy(); $occupancy->adults = 2; $occupancy->children = 1; $occupancy->rooms = 1; $occupancy->paxes = [ new Pax(Pax::AD, 30, "Mike", "Doe"), new Pax(Pax::AD, 27, "Jane", "Doe"), new Pax(Pax::CH, 8, "Mack", "Doe") ]; $rqData->occupancies = [ $occupancy ]; $availRS = $apiClient->Availability($rqData);
可以通过酒店属性列表进行筛选
$rqData->hotels = [ "hotel" => [ 1067, 1070, 1506, ] ];
异常
在SDK的第一个版本中,有一个异常(HotelSDKException)用于处理服务级别的错误,并捕获服务器发送的数据以审计AuditData类。
try { $availRS = $apiClient->Availability($rqData); } catch (\hotelbeds\hotel_api_sdk\types\HotelSDKException $e) { $auditData = $e->getAuditData(); error_log( $e->getMessage() ); error_log( "Audit remote data = ".json_encode($auditData->toArray())); exit(); } catch (Exception $e) { error_log( $e->getMessage() ); exit(); }
可用性
发送可用性请求
$availRS = $apiClient->Availability($rqData);
在调用可用性方法后,可以使用迭代器遍历结果,或以数组形式读取。
可用性响应检查
在使用迭代器遍历所有结果之前,可以使用isEmpty()方法预先检查是否为空响应,该方法避免实例化所有中间类,如:房间、价格等。
if ($availRS->isEmpty()) { echo "There are no results!" }
使用数组
$allResponse = $availRS->hotels->toArray();
返回此数组结构
["hotels" => [ ["code" => 1067, "name" => "Gran Melia Victoria", ... "rooms" => [ "code" => "DBL.VM", "name" => "DOUBLE SEA VIEW", "rates" => [ ["rateKey" => "20160201|20160210|W|1|1067|DBL.VM|ID_B2B_24|RO|BARE|1~2~1|8|N@1102568804", "net" => 9999.99, ], ... ], ] ], ... ]
使用对象与迭代器
// Iterate all returned hotels with an Hotel object foreach ($availRS->hotels->iterator() as $hotelCode => $hotelData) { // Get all hotel data (from Hotel object $hotelData) // Iterate all rooms of each hotel foreach ($hotelData->iterator() as $roomCode => $roomData) { // Iterate all rate of each room foreach($roomData->rateIterator() as $rateKey => $rateData) { } } }