defunktt1/hotel-api-sdk-php

Hotelbeds PHP API SDK

该软件包的官方仓库似乎已不存在,因此该软件包已被冻结。

dev-master 2018-05-23 09:08 UTC

This package is not auto-updated.

Last update: 2019-01-30 16:20:09 UTC


README

简介

Hotelbeds PHP SDK 是一组工具,其主要目标是帮助开发使用 Hotelbeds API 的 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 进行测试和认证,但用户可以始终选择使用,并且当您认为自动完成将工作或不会工作取决于它是否支持 "@property" 时,请考虑这一点。

请确保已将 openssl 和 curl 扩展安装到您的 PHP 环境中,并设置了 cacerts 路径。

使用 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)
                {
                        
                }
        }
}