ホテルサプライヤー連携
Hotelbeds API 連携:コンテンツ、マッピング、リアルタイム予約
Hotelbeds API 連携は、一つではなく二つの作業です。まずホテルコンテンツをダウンロードして保存し、次にリアルタイム料金で予約します。PHPTRAVELS はお客様ご自身の Hotelbeds 契約とキーを使い、ホテルモジュールの中で両方を行います。
- Content API 同期
- Booking API フロー
- BOOKABLE と RECHECK 料金
- ホテルマッピング
Hotelbeds の各 API の関係
Hotelbeds API 連携:片側はコンテンツ、もう片側は予約
Hotelbeds はホテル API を二つに分けています。Content API は説明文、画像、設備、食事プラン、客室などの静的データを返します。Booking API はリアルタイムの空室と料金を返し、予約を受け付けます。中央のステップを選ぶと、使用する呼び出しが表示されます。
Content API
静的データ、お客様側に保存- ホテル一覧
hotels · from=1&to=1000ポートフォリオ内のすべてのホテルを、1 リクエストあたり最大 1,000 件のページで取得します。 - 設備、食事プラン、客室
facilities · boards · roomsBooking API のコードを、ゲストが理解できる言葉に変換するコード表です。 - 画像
photos.hotelbeds.com/giata/画像の部分パスを Hotelbeds の画像ホストと組み合わせ、必要なサイズで表示します。 - 日次の変更
lastUpdateTime初回読み込みの後は、lastUpdateTime を付けた 1 日 1 回のリクエストで変更分だけを取得します。
リクエストの流れ
Booking API
リアルタイム、ゲストごとに呼び出し- 空室検索
POST /hotelsホテルコード、日付、人数に応じた客室、食事プラン、料金、キャンセル料を返します。 - 料金の再確認
POST /checkratesRECHECK と表示された料金について、最新の料金と条件、アップセルの選択肢を返します。 - 予約
POST /bookings予約者とゲストの氏名で選択した rateKey を確定し、予約番号を返します。 - キャンセル
DELETE /bookings · simulateキャンセルをシミュレーションして手数料を表示するか、実際に予約をキャンセルします。
失敗する Hotelbeds プロジェクトの多くは、この二つを混同しています。ゲストの検索中に Content API を呼び出すと遅く、Hotelbeds の警告どおり認証情報がブロックされる恐れがあります。逆に、保存済みのコードなしでリアルタイム検索すると、画像や設備を表示できません。PHPTRAVELS は両者を分けています。コンテンツはバックグラウンドで同期し、ゲストが待っている間に動くのは空室検索、料金の再確認、予約の呼び出しだけです。
サプライヤーそのもの、その商品、アカウント開設の方法については Hotelbeds サプライヤー紹介 をご覧ください。このページでは技術的な連携について説明します。
料金タイプ
チェックアウトを左右する四つの料金フィールド
Hotelbeds の料金には、すぐに予約できるか、どの価格を表示してよいか、誰が代金を受け取るかを決める属性があります。エンジンがすべての結果で読み取るべき項目は次のとおりです。
| フィールド | ケース 1 | ケース 2 | PHPTRAVELS の対応 |
|---|---|---|---|
予約可能か再確認かrateType | BOOKABLE料金は最新です。追加の呼び出しなしで予約できます。 | RECHECK最新の料金と条件を得るため、先に料金の再確認を呼び出す必要があります。 | RECHECK 料金は支払い前に再確認を行い、変更があればゲストに表示します。 |
ネットかコミッションかnet · sellingRate | netネットモデル:料金はネットなので、ご自身でマージンを加えます。 | sellingRateコミッションモデル:手数料は sellingRate に含まれており、その価格が最終価格です。 | ネット料金にはマークアップルールを適用し、コミッション料金は sellingRate で販売します。 |
固定販売価格hotelMandatory | truehotelMandatory が true:sellingRate で販売する必要があります。 | false · nullネット料金で false または空:独自のマージンを設定できます。 | ホテルが求める場合は、マークアップルールに関係なく表示価格を sellingRate に固定します。 |
ゲストの支払い時期paymentType | AT_WEB予約時に、お客様のサイトで決済します。 | AT_HOTELゲストがホテルに直接支払います。 | 料金に事前払いまたは現地払いのラベルを付け、それに合わせてチェックアウトを切り替えます。 |
どの料金モデルになるかは Hotelbeds との契約によります。Hotelbeds によると、担当の営業マネージャーがビジネスに合ったモデルを提案します。
ホテルマッピング
Hotelbeds のホテルを既存の販売ホテルと照合
自社契約や別のサプライヤーがある場合、同じホテルが異なるコードで届きます。マッピングでこれらを結び付ければ、ゲストには 3 件の重複ではなく、最安料金の 1 軒のホテルとして表示されます。
PHPTRAVELS でのマッピングの仕組み
コンテンツを同期するたびに、PHPTRAVELS は名称、住所、都市、座標で Hotelbeds のホテルと自社のホテル一覧を比較します。一致度の高いものは自動でリンクされます。判断が難しいものは担当者の確認を待ち、一致しないホテルは新規施設として取り込むか、無視できます。
マッピングされたホテルは ホテル で 1 つのページ、1 つのギャラリー、1 つのレビュー評価を共有し、各サプライヤーは独自の料金とルールを維持します。同じマッピングが公開サイトと B2B 旅行ポータル の両方で使われます。
- Harbour View Hotelリスボン48291397%一致
- Old Town Suitesプラハ11735492%一致
- Palm Court Resortドバイ66201874%確認
- Casa Azul Boutiqueセビリア–0%一致なし
- Northern Lights Lodgeトロムソ90522766%確認
- Riverside Apartmentsブダペスト33076198%一致
架空のホテルとコードを使ったサンプル画面です。
Hotelbeds XML または JSON
すべてのリクエストに署名、テストは小規模から
今も Hotelbeds XML で検索されることが多いですが、現行のドキュメントでは JSON リクエストが示されています。どちらでも操作は同じで、各リクエストには二つのヘッダーが付きます。
1# X-Signature = SHA256(api key + secret + unix time in seconds) 2TS=$(date +%s) 3SIG=$(printf "%s%s%s" "$API_KEY" "$SECRET" "$TS" | sha256sum | cut -d" " -f1) 4 5curl -X POST https://api.test.hotelbeds.com/hotel-api/1.0/hotels \ 6 -H "Api-key: $API_KEY" \ 7 -H "X-Signature: $SIG" \ 8 -H "Accept: application/json" \ 9 -H "Content-Type: application/json" \10 -d '{11 "stay": { "checkIn": "2026-11-14", "checkOut": "2026-11-17" },12 "occupancies": [{ "rooms": 1, "adults": 2, "children": 0 }],13 "hotels": { "hotel": [482913, 117354] }14 }'1516# hotel codes come from your stored Content API data, never a live content call
- 二つのヘッダー
- Api-key にはキーを、X-Signature にはキー、シークレット、現在時刻(秒)の SHA256 ハッシュを設定します。
- テストホスト
- Hotelbeds によると、テストサーバーは本番と同じですが、予約は実際のものではなく、カードも請求されません。
- 1 日 50 リクエスト
- 新しいキーでは、1 日 50 リクエストの上限がある評価環境が利用できます。認証を終えると上限が増えます。
- コンテンツをリアルタイムで呼ばない
- Hotelbeds は、Content API をリアルタイムで呼び出すと認証情報がブロックされる恐れがあると警告しています。PHPTRAVELS は決してそうしません。
コンテンツ同期プランナー
ホテル一覧に必要な Content API の呼び出し回数
Hotelbeds によると、ホテル一覧は最大 1,000 件のページで返され、初回読み込みの後は 1 日 1 回の lastUpdateTime リクエストで変更分だけが返されます。数値を入力して同期を計画してください。
- 初回フル読み込みのリクエスト数
- 20
- 日次更新 1 回あたりのリクエスト数
- 3
- 評価環境の上限で 1 回読み込むのに必要な日数
- 1
ホテル一覧のみの概算です。コード表と画像で呼び出しが少し増えます。評価環境は 1 日 50 リクエストのため、まず 1 つの目的地でテストしてください。
本番移行チェックリスト
本番に切り替える前に準備すること
Hotelbeds はダッシュボードを通じて、評価から認証、そして本番キーへと進めます。Hotelbeds API 連携でまず押さえるべき点と、PHPTRAVELS での対応は次のとおりです。
- 管理画面に評価キーを追加し、テストホストを選択
- Content API をデータベースに同期し、日次更新を設定
- ホテルを自社一覧にマッピングし、判断が難しい一致を確認
- RECHECK 料金は支払い前に料金の再確認を通過
- hotelMandatory が true の場合は sellingRate を順守
- ゲストの支払い前に料金コメントとキャンセル料を表示
- バウチャーに Hotelbeds の予約番号と料金コメントを表示
- まずキャンセルをシミュレーションし、確定後に手数料を記録
認証の手順と本番アクセスは、契約と市場に応じて Hotelbeds が定めます。
費用
エンジンは一度きりのライセンス、Hotelbeds とは直接契約
PHPTRAVELS はソースコード付き買い切りライセンスです。Hotelbeds はお客様と Hotelbeds の間の別契約なので、ネット料金とキーはお客様のものです。
Hotelbeds は、並行して利用できる複数のホテル仕入れ先の一つです。旅行 API の概要で RateHawk との組み合わせを確認するか、XML サプライヤー一覧 でサプライヤーを比較してください。
二つの部分があります。一つは Content API によるバックグラウンド同期で、ホテル、画像、設備、食事プラン、客室をデータベースに保存します。もう一つは Booking API によるリアルタイムの流れで、空室検索、料金の再確認、予約、キャンセルを行います。PHPTRAVELS はホテルモジュールで両方を実行します。
今も Hotelbeds XML と呼ばれますが、現行の Hotelbeds ドキュメントでは JSON のリクエストとレスポンスが示されています。どちらでも操作は同じで、形式の処理は PHPTRAVELS が行います。
BOOKABLE 料金はすでに最新で、そのまま予約できます。RECHECK 料金は先に料金の再確認を呼び出す必要があり、現在の料金と条件が返されます。PHPTRAVELS は支払い手続きの前にこの呼び出しを行います。
遅いうえ、Hotelbeds は Content API をリアルタイムで使うと認証情報がブロックされる恐れがあると警告しています。コンテンツはページ単位でダウンロードして保存し、lastUpdateTime で 1 日 1 回更新すべきで、PHPTRAVELS はそのように動作します。
はい。Hotelbeds に登録して契約を結び、ご自身の API キーとシークレットを受け取ります。新しいキーは認証を完了するまで、1 日 50 リクエストの評価環境で動作します。
はい。ホテルマッピングで複数の仕入れ先にある同じ施設を結び付けるため、ゲストには最安料金の 1 軒のホテルとして表示され、各仕入れ先は独自のマークアップとルールを維持します。
PHPTRAVELS のプランは からで、ソースコード付き買い切りライセンスです。Hotelbeds との契約は別途、Hotelbeds と直接結びます。料金ページをご覧いただくか、営業に見積もりをご依頼ください。
