В этой документации представлены пошаговые инструкции по настройке OAuth2.0 в вашем приложении при доступе к API отеля, таким как API Travel Partner и API ценовых каналов. См. раздел Использование OAuth 2.0 для доступа к API Google для авторизации вашего приложения.
Настройка OAuth 2.0
OAuth 2.0 требует, чтобы вы идентифицировали себя, используя учетную запись службы, связанную с вашей учетной записью Google. Учетная запись службы отправляет ваш закрытый ключ в обмен на токен доступа OAuth 2.0. Затем вы можете использовать этот токен при вызовах API-интерфейсов отеля для получения данных только для чтения , таких как данные о ценах, отеле и диагностические отчеты о фиде цен на ваш отель.
Токены доступа действительны в течение часа (3600 секунд).
Если вы ранее реализовали ClientLogin, подход OAuth 2.0 аналогичен, но со следующими отличиями:
- Ваше приложение использует учетную запись службы Google для доступа к API.
- Вы передаете токен доступа OAuth 2.0 в HTTP-заголовке
Authorization
при вызове API.
Чтобы настроить свою учетную запись для использования OAuth 2.0 с любым API отелей, выполните следующие действия:
Каждый из этих шагов описан в следующих разделах.
Шаг 1. Создайте новый проект консоли Google Cloud.
Консоль Google Cloud используется для управления и просмотра данных о трафике, аутентификации и платежной информации для API Google, которые используются в ваших проектах.
В консоли Google Cloud проект представляет собой набор настроек, учетных данных и метаданных о приложении, над которым вы работаете, которое использует API-интерфейсы разработчиков Google и ресурсы Google Cloud.
Консоль Google Cloud также используется для создания учетных данных API, активации API, а также управления командой и платежной информацией, связанной с вашим проектом.
Чтобы создать новый проект консоли Google Cloud:
Войдите в свою учетную запись Gmail или Google.
Откройте консоль Google Cloud . Если это ваш первый проект, на главном экране появится кнопка СОЗДАТЬ ПРОЕКТ :
Нажмите кнопку СОЗДАТЬ ПРОЕКТ . Консоль Google Cloud отображает диалоговое окно «Новый проект» :
Введите понятное имя для вашего нового проекта в поле ввода «Имя проекта» . Под полем консоль Google Cloud генерирует для вас идентификатор проекта, гарантируя, что этот идентификатор уникален для всех проектов. Например, если вы введете «Мой новый проект», консоль Google Cloud присвоит идентификатор, например
my-new-project-266022
.Нажмите кнопку «Создать» , чтобы создать новый проект.
В меню навигации выберите API и службы > Панель мониторинга .
На следующем изображении показано меню навигации в левом верхнем углу консоли Google Cloud. Это отобразит вид панели мониторинга для вашего проекта:
Дополнительную информацию см. в разделе Создание проектов и управление ими .
Шаг 2. Создайте учетную запись службы и сгенерируйте ее учетные данные.
Учетные записи служб используются при межсерверном взаимодействии, например между веб-приложением и данными вашего отеля.
Чтобы создать и настроить учетную запись службы:
В главном представлении консоли Google API нажмите «Учетные данные» на панели навигации слева. Консоль Google Cloud отображает представление учетных данных .
В представлении «Учетные данные» отображаются идентификаторы клиентов и учетные данные для вашего проекта. Ваше приложение использует идентификатор клиента при запросе токена доступа OAuth 2.0. У новых проектов пока нет ни клиентов, ни учетных данных.
Нажмите ссылку «Учетные данные в API и службах» .
Нажмите кнопку «Создать учетные данные» и выберите «Ключ служебной учетной записи» из фильтра. Откроется представление «Создать ключ учетной записи службы» .
В фильтре учетной записи службы выберите «Новая учетная запись службы» .
Введите имя учетной записи службы и идентификатор учетной записи службы.
Имя может быть любым, но идентификатор учетной записи должен быть уникальным во всех проектах. Консоль Google Cloud генерирует для вас уникальный идентификатор учетной записи на основе введенного вами имени.
Выберите JSON в качестве типа ключа. Требуется JSON .
Нажмите кнопку «Создать» . Консоль Google Cloud генерирует пару частных или открытых ключей для вашего проекта. Закрытый ключ сохраняется в папке по умолчанию, в которой ваш браузер сохраняет загрузки. Вам необходимо скачать файл формата
.JSON
.Вы используете закрытый ключ в своих скриптах или других приложениях, которые обращаются к вашему API.
Консоль Google Cloud отображает сообщение «Учетная запись службы создана» после завершения генерации ключей.
Нажмите кнопку ОК, понятно . Консоль Google Cloud возвращает вас к представлению учетных данных . Чтобы подтвердить сведения о своей учетной записи службы и просмотреть учетную запись службы, связанную с вашим проектом, нажмите «Управление учетными записями служб» в этом представлении.
Теперь с учетной записью службы связаны следующие учетные данные:
- Идентификатор клиента: уникальный идентификатор, который ваше приложение использует при запросе токена доступа OAuth 2.0.
- Адрес электронной почты: сгенерированный адрес электронной почты для учетной записи службы в форме " имя_аккаунта @ имя_проекта .google.com.iam.gserviceaccount.com".
- Отпечатки сертификата: идентификатор загруженного вами закрытого ключа.
Дополнительную информацию см. в разделе Использование OAuth 2.0 для межсерверных приложений .
Шаг 3. Предоставьте сервисному аккаунту доступ к данным вашего Hotel Center.
Последний шаг — предоставить новому сервисному аккаунту доступ к вашему Hotel Center . Учетная запись службы идентифицируется по сгенерированному адресу электронной почты, который вы создали на предыдущем шаге. Вы предоставляете доступ к этой учетной записи, используя настройки общего доступа Hotel Center .
Если у вас нет надлежащего доступа для добавления пользователей в учетную запись, свяжитесь с командой Google Hotels, используя форму обратной связи , и попросите установить право собственности на вашу учетную запись. Вы можете запросить отправку владельцу одного или нескольких электронных писем. Дополнительную информацию о доступе к Hotel Center см. в разделе Link Hotel Center и Google Ads .
Чтобы предоставить сервисному аккаунту доступ к данным вашего Hotel Center:
В новом окне браузера откройте Hotel Center .
На баннере Hotel Center by Google щелкните значок добавления пользователя, чтобы открыть диалоговое окно общего доступа.
В поле «Добавить больше людей» введите адрес электронной почты сервисной учетной записи, которую вы хотите добавить в свой Hotel Center .
Оставьте выбранной опцию «Уведомить людей» .
Выберите «Управление» в фильтре.
Нажмите кнопку «Пригласить» .
После того как вы добавите пользователей в свой Hotel Center , вашему сервисному аккаунту будет предоставлен доступ к API в течение примерно 24 часов.
После того как Google уведомит вас о том, что доступ к API включен для вашей учетной записи службы, вы можете начать получать доступ к API с помощью OAuth 2.0.
Как использовать OAuth 2.0
Чтобы получить доступ к API, ваше приложение должно идентифицировать себя в Google с помощью сгенерированного адресом электронной почты и секретным ключом учетной записи службы. Механизм аутентификации Google заменяет этот ключ на токен доступа OAuth 2.0, который вы передаете в заголовке Authorization
в вызовах API вашего приложения.
См. раздел Подготовка к делегированному вызову API .
Области применения
Ниже приведены SCOPES
API для отелей:
API-интерфейс Travel Partner: "https://www.googleapis.com/auth/travelpartner"
API каналов цен: "https://www.googleapis.com/auth/travel-partner-price-upload"
При создании учетных данных следует указать учетную запись службы. См. раздел Создание учетной записи службы и создание ее учетных данных .
При разработке приложения обязательно следуйте рекомендациям по аутентификации приложения с помощью ключей API. Узнать больше .
Пример
from google.oauth2 import service_account
from google.auth.transport.requests import Request
# You can use a single or multiple scopes
SCOPES =
['https://www.googleapis.com/auth/travel-partner-price-upload','https://www.googleapis.com/auth/travelpartner']
SERVICE_ACCOUNT_FILE = 'service_account_key_file.json'
cred = service_account.Credentials.from_service_account_file(
SERVICE_ACCOUNT_FILE,
scopes=SCOPES)
cred.refresh(Request())
headers = {}
cred.apply(headers)
API туристического партнера
API Travel Partner позволяет партнерам по размещению получать информацию Hotel Center и изменять данные Hotel Center для управления большими или сложными учетными записями.
Следуйте инструкциям по настройке OAUTH 2.0 , чтобы получить авторизацию для вашего Travel Partner API.
Когда вы создаете новый проект для API Travel Partners, вам необходимо включить доступ к новому проекту консоли Google Cloud.
Выполните следующие действия, чтобы включить доступ к API Travel Partners:
Перейдите в панель мониторинга вашего проекта.
Нажмите «Включить API и службы» . Откроется страница приветствия библиотеки API.
В поле поиска начните вводить «API туристического партнера», а затем консоль отобразит список API, соответствующих введенному вами слову.
Щелкните API, соответствующий таблице. Консоль Google Cloud отображает описание этого API.
Нажмите кнопку «Включить API» , чтобы включить этот API для вашего проекта.
Дополнительную информацию см. в разделе Включение и отключение служб .
API Travel Partner теперь включен для нового проекта вашего аккаунта Google.
Область действия API Travel Partner: "https://www.googleapis.com/auth/travelpartner"
Конечная точка для Travel Partner API: "https://travelpartner.googleapis.com/v3/accounts/<account_id>/<path>"
API ценовых каналов
API Price Feeds позволяет партнерам по размещению предоставлять индивидуальные данные о ценах для каждого отеля. Партнеры Google по размещению могут использовать OAuth2.0 для аутентификации и авторизации при загрузке цен в Google. Следуйте инструкциям по настройке OAUTH 2.0 , чтобы получить авторизацию для API ценовых каналов.
Что следует помнить
Обратите внимание на важные различия в инструкциях по авторизации для API ценовых каналов.
Партнерам следует создать новый проект OAuth2.0 «Фиды цен» в консоли Google Cloud, используя те же инструкции, что и при настройке OAuth 2.0 .
Включение API ценовых каналов в консоли Google Cloud НЕ является обязательным и его можно игнорировать. Вам понадобится только одна учетная запись и ключ службы, а затем использовать ту же учетную запись и ключ службы, чтобы предоставить проекту Price Feeds доступ к вашим данным Hotel Center. Выполните оставшиеся шаги, упомянутые в настройке OAuth2.0, чтобы завершить настройку API.
Получите токен доступа OAuth2.0 для каналов цен
Следующий шаг — получить токен доступа OAuth2.0 с областью загрузки цен на жилье, используя файл ключей сервисного аккаунта. Вы можете авторизовать запросы к своему проекту «Фиды цен», следуя инструкциям, приведенным в разделе «Подготовка к делегированному вызову API» , а затем извлечь токен доступа из полученных учетных данных и установить его в HTTP-заголовке "Authorization"
.
Область загрузки цен на жилье: "https://www.googleapis.com/auth/travel-partner-price-upload"
Загрузить цены
После получения токена доступа партнеры могут загрузить свой фид цен аналогично использованию статического IP-адреса для аутентификации и авторизации со следующей модификацией:
- Установите токен доступа в HTTP-заголовке
"Authorization"
curl -X POST -H "Authorization: Bearer <access token>"
www.google.com/travel/lodging/uploads/accounts/<account_id>/ota/hotel_rate_amount_notif --data-binary @<price_feed_file_location>
Тестовая настройка OAuth2.0 для API ценовых каналов
Вы можете протестировать настройку OAuth2.0, загрузив пустой файл или данные о реальных ценах по любому из путей загрузки. Используйте таблицу, чтобы проверить статус ответа HTTP.
Статус HTTP-ответа | Сообщение |
---|---|
200 | Successful (OK) |
401 | Service account creation or access token fetch was not successful |
403 | Service account access wasn't granted to the Hotel Center account or both the service account key and access token has expired |
Поиск неисправностей
Возникли проблемы? Быстрая проверка следующих элементов может решить проблему.
- Вы создали проект в консоли Google Cloud ?
- Вы включили эту службу в своем проекте?
- Загрузили ли вы файл
.JSON
— закрытый ключ после нажатия кнопки «Создать идентификатор клиента» и выбора учетной записи службы ? - Получили ли вы адрес электронной почты с идентификатором клиента сервисного аккаунта в форме:
nnnnnnn@app_name.google.com.iam.gserviceaccount.com
? - Вы предоставили общий доступ к своему аккаунту Hotel Ads Center сервисному аккаунту, нажав кнопку «Поделиться этим аккаунтом» ?
- Отправили ли вы адрес электронной почты сервисного аккаунта и идентификатор партнера своему техническому менеджеру по работе с клиентами (TAM)?
- Передаются ли ваши вызовы API недавно полученного токена в заголовке
Authorization
? - Вашему токену больше 1 часа?
В следующей таблице перечислены некоторые распространенные ошибки и возможные решения:
Ошибка | Описание |
---|---|
Invalid credentials | Это может означать несколько вещей. Если вы столкнулись с этой ошибкой, проверьте следующее:
|
Not found | Ваша конечная точка, скорее всего, неправильно сформирована. Убедитесь, что вы отправляете запрос GET и что URL-адрес запроса действителен (он соответствует синтаксису API, к которому вы пытаетесь получить доступ). |
Invalid string value | Одна или несколько частей конечной точки содержат недопустимый синтаксис. Например, вы могли неправильно написать часть пути. Убедитесь, что вы использовали правильные символы подчеркивания, заглавные буквы и формулировки на протяжении всего пути. |
Unsupported output format | Эта ошибка чаще всего возникает при использовании API отчетов. Вы должны указать "alt=csv" в URL-адресе вашего запроса GET . API отчетов не поддерживает JSON. |
AccessTokenRefreshError/Invalid grant | При запуске приложения эта ошибка может быть вызвана следующими причинами:
|
HotelAdsAPIConnection object has no attribute credentials | При запуске приложения указан неверный путь к файлу .JSON . |
Invalid scope | При запуске приложения ваша область API должна быть одной из следующих:
|
Forbidden | Идентификатор учетной записи, который вы используете, — это идентификатор, для доступа к которому у вас нет разрешения. Если вы являетесь владельцем дополнительной учетной записи, возможно, вы не сможете получить доступ к идентификатору родительской или корневой учетной записи. |