API Kimlik Doğrulaması

Otel API'lerine erişebilmek için uygulamanızın kimliğini doğrulamak üzere OAuth 2.0 kullanın.

OAuth 2.0'ı kurma

OAuth 2.0 API, Google Hesabınızla ilişkilendirilmiş bir Hizmet Hesabı kullanarak kendinizi tanıtmanızı gerektirir. Hizmet Hesabı, bir OAuth 2.0 erişim jetonu karşılığında özel bir anahtar (sizin oluşturacağınız) gönderir. Daha sonra, Otel Fiyatı Feed'inizle ilgili fiyatlandırma, otel ve teşhis raporu verileri gibi salt okunur veriler için otel API'lerine yapılan çağrılara bu jetonu geçirirsiniz.

Erişim jetonu 3.600 saniye (bir saat) sürelidir.

Daha önce ClientLogin'i uyguladıysanız OAuth 2.0 yaklaşımı da aşağıdaki farklılıklara sahip olmak üzere benzerdir:

  • Uygulamanız API'ye erişmek için bir Google Hizmet Hesabı kullanır.
  • API'leri çağırdığınızda Authorization HTTP üst bilgisinde OAuth 2.0 erişim jetonunu geçirirsiniz.

Hesabınızı "Travel Partner API" ile OAuth 2.0'ı kullanacak şekilde ayarlamak için aşağıdaki genel adımları uygulayın:

  1. Google Developers Console'da (DevConsole) yeni bir Proje oluşturun
  2. Yeni Proje için "Travel Partner API"ye erişimi etkinleştirin
  3. Bir Hizmet Hesabı ve hesapla ilgili kimlik bilgileri oluşturun
  4. Hizmet Hesabınızın otel verilerinize erişmesine izin verin

Bu adımların her biri sonraki bölümlerde açıklanmaktadır.

1. Adım: Yeni bir DevConsole Projesi oluşturun

Google Developers Console ("DevConsole"), projelerinizin kullandığı Google API'leri için trafik verilerini, kimlik doğrulamasını ve fatura bilgilerini yönetmek ve görüntülemek amacıyla Google tarafından sunulan geliştirici deneyimidir.

DevConsole'da bir proje, üzerinde çalışmakta olduğunuz ve Google Developers API'lerinden ve Google Cloud kaynaklarından yararlanan uygulamalarla ilgili ayarları, kimlik bilgilerini ve meta verileri içeren bir koleksiyondur.

DevConsole, projenizin API kimlik bilgileri oluşturma, API'leri etkinleştirme, projenizle ilişkilendirilmiş ekip ve fatura bilgilerini yönetme gibi unsurlarını yönettiğiniz yerdir.

Yeni bir DevConsole projesi oluşturmak için:

  1. Gmail/Google Hesabınıza giriş yapın.
  2. Google Developers Console'u açın. Bu ilk projenizse ana görünümde basit bir Proje Oluştur düğmesi gösterilir:
  3. Proje Oluştur düğmesini tıklayın. DevConsole, Yeni Proje iletişim kutusunu gösterir:

    Proje adı giriş alanına yeni projeniz için bir kolay ad girin. Alanın altında, DevConsole sizin için bir proje kimliği oluşturur. Kimliğin tüm projeler genelinde benzersiz olmasını sağlar. Örneğin, "Yeni Projem" adını girerseniz DevConsole "yeni-projem-266022" gibi bir kimlik atar.

  4. Yeni projenizi oluşturmak için Oluştur düğmesini tıklayın. DevConsole yeni projeyi oluşturur.
  5. Gezinme menüsünü kullanarak API'ler ve Hizmetler > Kontrol Paneli öğesini seçin.

    Resimde de görebileceğiniz gibi, gezinme menüsü DevConsole'un sol üst tarafındadır. Bu işlem, Kontrol Paneli görünümünü açar:

Daha fazla bilgi için Developers Console'da Projeleri Yönetme bölümüne bakın.

Yeni bir proje oluşturduğunuzda henüz bu projeyle ilişkilendirilmiş API yoktur. Sonraki adımda, yeni Projeniz için Travel Partner API'yi etkinleştireceksiniz.

2. Adım: Yeni Proje için Travel Partner API'yi etkinleştirin

