Otorisasi API

Gunakan OAuth 2.0 untuk memberikan otorisasi pada aplikasi Anda saat mengakses API hotel.

Penyiapan OAuth 2.0

OAuth 2.0 mengharuskan Anda mengidentifikasi diri menggunakan akun layanan yang dikaitkan dengan Akun Google Anda. Akun layanan mengirimkan kredensial untuk mendapatkan token akses OAuth 2.0. Anda kemudian dapat menggunakan token ini di panggilan ke API hotel untuk data hanya baca, seperti harga, hotel, dan data pelaporan diagnostik tentang feed harga hotel.

Token akses berlaku selama satu jam (3.600 detik).

Jika sebelumnya Anda telah mengimplementasikan {i>ClientLogin<i}, pendekatan OAuth 2.0 yang serupa, dengan perbedaan berikut:

  • Aplikasi Anda menggunakan akun layanan Google untuk mengakses API.
  • Anda meneruskan token akses OAuth 2.0 di header HTTP Authorization saat memanggil API.

Untuk menyiapkan akun Anda agar menggunakan OAuth 2.0 dengan Travel Partner API, lakukan langkah-langkah berikut:

  1. Membuat project baru di Google Developers Console (DevConsole)

  2. Mengaktifkan akses ke Travel Partner API untuk project baru

  3. Membuat akun layanan dan kredensialnya

  4. Memberi akun layanan akses ke data hotel Anda

Setiap langkah ini dijelaskan di bagian berikut.

Langkah 1: Buat Project DevConsole baru

Google Developers Console ('DevConsole') adalah pengalaman developer Google untuk mengelola dan melihat data traffic, autentikasi, dan informasi penagihan untuk Google API yang digunakan project Anda.

Di DevConsole, project adalah kumpulan setelan, kredensial, dan metadata tentang aplikasi atau beberapa aplikasi yang sedang Anda kerjakan yang menggunakan Google Developer API dan resource Google Cloud.

DevConsole adalah tempat Anda mengelola aspek-aspek ini dalam project, seperti membuat kredensial API, mengaktifkan API, serta mengelola tim dan penagihan informasi yang terkait dengan proyek Anda.

Untuk membuat project DevConsole baru:

  1. Login ke Akun Gmail/Google Anda.

  2. Buka Google Developers Console. Jika ini adalah proyek pertama Anda, tampilan utama akan menampilkan tombol CREATE PROJECT sederhana:

    fig1

  3. Klik tombol CREATE PROJECT. DevConsole menampilkan Kotak dialog New Project:

    fig2

    Masukkan nama yang mudah digunakan untuk project baru Anda di bagian Project name bidang input. Di bawah kolom ini, DevConsole menghasilkan project ID untuk Anda, untuk memastikan bahwa ID tersebut bersifat unik di semua project. Misalnya, jika Anda masukkan "My New Project", DevConsole menetapkan ID seperti my-new-project-266022.

  4. Klik tombol Create untuk membuat project baru.

  5. Gunakan menu navigasi untuk memilih API & Layanan > Dasbor.

    fig3

    Gambar di bawah ini menampilkan menu navigasi di kiri atas DevConsole. Tindakan ini akan menampilkan tampilan Dashboard untuk project Anda:

    fig4

Untuk informasi selengkapnya, lihat Mengelola project di Developer Konsol Google Cloud.

Saat Anda membuat project baru, belum ada API yang terkait dengannya. Di kolom langkah berikutnya, Anda akan mengaktifkan Travel Partner API untuk Project baru Anda.

Langkah 2: Aktifkan Travel Partner API untuk project baru

Untuk menggunakan API hotel, Anda harus mengaktifkan Travel Partner API dalam project DevConsole baru.

Untuk mengaktifkan API hotel bagi project baru Anda:

  1. Buka tampilan Dashboard project Anda seperti yang dijelaskan di atas.

  2. Klik Aktifkan API dan Layanan. Tindakan ini akan menampilkan sambutan Library API kami.

  3. Di kolom penelusuran, mulai ketik Travel Partner API. Konsol API Google menampilkan daftar API yang sesuai dengan yang Anda ketik.

  4. Klik Travel Partner API di tabel API yang cocok. DevConsole menampilkan deskripsi tentang API.

  5. Klik tombol Enable API untuk mengaktifkan API ini untuk project Anda.

Untuk informasi selengkapnya, lihat Mengaktifkan dan menonaktifkan Google Cloud API.

Hotel API kini diaktifkan untuk project baru Akun Google Anda.

Langkah berikutnya adalah membuat akun layanan dan menghasilkan kunci untuk akun tersebut.

Langkah 3: Buat akun layanan dan buat kredensialnya

