Autoryzacja interfejsu API

Używanie protokołu OAuth 2.0 do autoryzowania aplikacji przy użyciu hotelowych interfejsów API.

Konfiguracja protokołu OAuth 2.0

Protokół OAuth 2.0 wymaga od Ciebie identyfikacji się za pomocą konta usługi powiązane z Twoim kontem Google. Konto usługi wysyła dane prywatne w zamian za token dostępu OAuth 2.0. Następnie możesz użyć tego tokena w wywołania interfejsów API hoteli w przypadku danych tylko do odczytu, takich jak ceny, hotel czy dane do raportu diagnostycznego o pliku danych z cenami hoteli.

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

Jeśli masz już zaimplementowany interfejs ClientLogin, protokół OAuth 2.0 będzie podobny, z tymi różnicami:

  • Twoja aplikacja uzyskuje dostęp do interfejsu API za pomocą konta usługi Google.
  • Gdy przekazujesz token dostępu OAuth 2.0 w nagłówku HTTP Authorization, i wywoływanie interfejsów API.

Aby skonfigurować swoje konto do używania protokołu OAuth 2.0 w połączeniu z Travel Partner API, wykonaj te czynności:

  1. Tworzenie nowego projektu w Google Developers Console (DevConsole)

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

  3. Tworzenie konta usługi i jego danych logowania

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

Każdy z tych kroków jest opisany w dalszej części tego artykułu.

Krok 1. Utwórz nowy projekt DevConsole

Google Developers Console („DevConsole”) to interfejs Google dla programistów do zarządzania danymi o ruchu, uwierzytelnianiem i informacjami rozliczeniowymi oraz zarządzanie nimi dla interfejsów API Google, z których korzystają Twoje projekty.

Projekt w DevConsole to zbiór ustawień, danych logowania i metadane dotyczące aplikacji, nad którymi pracujesz, który wykorzystuje interfejsy Google Developer API i zasoby Google Cloud.

Konsola DevConsole to miejsce, w którym zarządzasz tymi aspektami projektu, takimi jak: generowanie danych logowania API, aktywowanie interfejsów API oraz zarządzanie zespołem i rozliczeniami powiązane z projektem.

Aby utworzyć nowy projekt w DevConsole:

  1. Zaloguj się na swoje konto Gmail/Google.

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

    fig1

  3. Kliknij przycisk UTWÓRZ PROJEKT. DevConsole wyświetla Okno Nowy projekt:

    fig2

    Wpisz przyjazną nazwę nowego projektu w polu Nazwa projektu. pola do wprowadzania danych. Poniżej tego pola devConsole wygeneruje identyfikator projektu, co pozwoli Ci zadbać o to, by identyfikator był unikalny we wszystkich projektach. Jeśli na przykład wpisz „My New Project” (Mój nowy projekt), a DevConsole przypisze im identyfikator taki jak my-new-project-266022

  4. Aby utworzyć nowy projekt, kliknij przycisk Utwórz.

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

    fig3

    Na ilustracji poniżej w lewym górnym rogu w Konsoli deweloperskiej. Wyświetli się widok Panel projektu:

    fig4

Więcej informacji znajdziesz w artykule Zarządzanie projektami na stronie Programiści Konsola.

Gdy utworzysz nowy projekt, nie będą z nim powiązane żadne interfejsy API. W W następnym kroku włączysz Travel Partner API dla swojego nowego projektu.

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

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

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

  1. Otwórz widok panelu projektu w sposób opisany powyżej.

  2. Kliknij Włącz interfejsy API i usługi. Wyświetli się powitalna biblioteka interfejsów API stronę.

  3. W polu wyszukiwania zacznij wpisywać Travel Partner API. Konsola interfejsów API Google wyświetla listę interfejsów API pasujących do wpisywanego tekstu.

  4. Kliknij Travel Partner API w tabeli pasujących interfejsów API. DevConsole wyświetla 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.

Interfejsy API hoteli zostały włączone w nowym projekcie na Twoim koncie Google.

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 aplikacji internetowej i danych hoteli.