Otel API'lerini kullanmak için yeni DevConsole projenizde Travel Partner API'yi etkinleştirmeniz gerekir.

Yeni projenizde otel API'lerini etkinleştirmek için:

  1. Yukarıda açıklandığı gibi projenizin Kontrol Paneli görünümüne gidin.
  2. API'leri ve Hizmetleri Etkinleştir'i tıklayın. Bu işlem, API Kitaplığı karşılama sayfasını görüntüler.
  3. Arama alanına "Travel Partner API" yazmaya başlayın. Google API Konsolu, yazdıklarınızla eşleşen API'lerin listesini gösterir.
  4. Eşleşen API'ler tablosunda Travel Partner API'yi tıklayın. DevConsole, API ile ilgili açıklamayı gösterir.
  5. Projenizde bu API'yi etkinleştirmek için API'yi Etkinleştir düğmesini tıklayın.

Daha fazla bilgi için API'leri Etkinleştirme ve Devre Dışı Bırakma konusuna bakın.

Otel API'leri artık Google Hesabınızın yeni projesi için etkinleştirilmiştir.

Sonraki adım, bir Hizmet Hesabı ve hesap için anahtarlar oluşturmaktır.

3. Adım: Bir Hizmet Hesabı ve hesabın kimlik bilgilerini oluşturun

Hizmet Hesapları, bir web uygulaması ve otel verileriniz arasındaki etkileşim gibi sunucular arası etkileşimler tarafından kullanılır.

Hizmet Hesabı oluşturmak ve yapılandırmak için:

  1. Google API Konsolu ana görünümünde, sol taraftaki gezinme panelinde yer alan Kimlik Bilgileri öğesini tıklayın. DevConsole, Kimlik Bilgileri görünümünü gösterir.

    Kimlik Bilgileri görünümünde, projenizin istemci kimlikleri ve kimlik bilgileri gösterilir. Uygulamanız, OAuth 2.0 erişim jetonu isterken istemci kimliğini kullanır. Yeni projelerde henüz müşteri veya kimlik bilgileri yoktur.

  2. API'ler ve Hizmetler'de Kimlik Bilgileri bağlantısını tıklayın.
  3. Kimlik Bilgileri Oluştur düğmesini tıklayın ve açılır menüden Hizmet hesabı anahtarı'nı seçin.

    Hizmet hesabı anahtarı oluştur görünümü görüntülenir.

  4. Hizmet hesabı açılır menüsünden Yeni hizmet hesabı'nı seçin.
  5. Bir Hizmet Hesabı Adı ve Hizmet Hesabı Kimliği girin.

    Ad istediğiniz herhangi bir ad olabilir, ancak Hesap Kimliği tüm projeler genelinde benzersiz olmalıdır. DevConsole, girdiğiniz adı temel alarak sizin için benzersiz bir Hesap Kimliği oluşturur.

  6. Aşağıda gösterildiği gibi, Anahtar Türü için P12'yi seçin. P12 gereklidir.
  7. Oluştur düğmesini tıklayın. DevConsole, projeniz için bir özel/ortak anahtar çifti oluşturur. Özel anahtar, tarayıcınızın indirme yaptığı varsayılan konuma kaydedilir. .json dosya biçiminin aksine .p12 biçimini (ikili) indirmeniz gerekir.

    Komut dosyalarınızda veya Travel Partner API'ye erişen diğer uygulamalarda özel anahtarı kullanırsınız.

    DevConsole, anahtarları oluşturmayı tamamladığında aşağıdaki bildirimi görüntüler:

  8. Tamam, anladım düğmesini tıklayın. DevConsole sizi Kimlik Bilgileri görünümüne döndürür. Hizmet Hesabınızla ilgili ayrıntıları onaylamak ve projenizle ilişkilendirilen Hizmet Hesaplarını görmek için bu görünümde Hizmet hesaplarını yönet'i tıklayın.

    Hizmet Hesabı kendisiyle ilişkilendirilmiş şu kimlik bilgilerine sahiptir:

    • İstemci kimliği: Uygulamanızın OAuth 2.0 erişim jetonu isterken kullandığı benzersiz tanımlayıcı.
    • E-posta adresi: Hizmet Hesabı için "hesap_adı@proje_adı.google.com.iam.gserviceaccount.com" biçiminde oluşturulan bir e-posta adresi.
    • Sertifika dijital parmak izleri: İndirdiğiniz özel anahtarın kimliği.

