Autoryzacja interfejsu API

Aby autoryzować aplikacje podczas uzyskiwania dostępu do interfejsów API hoteli, użyj protokołu OAuth 2.0.

Konfiguracja protokołu OAuth 2.0

Protokół OAuth 2.0 wymaga potwierdzenia tożsamości przy użyciu konta usługi powiązanego z Twoim kontem Google. W zamian za token dostępu OAuth 2.0 konto usługi wysyła Twój klucz prywatny. Następnie możesz używać tego tokena w wywołaniach interfejsów API hoteli, aby uzyskać dane tylko do odczytu, takie jak informacje o cenach, hotelach i danych diagnostycznych dotyczących pliku danych z cenami za pokoje hotelowe.

Tokeny dostępu są ważne przez godzinę (3600 sekund).

Jeśli korzystasz już z ClientLogin, metoda OAuth 2.0 jest podobna, ale występują te różnice:

  • Twoja aplikacja korzysta z konta usługi Google do uzyskiwania dostępu do interfejsu API.
  • Podczas wywoływania interfejsów API przekazujesz token dostępu OAuth 2.0 w nagłówku HTTP Authorization.

Aby skonfigurować na koncie korzystanie z protokołu OAuth 2.0 z Travel Partner API, wykonaj te czynności:

  1. Tworzenie nowego projektu w Google Developers Console (Konsola deweloperska)

  2. Włącz dostęp do interfejsu Travel Partner API w nowym projekcie

  3. Tworzenie konta usługi wraz z danymi logowania

  4. Przyznawanie kontu usługi dostępu do danych o hotelach

Opisujemy je w kolejnych sekcjach.

Krok 1. Utwórz nowy projekt w Konsoli programisty

Konsola Google Developers („DevConsole”) to narzędzie Google przeznaczone dla programistów, które służy do wyświetlania danych o ruchu, uwierzytelniania i informacji rozliczeniowych związanych z interfejsami API Google, z których korzystają Twoje projekty, oraz zarządzania nimi.

W Konsoli programisty projekt to zbiór ustawień, danych logowania i metadanych dotyczących aplikacji lub aplikacji, nad którymi pracujesz, a który korzysta z interfejsów Google Developer API i zasobów Google Cloud.

Konsola deweloperska to miejsce, w którym zarządzasz tymi aspektami projektu, takimi jak generowanie danych logowania do interfejsu API, aktywowanie interfejsów API oraz zarządzanie zespołem i informacjami rozliczeniowymi związanymi z Twoim projektem.

Aby utworzyć nowy projekt w Konsoli programisty:

  1. Zaloguj się na konto Gmail/Google.

  2. Otwórz Google Developer Console. Jeśli jest to Twój pierwszy projekt, w widoku głównym będzie widoczny prosty przycisk UTWÓRZ PROJEKT:

    fig1

  3. Kliknij przycisk UTWÓRZ PROJEKT. Konsola Play wyświetli okno Nowy projekt:

    fig2

    W polu do wprowadzania nazwy Nazwa projektu wpisz przyjazną nazwę nowego projektu. Pod tym polem Konsola deweloperska wygeneruje dla Ciebie identyfikator projektu, aby zapewnić, że będzie on unikalny we wszystkich projektach. Jeśli na przykład wpiszesz „Mój nowy projekt”, DevConsole przypisze identyfikator w rodzaju my-new-project-266022.

  4. Kliknij przycisk Utwórz, aby utworzyć nowy projekt.

  5. W menu nawigacyjnym wybierz Interfejsy API i usługi > Panel.

    fig3

    Ilustracja poniżej przedstawia menu nawigacyjne w lewym górnym rogu Konsoli programisty. Spowoduje to wyświetlenie widoku Panel projektu:

    fig4

Więcej informacji znajdziesz w artykule Zarządzanie projektami w Konsoli programisty.