Aby utworzyć i skonfigurować konto usługi:

  1. W widoku głównym Konsoli interfejsów API Google kliknij Dane logowania w nawigacji po lewej stronie. DevConsole wyświetla widok Credentials (Dane logowania).

    W widoku Dane logowania wyświetlane są identyfikatory klientów i dane logowania do w projektach AI. Aplikacja użyje tego identyfikatora w żądaniu Token dostępu OAuth 2.0. Nowe projekty nie będą miały klientów ani danych logowania .

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

  3. Kliknij przycisk Utwórz dane logowania i wybierz Klucz konta usługi. z menu rozwijanego. 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.

    Nazwa może być dowolna, ale identyfikator konta musi być niepowtarzalny we wszystkich projektach. DevConsole wygeneruje dla Ciebie unikalny identyfikator konta, na podstawie wpisanej nazwy.

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

    fig5

  7. Kliknij przycisk Utwórz. DevConsole generuje parę kluczy (prywatny/publiczny) do swojego projektu. Klucz prywatny jest zapisywany w domyślnej lokalizacji, przeglądarka zapisuje pobrane pliki. Musisz pobrać .p12 (binarne) zamiast .json.

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

    DevConsole wyświetli następujące powiadomienie po zakończeniu generowania Klucze:

    fig6

  8. Kliknij przycisk OK, rozumiem. DevConsole powraca do Widok Dane logowania. Aby potwierdzić szczegóły Twojego konta usługi oraz aby wyświetlić konta usługi powiązane z projektem, kliknij Zarządzaj kont usługi w tym widoku.

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

    • Identyfikator klienta: unikalny identyfikator wykorzystywany przez aplikację, gdy żądania tokena dostępu OAuth 2.0.
    • Adres e-mail: wygenerowany adres e-mail konta usługi w formularz „account_name@account_name.google.com.iam.gserviceaccount.com”.
    • Odciski cyfrowe certyfikatu: identyfikator klucza prywatnego, który został przez Ciebie użyty pobrano.
.

Więcej informacji znajdziesz w artykule Using OAuth 2.0 for Server do Aplikacje serwerowe.

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

Ostatnim krokiem jest przyznanie nowemu kontu usługi dostępu do Twojego Hotel Center Konto usługi jest identyfikowane przez wygenerowany adres e-mail, który utworzony w poprzednim kroku. Przyznasz dostęp do tego konta, używając ustawienia udostępniania Hotel Center.

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

Jeśli nie masz odpowiednich uprawnień, aby dodać użytkowników do konta, skontaktuj się z Zespół ds. hoteli Google, korzystając z formularza kontaktowego, i poproś o skonfigurowanie własności domeny swoje konto. Możesz poprosić o przyznanie jednego lub kilku e-maili do właściciela. Więcej informacji o dostępie do Hotel Center znajdziesz w artykule Łączenie konta Hotel Center 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ć okna udostępniania.

    fig8

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

  4. Pozostaw zaznaczoną opcję Powiadom innych.

  5. W menu wybierz Zarządzaj.

  6. Kliknij przycisk Zaproś.

  7. Gdy dodasz użytkowników do Hotel Center, Twoje konto usługi powinno zostać włączono dostęp do interfejsu API w ciągu około 24 godzin.

Gdy Google powiadomi Cię, że dostęp przez interfejs API jest włączony dla Twojej usługi możesz zacząć korzystać z interfejsu API przy użyciu protokołu OAuth.

Korzystanie z OAuth 2.0

Aby uzyskać dostęp do interfejsu API, aplikacja musi być zidentyfikowana przed Google za pomocą atrybutu wygenerowany adres e-mail i klucz prywatny konta usługi. Google że mechanizm uwierzytelniania 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ą protokołu OAuth 2.0 standardowy. Składnia, która służy do określania tokena dostępu w nagłówku HTTP:

Authorization: Bearer *oauth2_access_token*

Poniższy przykład pokazuje przykładowe nagłówki HTTP żądania uzyskującego dostęp do Interfejs 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 języku. Poniższy przykład generuje token w Pythonie. Następnie możesz użyć tego w żądaniach Authorization podczas uzyskiwania dostępu do pola 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 postępuj zgodnie ze sprawdzonymi metodami bezpiecznego korzystania z kluczy interfejsu API.