Akun layanan digunakan oleh interaksi server-ke-server seperti interaksi antara aplikasi web dan data hotel Anda.

Untuk membuat dan mengonfigurasi akun layanan:

  1. Di tampilan utama Konsol API Google, klik Credentials di navigasi sebelah kiri. DevConsole menampilkan tampilan Credentials.

    Tampilan Credentials menampilkan client ID dan kredensial untuk proyek. Aplikasi Anda akan menggunakan client ID saat meminta Token akses OAuth 2.0. Project baru tidak akan memiliki klien atau kredensial .

  2. Klik link Credentials in APIs and services.

  3. Klik tombol Create credentials, lalu pilih Service account key. dari menu dropdown. Tampilan Buat kunci akun layanan akan ditampilkan.

  4. Dari menu dropdown Service account, pilih New service account.

  5. Masukkan nama akun layanan dan ID akun layanan.

    Nama dapat berupa apa pun yang Anda inginkan, tetapi ID akun harus unik di semua project. DevConsole akan menghasilkan ID akun unik untuk Anda, berdasarkan nama yang Anda masukkan.

  6. Pilih P12 untuk jenis kunci, seperti yang ditunjukkan di bawah. P12 wajib diisi.

    fig5

  7. Klik tombol Buat. DevConsole menghasilkan pasangan kunci pribadi/publik untuk proyek Anda. Kunci pribadi disimpan ke lokasi {i>default<i} yang {i>browser<i} Anda menyimpan hasil download. Anda harus mendownload Format .p12 (biner), bukan format file .json.

    Anda menggunakan kunci pribadi dalam skrip Anda atau aplikasi lain yang mengakses Travel Partner API.

    DevConsole menampilkan pemberitahuan berikut setelah selesai membuat kunci:

    fig6

  8. Klik tombol OK, get it. DevConsole mengembalikan Anda ke Credentials. Untuk mengonfirmasi detail tentang akun layanan dan melihat akun layanan yang terkait dengan project Anda, klik Manage akun layanan dalam tampilan ini.

    Akun layanan kini memiliki kredensial berikut yang terkait dengannya:

    • Client ID: ID unik yang digunakan aplikasi Anda saat meminta token akses OAuth 2.0.
    • Alamat email: Alamat email yang dibuat untuk akun layanan, di formulir "account_name@account_name.google.com.iam.gserviceaccount.com".
    • Sidik jari sertifikat: ID kunci pribadi yang Anda diunduh.

Untuk informasi selengkapnya, lihat Menggunakan OAuth 2.0 untuk Server guna Aplikasi Server.

Langkah 4: Beri akun layanan akses ke data Pusat Pengelolaan Hotel Anda

Langkah terakhir adalah memberi akun layanan baru akses ke Pusat Pengelolaan Hotel. Akun layanan diidentifikasi oleh alamat email yang dibuat yang yang Anda buat di langkah sebelumnya. Anda memberikan akses ke akun ini menggunakan setelan berbagi Pusat Pengelolaan Hotel.

Untuk memberi akun layanan akses ke data Pusat Pengelolaan Hotel Anda:

Jika Anda tidak memiliki akses yang sesuai untuk menambahkan pengguna ke akun, hubungi Tim Hotel di Google menggunakan formulir hubungi kami dan meminta kami untuk menyiapkan kepemilikan untuk akun Anda. Anda dapat meminta satu atau beberapa email agar dibuat ke pemilik. Untuk informasi selengkapnya tentang akses Pusat Pengelolaan Hotel, lihat Menautkan Pusat Pengelolaan Hotel dan Google Ads.

  1. Di jendela browser baru, buka Pusat Pengelolaan Hotel. fig7

  2. Pada banner Pusat Pengelolaan Hotel oleh Google, klik ikon tambahkan pengguna untuk membuka dialog berbagi.

    fig8

  3. Di kolom Tambahkan orang lainnya, masukkan alamat email layanan akun yang ingin Anda tambahkan ke Pusat Pengelolaan Hotel.

  4. Pastikan opsi Beri tahu orang tetap dipilih.

  5. Dari menu drop-down, pilih Kelola.

  6. Klik tombol Undang.

  7. Setelah menambahkan pengguna ke Pusat Pengelolaan Hotel, akun layanan Anda harus diaktifkan untuk akses API dalam waktu sekitar 24 jam.

Setelah Google memberi tahu Anda bahwa akses API diaktifkan untuk layanan Anda Anda dapat mulai mengakses API tersebut dengan OAuth.

Menggunakan OAuth 2.0

Untuk mengakses API, aplikasi Anda harus mengidentifikasi dirinya ke Google dengan alamat email dan kunci pribadi yang dibuat oleh akun layanan. mekanisme otentikasi menukar kunci ini dengan token akses OAuth 2.0 yang Anda meneruskan header Authorization dalam panggilan API aplikasi.