Z nowo utworzonym projektem nie są jeszcze powiązane żadne interfejsy API. W następnym kroku włączysz Travel Partner API w nowym projekcie.

Krok 2. Włącz Travel Partner API w nowym projekcie

Aby korzystać z interfejsów API hoteli, musisz włączyć interfejs Travel Partner API w nowym projekcie konsoli DevConsole.

Aby włączyć w nowym projekcie interfejsy Hotel API:

  1. Otwórz widok panelu projektu, postępując zgodnie z instrukcjami opisanymi powyżej.

  2. Kliknij Włącz interfejsy API i usługi. Pojawi się strona powitalna biblioteki interfejsów API.

  3. W polu wyszukiwania zacznij wpisywać Travel Partner API. Konsola interfejsów API Google wyświetla listę interfejsów API, które są zgodne z wpisanym przez Ciebie kodem.

  4. Kliknij Travel Partner API w tabeli pasujących interfejsów API. Konsola deweloperska wyświetli opis interfejsu API.

  5. Kliknij przycisk Włącz API, aby włączyć ten interfejs API w swoim projekcie.

Więcej informacji znajdziesz w artykule Aktywowanie i dezaktywowanie interfejsów API.

W nowym projekcie na Twoim koncie Google włączone są interfejsy Hotel API.

Następnym krokiem jest utworzenie konta usługi i wygenerowanie dla niego kluczy.

Krok 3. Utwórz konto usługi i wygeneruj jego dane logowania

Konta usługi są używane w ramach interakcji między serwerami, na przykład między aplikacją internetową a danymi hotelu.

Aby utworzyć i skonfigurować konto usługi:

  1. W widoku głównym Konsoli interfejsów API Google kliknij Dane logowania w panelu nawigacyjnym po lewej stronie. Konsola deweloperska wyświetla widok Dane logowania.

    W widoku Dane logowania są wyświetlane identyfikatory klienta i dane logowania do Twojego projektu. Aplikacja będzie używać identyfikatora klienta podczas żądania tokena dostępu OAuth 2.0. Nowe projekty nie będą jeszcze mieć żadnych klientów ani danych logowania.

  2. Kliknij link Dane logowania w interfejsach API i usługach.

  3. Kliknij przycisk Utwórz dane logowania i w menu wybierz Klucz konta usługi. Pojawi się widok Utwórz klucz konta usługi.

  4. W menu Konto usługi wybierz Nowe konto usługi.

  5. Wpisz nazwę i identyfikator konta usługi.

    Możesz wybrać dowolną nazwę, ale identyfikator konta musi być niepowtarzalny we wszystkich projektach. Konsola deweloperska wygeneruje dla Ciebie unikalny identyfikator konta na podstawie podanej nazwy.

  6. Wybierz P12 jako typ klucza, jak pokazano poniżej. P12 jest wymagany.

    fig5

  7. Kliknij przycisk Utwórz. Konsola deweloperska generuje parę kluczy (publiczny i prywatny) dla Twojego projektu. Klucz prywatny jest zapisywany w domyślnej lokalizacji, w której przeglądarka przechowuje pobrane pliki. Musisz pobrać format .p12 (binarny), a nie .json.

    Klucza prywatnego używasz w skryptach lub innych aplikacjach, które mają dostęp do Travel Partner API.

    Po zakończeniu generowania kluczy Konsola deweloperska wyświetli to powiadomienie:

    fig6

  8. Kliknij przycisk OK. Konsola DevConsole wyświetli widok Credentials (Dane logowania). Aby potwierdzić szczegóły konta usługi i wyświetlić konta usługi powiązane z Twoim projektem, kliknij Zarządzaj kontami usługi w tym widoku.

    Z kontem usługi są teraz powiązane te dane logowania:

    • Identyfikator klienta: unikalny identyfikator używany przez aplikację podczas żądania tokena dostępu OAuth 2.0.
    • Adres e-mail: wygenerowany adres e-mail konta usługi w formacie „account_name@account_name.google.com.iam.gserviceaccount.com”.
    • Odciski cyfrowe certyfikatu: identyfikator pobranego klucza prywatnego.