Przykładowy skrypt w Pythonie generuje element okaziciela nagłówka Authorization jak w poniższym przykładzie:

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

Używaj wartości tokena w żądaniach. Działa przez 1 godzinę po go wygenerować.

Rozwiązywanie problemów

Masz problemy? Szybkie sprawdzenie tych elementów może rozwiązać i rozpoznają problem.

  1. Czy masz projekt utworzony w Google Developer Console?
  2. Czy udało Ci się znaleźć i włączyć Travel Partner API?
  3. Czy pobrałeś plik .p12 – klucz prywatny po kliknięciu? Utworzyć identyfikator klienta i wybrać Konto usługi?
  4. Czy masz adres e-mail powiązany z identyfikatorem klienta konta usługi i formularzem: nnnnnnn@app_name.google.com.iam.gserviceaccount.com?
  5. Czy konto Hotel Ads Center zostało udostępnione kontu usługi przez kliknięcie? przycisk Udostępnij to konto?
  6. Czy adres e-mail konta usługi i identyfikator partnera zostały wysłane na adres technicznym menedżerem konta (TAM)?
  7. Czy wywołania funkcji Travel Partner API przekazują ostatnio uzyskany token w Authorization?
  8. Czy token okaziciela nagłówka Authorization ma więcej niż godzinę?

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

Błąd Opis
Invalid credentials Może to oznaczać kilka rzeczy. W przypadku tego błędu sprawdź, czy:
  • Określono nagłówek Authorization z prawidłową wartością nośnika token.
  • Token okaziciela ma mniej niż godzinę. Token jest ważny tylko przez godzinę.
  • Podano prawidłową nazwę partnera (z partner parametru ciągu zapytania). Wartością jest Twój unikalny identyfikator partnera, nie nazwę partnera, która jest widoczna w Hotel Ads Center. Jeśli nie znasz swojego partnera identyfikatora, skontaktuj się z technicznym menedżerem konta (TAM).
Not found Punkt końcowy najprawdopodobniej jest uszkodzony. Sprawdź, czy przesyłasz GET oraz czy adres URL żądania jest prawidłowy (jest zgodny do 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ę. Przykład: ale część ścieżki została zapisana z błędem. Sprawdź, czy użyto prawidłowego znaków podkreślenia, wielkich liter i słów na całej ścieżce.
Unsupported output format Ten błąd występuje najczęściej podczas korzystania z interfejsu Reports API. Musisz podaj "alt=csv" w adresie URL Twojej GET użytkownika. Interfejs Reports API nie obsługuje formatu JSON.
AccessTokenRefreshError/Invalid grant Podczas uruchamiania przykładowej aplikacji w Pythonie ten błąd może być spowodowany przez spośród następujących:
  • Adres e-mail konta usługi jest nieprawidłowy. Sprawdź e-maila w Google Developer Console i upewnij się, że ma ono uprawnienia dostępu do API.
  • Adres e-mail nie ma dostępu do interfejsu API. Sprawdź, czy e-mail ma uprawnienia dostępu do danych o hotelach (udostępnianych przez Hotel Center).
  • Plik klucza jest nieprawidłowy w przypadku konta usługi. Użyj DevConsole pobierze nowy certyfikat .p12 i upewnij się, aplikacja w Pythonie wskazuje właściwy adres.
HotelAdsAPIConnection object has no attribute credentials Podczas uruchamiania przykładowej aplikacji w Pythonie ścieżka do pliku .p12 jest nieprawidłowy.
Invalid scope Podczas uruchamiania przykładowej aplikacji w Pythonie zakres interfejsu API musi mieć postać https://www.googleapis.com/auth/travelpartner
Forbidden Używany przez Ciebie identyfikator konta nie jest autoryzowany. aby uzyskać dostęp. Jeśli jesteś właścicielem subkonta, możesz nie mieć dostępu do identyfikator konta nadrzędnego lub konta głównego.