Daha fazla bilgi için Sunucudan Sunucuya Uygulamalar için OAuth 2.0'ı Kullanma bölümüne bakın.

4. Adım: Hizmet Hesabının otel verilerinize erişmesine izin verin

Son adım, yeni Hizmet Hesabının, Otel Reklamları verilerinize erişmesini sağlamaktır. Hizmet Hesabı, önceki adımda oluşturduğunuz e-posta adresiyle tanımlanır. Otel Reklamları Merkezi'nin paylaşım ayarlarını kullanarak bu hesaba erişim sağlarsınız.

Bir Hizmet Hesabının, Otel Reklamları verilerinize erişmesine izin vermek için:

  1. Yeni bir tarayıcı penceresinde Otel Reklamları Merkezi'ni açın.
  2. Otel Reklamları Merkezi ana sayfanızdaki Bu hesabı paylaş simgesini tıklayın:

    Otel Reklamları Merkezi'nde Paylaşım Ayarları iletişim kutusu gösterilir.

  3. Kullanıcı davet et alanına, 3. Adım: Bir Hizmet Hesabı ve hesabın kimlik bilgilerini oluşturun adımında DevConsole'un oluşturduğu Hizmet Hesabının e-posta adresini girin ("hesap_adı@proje_adı.google.com.iam.gserviceaccount.com").

    Aşağıdaki örnekte gösterildiği gibi, Kullanıcıları e-posta yoluyla bilgilendir seçeneğini ve Düzenleyebilir iznini seçili bırakın:

  4. Gönder düğmesini tıklayın.

  5. Hizmet Hesabını Otel Reklamları Merkezi hesabınıza ekledikten sonra, Hizmet Hesabınızın e-posta adresi yaklaşık 24 saat içinde API erişimi için etkinleştirilir.

Google, Hizmet Hesabınız için API erişiminin etkinleştirildiğini bildirdikten sonra, OAuth 2.0'ı kullanma bölümünde açıklandığı gibi API'ye OAuth 2.0 ile erişmeye başlayabilirsiniz.

OAuth 2.0'ı kullanma

API'ye erişmek için uygulamanızın, Hizmet Hesabının oluşturduğu e-posta adresi ve özel anahtarla kendini Google'a tanıtması gerekir. Google'ın kimlik doğrulama sistemi, bu anahtarı uygulamanızın API çağrılarında Authorization üstbilgisinde geçirdiğiniz bir OAuth 2.0 erişim jetonu ile değiştirir.

Erişim jetonları (hamiline ait jetonlar olarak da bilinir) OAuth 2.0 standardının bir parçasıdır. HTTP üst bilgisinde erişim jetonu belirtmek için kullanılan söz dizimi şu şekildedir:

Authorization: Bearer oauth2_access_token

Aşağıdaki örnekte, Reports API'ye erişen bir isteğin örnek HTTP üst bilgileri gösterilmektedir:

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

Bir erişim jetonu oluşturmak için seçtiğiniz dilde bir uygulama oluşturun. Aşağıdaki örnek, jetonu Python'da oluşturur. Daha sonra bu jetonu Travel Partner API'ye erişirken isteklerinizin Authorization başlıklarında kullanabilirsiniz.

Erişim jetonu 1 saat sürelidir.