Więcej informacji znajdziesz w artykule na temat używania protokołu OAuth 2.0 w aplikacjach między serwerami.

Krok 4. Przyznaj kontu usługi dostęp do danych Hotel Center

Ostatnim krokiem jest przyznanie nowemu kontu usługi dostępu do Hotel Center. Konto usługi jest identyfikowane na podstawie wygenerowanego adresu e-mail utworzonego w poprzednim kroku. Zezwalasz na dostęp do tego konta za pomocą ustawień udostępniania w Hotel Center.

Aby przyznać kontu usługi dostęp do danych Hotel Center:

Jeśli nie masz odpowiednich uprawnień do dodawania użytkowników do konta, skontaktuj się z zespołem Google Hotels za pomocą formularza kontaktowego i poproś nas o określenie własności konta. Możesz poprosić o wysłanie co najmniej jednego e-maila do właściciela. Więcej informacji o dostępie do Hotel Center znajdziesz w artykule Łączenie Hotel Center i Google Ads.

  1. W nowym oknie przeglądarki otwórz Hotel Center. fig7

  2. Na banerze Hotel Center by Google kliknij ikonę dodawania użytkownika, aby otworzyć okno udostępniania.

    fig8

  3. W polu Dodaj więcej osób wpisz adres e-mail konta usługi, które chcesz dodać do Hotel Center.

  4. Pozostaw wybraną opcję Wyślij powiadomienie.

  5. W menu wybierz Zarządzaj.

  6. Kliknij przycisk Zaproś.

  7. Gdy dodasz użytkowników do Hotel Center, w ciągu około 24 godzin na Twoim koncie usługi dostęp do interfejsu API powinien zostać włączony.

Gdy Google powiadomi Cię, że dostęp do interfejsu API został włączony na Twoim koncie usługi, możesz zacząć uzyskiwać dostęp do interfejsu API za pomocą protokołu OAuth.

Przy użyciu OAuth 2.0

Aby uzyskać dostęp do interfejsu API, aplikacja musi zidentyfikować się przed Google przy użyciu adresu e-mail i klucza prywatnego wygenerowanego przez konto usługi. Mechanizm uwierzytelniania Google wymienia ten klucz na token dostępu OAuth 2.0, który przekazujesz w nagłówku Authorization w wywołaniach interfejsu API aplikacji.

Tokeny dostępu (nazywane też tokenami okaziciela) są częścią standardu OAuth 2.0. Składnia określająca token dostępu w nagłówku HTTP:

Authorization: Bearer *oauth2_access_token*

Poniższy przykład pokazuje przykładowe nagłówki HTTP żądania, które uzyskuje dostęp do interfejsu Reports API:

GET /travelpartner/v2.0/42000042/reports/top_opportunity_7_day HTTP/1.1
Host: www.googleapis.com
Authorization: Bearer nd42.fdLSKkljD98344444444444lSDF42fdLSKkljD98344444444444lSDF42
Cache-Control: no-cache

Aby wygenerować token dostępu, utwórz aplikację w dowolnym wybranym języku. Poniżej znajduje się przykład generowania tokena w Pythonie. Możesz następnie użyć tego tokena w nagłówkach Authorization żądań podczas uzyskiwania dostępu do Travel Partner API.

#!/usr/bin/python2.7
#
""" Sample code to get an auth header that you can use in your HTTP requests
    1. Please see https://developers.google.com/api-client-library/python/start/installation
       to download and install the google-api-python-client package.
    2. Edit lines below marked _SERVICE_ACCOUNT, _KEY_FILE,  _PARTNER_NAME,
       and _API_VERSION.
    3. Run the program using: "python sample.py". The app returns the value that
       you use for the Authorization header's Bearer token in your request.
    4. Copy the token and use it in requests to the Travel Partner API.
       For example (2.0):
       https://www.googleapis.com/travelpartner/2.0/42000042/reports/budget
       For example (1.x):
       https://www.googleapis.com/travelpartner/1.2/reports?report_type=BUDGET
"""
import httplib2
import json
import os
import sys
import urllib