Token akses (disebut juga token pemilik) adalah bagian dari OAuth 2.0 standar. Sintaksis untuk menentukan token akses di header HTTP adalah:

Authorization: Bearer *oauth2_access_token*

Contoh berikut menunjukkan contoh header HTTP permintaan yang mengakses API Laporan:

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

Untuk membuat token akses, buat aplikasi dalam bahasa apa pun yang Anda pilih. Contoh berikut menghasilkan token di Python. Anda kemudian dapat menggunakan dalam permintaan Anda. Header Authorization saat mengakses 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>

Saat mengembangkan aplikasi, pastikan untuk mengikuti Praktik terbaik untuk menggunakan kunci API dengan aman.

Contoh skrip Python menghasilkan pembawa header Authorization , seperti yang ditunjukkan contoh berikut:

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

Gunakan nilai token dalam permintaan Anda. Ini bagus selama 1 jam setelah Anda membuatnya.

Pemecahan masalah

Mengalami masalah? Melakukan pemeriksaan cepat pada item berikut dapat mengatasi menyelesaikan masalah.

  1. Apakah Anda membuat project di Google Developers Console?
  2. Apakah Anda menemukan dan mengaktifkan Travel Partner API?
  3. Apakah Anda mendownload file .p12—kunci pribadi setelah mengklik Buat client ID dan pilih Akun layanan?
  4. Apakah Anda mendapatkan alamat email client ID akun layanan yang berisi formulir: nnnnnnn@app_name.google.com.iam.gserviceaccount.com?
  5. Apakah Anda membagikan akun Pusat Bantuan Iklan Hotel ke akun layanan dengan mengklik tombol Bagikan akun ini?
  6. Apakah Anda mengirimkan alamat email akun layanan dan ID partner Anda ke Manajer Akun Teknis (TAM) Anda?
  7. Apakah panggilan Travel Partner API Anda meneruskan token yang baru diperoleh di Header Authorization?
  8. Apakah Token pemilik header Authorization Anda sudah lebih dari 1 jam?

Tabel berikut mencantumkan beberapa error umum dan kemungkinan penyelesaiannya:

Error Deskripsi
Invalid credentials Informasi ini bisa berarti beberapa hal. Jika Anda mengalami error ini, periksa apakah:
  • Anda menentukan header Authorization dengan pemilik yang valid sebelumnya yang benar.
  • Token pemilik baru berusia kurang dari satu jam. Token hanya berlaku selama satu jam.
  • Anda menentukan nama partner yang benar (dengan partner parameter string kueri). Nilainya adalah ID partner unik Anda, bukan ID partner nama partner yang muncul di Pusat Iklan Hotel. Jika Anda tidak mengenal partner Anda ID, hubungi Manajer Akun Teknis (TAM) Anda.
Not found Kemungkinan besar format endpoint Anda salah. Periksa apakah Anda mengirimkan GET, dan bahwa URL permintaan valid (sesuai dengan ke sintaksis API yang Anda coba akses).
Invalid string value Satu atau beberapa bagian endpoint berisi sintaksis yang tidak valid. Misalnya, Anda mungkin telah salah mengeja bagian jalur. Pastikan Anda menggunakan alamat garis bawah, kapitalisasi, dan kata-kata di seluruh jalur Anda.
Unsupported output format Error ini paling sering terjadi saat menggunakan Reports API. Anda harus tentukan "alt=csv" di URL GET Anda permintaan. Reports API tidak mendukung JSON.
AccessTokenRefreshError/Invalid grant Saat menjalankan contoh aplikasi Python, error ini mungkin disebabkan oleh dari yang berikut ini:
  • Alamat email akun layanan Anda salah. Periksa email di Google Developers Console dan pastikan akun telah diberi otorisasi untuk mengakses Compute Engine API.
  • Alamat email tidak memiliki akses API. Periksa apakah email diizinkan untuk mengakses data hotel Anda (dibagikan melalui Pusat Pengelolaan Hotel).
  • File kunci bukan file yang benar untuk akun layanan. Gunakan DevConsole untuk mendownload sertifikat .p12 baru dan memastikan aplikasi Python Anda menunjuk ke yang benar.
HotelAdsAPIConnection object has no attribute credentials Saat menjalankan contoh aplikasi Python, jalur ke .p12 Anda file salah.
Invalid scope Saat menjalankan contoh aplikasi Python, cakupan API harus https://www.googleapis.com/auth/travelpartner.
Forbidden ID akun yang Anda gunakan adalah ID yang tidak Anda miliki otorisasinya untuk diakses. Jika Anda adalah pemilik sub-akun, Anda mungkin tidak dapat mengakses ID akun induk atau root.