#!/usr/bin/python2.7
#
# Copyright 2016 Google Inc. All Rights Reserved.
#
""" 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 "TECHNCIAL" partner account name, NOT the account
# name in the Hotel Ads Center or the numeric partner ID.
# Check with your TAM if you do not know your technical partner account 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)

Uygulamanızı geliştirirken API anahtarlarını güvenli bir şekilde kullanmak için en iyi uygulamaları izlediğinizden emin olun.

Örnek Python komut dosyası, aşağıdaki örnekte gösterildiği gibi bir Authorization üstbilgisinin hamiline ait jetonunu üretir:

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

İsteklerinizde jetonun değerini kullanın. Jeton, oluşturulduktan sonra 1 saat süreyle geçerlidir.

Sorun giderme

Sorun mu yaşıyorsunuz? Aşağıdaki öğeleri hızlı bir şekilde kontrol etmek sorunu çözebilir.

  1. Google Developers Console'da bir proje oluşturdunuz mu?
  2. "Travel Partner API"yi buldunuz ve etkinleştirdiniz mi?
  3. Bir .p12 dosyası ("İstemci Kimliği Oluştur"u tıklayıp "Hizmet Hesabı"nı seçtikten sonra oluşturulan özel anahtar) indirdiniz mi?
  4. Hizmet Hesabı İstemci Kimliği E-posta Adresi aldınız mı ("nnnnnnn@uygulama_adı.google.com.iam.gserviceaccount.com" gibi bir biçimde)?
  5. "Bu hesabı paylaş" düğmesini tıklayarak Otel Reklamları Merkezi hesabınızı Hizmet Hesabı ile paylaştınız mı?
  6. Hizmet Hesabının e-posta adresini ve iş ortağı kimliğinizi travelads-partners@google.com adresine gönderdiniz mi?
  7. Travel Partner API çağrılarınız Authorization üst bilgisinde yakın zamanda alınmış bir jeton geçiriyor mu?
  8. Authorization üst bilginizin hamiline ait jetonu 1 saatten eski mi?

Aşağıdaki tabloda sık rastlanan bazı hatalar ve olası çözümler listelenmiştir:

Hata Açıklama
Invalid Credentials Bu, birçok anlama gelebilir. Bu hatayla karşılaşırsanız şunları kontrol edin:
  • Geçerli bir hamiline ait jeton içeren Authorization üstbilgisi belirttiniz mi?
  • Hamiline ait jeton süresi bir saatten az mı? Jeton yalnızca bir saat süreyle kullanılabilir.
  • Doğru iş ortağı adını belirttiniz mi (partner sorgu dizesi parametresiyle)? Değer, Otel Reklamları Merkezi'nde görünen iş ortağı adınız değil, benzersiz iş ortağı kimliğinizdir. İş ortağı kimliğinizi bilmiyorsanız Teknik Hesap Yöneticinizle (THY) iletişime geçin.
Not Found Uç noktanız büyük olasılıkla bozuk. Bir GET isteği gönderdiğinizden ve istek URL'sinin geçerli olduğundan (erişmeye çalıştığınız API söz dizimine uygun olduğundan) emin olun.
Invalid string value Uç noktanın bir veya daha fazla bölümü geçersiz söz dizimi içeriyor. Örneğin, yolun bir kısmını yanlış yazmış olabilirsiniz. Yolun tamamında alt çizgi, büyük harf ve ifadeleri doğru şekilde kullandığınızdan emin olun.
Unsupported Output Format Bu hata en çok Reports API kullanılırken ortaya çıkar. GET isteğinizin URL'sinde "alt=csv" değerini belirtmeniz gerekir. Reports API, JSON'u desteklemez.
AccessTokenRefreshError/Invalid Grant Örnek Python uygulamasını çalıştırırken, bu hatanın nedeni aşağıdakilerden biri olabilir:
  • Hizmet Hesabı e-posta adresiniz yanlış. Google Developers Console'da e-posta hesabını kontrol edin ve API'ye erişme yetkisine sahip olduğundan emin olun.
  • E-posta adresinin API erişimi yok. E-posta adresinin, otel verilerinize erişim yetkisi olup olmadığını kontrol edin (Hotel Center üzerinden paylaşılır).
  • Anahtar dosyası, Hizmet Hesabı için doğru dosya değil. Yeni bir .p12 sertifikası indirmek için DevConsole'u kullanın ve Python uygulamanızın doğru sertifikayı gösterdiğinden emin olun.
'HotelAdsAPIConnection' object has no attribute 'credentials' Örnek Python uygulamasını çalıştırırken, .p12 dosyanızın yolu yanlış.
Invalid Scope Örnek Python uygulamasını çalıştırırken API kapsamı "https://www.googleapis.com/auth/travelpartner" olmalıdır.
Forbidden Kullandığınız hesap kimliği, erişim yetkiniz olmayan bir hesap. Bir alt hesap sahibiyseniz üst veya kök hesap kimliğine erişemeyebilirsiniz.

Sorun devam ederse lütfen Google teknik destek ekibiyle iletişime geçin.