HAS_CRYPTO = False

from apiclient import discovery
from oauth2client.client import flow_from_clientsecrets
try:
  # Some systems may not have OpenSSL installed so can't use SignedJwtAssertionCredentials.
  from oauth2client.client import SignedJwtAssertionCredentials
  HAS_CRYPTO = True
except ImportError:
  print "Unable to import SignedJwtAssertionCredentials"

from oauth2client import tools
from oauth2client.file import Storage

# Authorization scope for our requests (do not change)
_DEFAULT_APISCOPE = 'https://www.googleapis.com/auth/travelpartner'

# Use the service account you set up in the Google Developers Platform.
# It will be of the form "gsaccount_name@project_name.google.com.iam.gserviceaccount.com".
_SERVICE_ACCOUNT = ('myserviceaccount@my-hotel-project.google.com.iam.gserviceaccount.com')

# Set this to the full path to your service account's private binary .p12 key file
# that you downloaded from the Google Developer's Console and stored in a secure place.
# DO NOT use the json version of the certificate.
_KEY_FILE = '../mylocaldir/api-keys/8482bb2bdb08.p12'

# Set this to the case-sensitive "Partner Key", NOT the account
# name in the Hotel Ads Center or the numeric partner ID.
# Check with your TAM if you do not know your "Partner Key" name.
_PARTNER_NAME = 'testpartner2'

class HotelAdsAPIConnection(object):
  def __init__(self, service_account=_SERVICE_ACCOUNT, key=_KEY_FILE, partner=_PARTNER_NAME):
    self.key_file = key
    self.account = service_account
    self.partner = partner

  def InitializeCredentials(self, scope):
    '''Get credentials for use in API requests.
    Generates service account credentials if the key file is present,
    and regular user credentials if the file is not found.
    '''
    if os.path.exists(self.key_file):
      if not HAS_CRYPTO:
        raise Exception("Unable to use cryptographic functions "
                        + "Try installing OpenSSL")
      with open (self.key_file, 'rb') as file:
        key = file.read();
      creds = SignedJwtAssertionCredentials(self.account, key, scope)
      self.credentials = creds

  def authorize(self):
    '''Construct a HTTP client that uses the supplied credentials.'''
    return credentials.authorize(httplib2.Http())

  def print_creds(self):
    '''Prints the Authorization header to use in HTTP requests.'''
    cred_dict = json.loads(self.credentials.to_json())

    if 'access_token' in cred_dict:
      print 'Authorization: Bearer %s' % (cred_dict['access_token'],)
    else:
      print 'creds: %s' % (cred_dict,)

  def GetConnection(self):
    http = httplib2.Http()
    self.credentials.refresh(http)
    http = self.credentials.authorize(http)
    self.print_creds()
    return http

def main(args):
  # Create an instance of the HotelAdsAPIConnection inner class
  api = HotelAdsAPIConnection()

  # Generate credentials
  api.InitializeCredentials(_DEFAULT_APISCOPE)

  # Output the Authorization header to use in HTTP requests
  api.GetConnection()

if __name__ == "__main__":
    main(sys.argv)</pre>

Podczas tworzenia aplikacji pamiętaj o stosowaniu sprawdzonych metod bezpiecznego korzystania z kluczy interfejsu API.

Przykładowy skrypt Pythona zwraca token okaziciela nagłówka Authorization, jak pokazano w tym przykładzie:

$ python sample.py
Authorization: Bearer ya29.42424242sample_420icu8122KSvoh4T42cRoG3rW1lc0Q
$

Używaj wartości tokena w żądaniach. Warto go używać przez godzinę od jego wygenerowania.

Rozwiązywanie problemów

Masz problemy? Aby rozwiązać problem, spróbuj wykonać kilka czynności.

  1. Czy projekt został utworzony w Google Developer Console?
  2. Udało Ci się znaleźć i włączyć: Travel Partner API?
  3. Czy po kliknięciu Utwórz identyfikator klienta i wybraniu Konto usługi został pobrany plik .p12 (klucz prywatny)?
  4. Czy dotarł do Ciebie adres e-mail z identyfikatorem klienta konta usługi w formularzu: nnnnnnn@app_name.google.com.iam.gserviceaccount.com?
  5. Czy konto Hotel Ads Center zostało udostępnione kontu usługi poprzez kliknięcie przycisku Udostępnij to konto?
  6. Czy adres e-mail konta usługi i identyfikator partnera zostały wysłane do technicznego menedżera konta (TAM)?
  7. Czy wywołania Travel Partner API przekazują w nagłówku Authorization ostatnio uzyskany token?
  8. Czy token okaziciela nagłówka Authorization ma więcej niż godzinę?

W tabeli poniżej znajdziesz kilka częstych błędów i możliwych sposobów ich rozwiązania:

Błąd Opis
Invalid credentials To może oznaczać kilka rzeczy. Jeśli widzisz ten błąd, sprawdź, czy:
  • Określono nagłówek Authorization z prawidłowym tokenem okaziciela.
  • Token okaziciela ma mniej niż godzinę. Token jest ważny tylko przez 1 godzinę.
  • Podano prawidłową nazwę partnera (z parametrem ciągu zapytania partner). Wartością jest Twój unikalny identyfikator partnera, a nie nazwa partnera widoczna w Hotel Ads Center. Jeśli nie znasz swojego identyfikatora partnera, skontaktuj się z technicznym menedżerem konta.
Not found Punkt końcowy najprawdopodobniej jest uszkodzony. Sprawdź, czy przesyłasz żądanie GET i czy URL żądania jest prawidłowy (jest zgodny ze składnią interfejsu API, do której próbujesz uzyskać dostęp).
Invalid string value Co najmniej jedna część punktu końcowego zawiera nieprawidłową składnię. Możliwe na przykład, że część ścieżki została wpisana z błędem. Sprawdź, czy w całej ścieżce zostały użyte prawidłowe podkreślenia, wielkość liter i sformułowania.
Unsupported output format Ten błąd najczęściej występuje podczas korzystania z interfejsu Reports API. Musisz określić "alt=csv" w adresie URL żądania GET. Interfejs Reports API nie obsługuje formatu JSON.
AccessTokenRefreshError/Invalid grant Podczas uruchamiania przykładowej aplikacji w Pythonie ten błąd może mieć następujące przyczyny:
  • Adres e-mail konta usługi jest nieprawidłowy. Sprawdź konto e-mail w Google Developers Console i upewnij się, że ma ono uprawnienia dostępu do interfejsu API.
  • Ten adres e-mail nie ma dostępu do interfejsu API. Sprawdź, czy adres e-mail ma dostęp do danych o Twoich hotelach (udostępnianych przez Hotel Center).
  • Plik klucza nie jest prawidłowym plikiem dla konta usługi. Użyj konsoli programisty, aby pobrać nowy certyfikat .p12 i upewnij się, że aplikacja w Pythonie wskazuje właściwy.
HotelAdsAPIConnection object has no attribute credentials Podczas uruchamiania przykładowej aplikacji w Pythonie ścieżka do pliku .p12 jest nieprawidłowa.
Invalid scope Podczas uruchamiania przykładowej aplikacji w Pythonie zakres interfejsu API musi mieć wartość https://www.googleapis.com/auth/travelpartner.
Forbidden Używany przez Ciebie identyfikator konta to taki, do którego nie masz uprawnień dostępu. Jeśli jesteś właścicielem subkonta, możesz nie mieć dostępu do identyfikatora konta nadrzędnego lub głównego.