Otorisasi API

Gunakan OAuth 2.0 untuk mengizinkan aplikasi Anda saat mengakses API hotel.

Penyiapan OAuth 2.0

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

Token akses berlaku selama satu jam (3.600 detik).

Jika sebelumnya Anda telah mengimplementasikan ClientLogin, pendekatan OAuth 2.0 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. Buat 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

Setiap langkah ini dijelaskan di bagian berikutnya.

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 aplikasi yang sedang Anda kerjakan yang menggunakan Google Developer API dan resource Google Cloud.

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

Untuk membuat project DevConsole baru:

  1. Login ke Akun Gmail/Google Anda.

  2. Buka Google Developers Console. Jika ini adalah project 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 cocok untuk project baru Anda di kolom input Project name. Di bawah kolom ini, DevConsole menghasilkan project ID untuk Anda, sehingga memastikan ID tersebut unik di semua project. Misalnya, jika Anda memasukkan "Project Baru Saya", 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 Konsol Developer.

Saat Anda membuat project baru, project tersebut belum memiliki API yang terkait dengannya. Pada 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 di project DevConsole baru.

Untuk mengaktifkan API hotel untuk project baru Anda:

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

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

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

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

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

Untuk mengetahui informasi selengkapnya, lihat Mengaktifkan dan menonaktifkan API.

Hotel API sekarang 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 hasilkan 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 project Anda. Aplikasi Anda akan menggunakan client ID saat meminta token akses OAuth 2.0. Project baru belum memiliki klien atau kredensial.

  2. Klik link Credentials in APIs and services.

  3. Klik tombol Create credentials, dan pilih Service account key dari menu dropdown. Tampilan Create service account key akan ditampilkan.

  4. Dari drop-down Akun layanan, pilih Akun layanan baru.

  5. Masukkan nama akun layanan dan ID akun layanan.

    Anda dapat menggunakan nama apa pun yang diinginkan, 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 project Anda. Kunci pribadi disimpan ke lokasi default tempat browser Anda menyimpan hasil download. Anda harus mendownload format .p12 (biner), bukan format file .json.

    Gunakan 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 tampilan Credentials. Untuk mengonfirmasi detail tentang akun layanan dan melihat akun layanan yang terkait dengan project Anda, klik Manage service accounts pada 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, dalam bentuk "account_name@project_name.google.com.iam.gserviceaccount.com".
    • Sidik jari sertifikat: ID kunci pribadi yang Anda download.

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

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

Langkah terakhir adalah memberikan akses ke Pusat Pengelolaan Hotel untuk akun layanan baru. Akun layanan diidentifikasi berdasarkan alamat email yang dihasilkan 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:

Jika Anda tidak memiliki akses yang sesuai untuk menambahkan pengguna ke akun, hubungi tim Hotel di Google menggunakan formulir hubungi kami dan minta kami untuk menyiapkan kepemilikan akun Anda. Anda dapat meminta satu atau beberapa email untuk ditetapkan kepada pemilik. Untuk mendapatkan 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. Di banner Pusat Pengelolaan Hotel oleh Google, klik ikon tambahkan pengguna untuk membuka dialog berbagi.

    fig8

  3. Di kolom Tambahkan lebih banyak orang, masukkan alamat email akun layanan yang ingin ditambahkan ke Pusat Pengelolaan Hotel.

  4. Biarkan 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 akan diaktifkan untuk akses API dalam waktu sekitar 24 jam.

Setelah Google memberi tahu Anda bahwa akses API diaktifkan untuk akun layanan, Anda dapat mulai mengakses API 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 autentikasi Google menukar kunci ini dengan token akses OAuth 2.0 yang Anda teruskan di header Authorization dalam panggilan API aplikasi Anda.

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

Authorization: Bearer *oauth2_access_token*

Contoh berikut menunjukkan contoh header HTTP permintaan yang mengakses 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

Untuk membuat token akses, buat aplikasi dalam bahasa apa pun yang Anda pilih. Contoh berikut menghasilkan token di Python. Selanjutnya, Anda dapat menggunakan token ini dalam header Authorization permintaan 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 Anda mengikuti Praktik terbaik untuk menggunakan kunci API dengan aman.

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

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

Gunakan nilai token dalam permintaan Anda. Nilai ini berlaku selama 1 jam setelah Anda menghasilkannya.

Pemecahan masalah

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

  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 memilih Akun layanan?
  4. Apakah Anda mendapatkan alamat email client ID akun layanan dengan format: nnnnnnn@app_name.google.com.iam.gserviceaccount.com?
  5. Apakah Anda membagikan akun Pusat Iklan Hotel ke akun layanan dengan mengklik tombol Bagikan akun ini?
  6. Apakah Anda mengirim alamat email akun layanan dan ID partner ke Manajer Akun Teknis (TAM)?
  7. Apakah panggilan Travel Partner API Anda meneruskan token yang baru diperoleh di header Authorization?
  8. Apakah Token pemilik header Authorization Anda berusia lebih dari 1 jam?

Tabel berikut mencantumkan beberapa error umum dan kemungkinan penyelesaiannya:

Error Deskripsi
Invalid credentials Hal ini bisa berarti beberapa hal. Jika Anda mengalami error ini, pastikan:
  • Anda menentukan header Authorization dengan token pemilik yang valid.
  • Masa berlaku token pemilik kurang dari satu jam. Token hanya berlaku selama satu jam.
  • Anda menentukan nama partner yang benar (dengan parameter string kueri partner). Nilainya adalah ID partner unik, bukan nama partner yang muncul di Pusat Bantuan Iklan Hotel. Jika tidak mengetahui ID partner, hubungi Manajer Akun Teknis (TAM).
Not found Format endpoint Anda kemungkinan besar salah. Periksa apakah Anda mengirimkan permintaan GET, dan bahwa URL permintaan tersebut valid (sesuai dengan sintaksis API yang Anda coba akses).
Invalid string value Satu atau beberapa bagian endpoint berisi sintaksis yang tidak valid. Misalnya, Anda mungkin salah mengeja bagian jalur. Pastikan Anda menggunakan garis bawah, kapitalisasi, dan kata-kata yang benar di seluruh jalur.
Unsupported output format Error ini paling sering terjadi saat menggunakan Reports API. Anda harus menentukan "alt=csv" dalam URL permintaan GET Anda. Reports API tidak mendukung JSON.
AccessTokenRefreshError/Invalid grant Saat menjalankan contoh aplikasi Python, error ini mungkin disebabkan oleh hal berikut:
  • Alamat email akun layanan Anda salah. Periksa akun email di Konsol Google Play dan pastikan akun tersebut diberi otorisasi untuk mengakses API.
  • Alamat email tidak memiliki akses API. Pastikan alamat email telah diberi otorisasi untuk mengakses data hotel Anda (dibagikan melalui Pusat Pengelolaan Hotel).
  • File kunci bukan yang benar untuk akun layanan. Gunakan DevConsole untuk mendownload sertifikat .p12 baru dan pastikan aplikasi Python Anda mengarah ke sertifikat yang benar.
HotelAdsAPIConnection object has no attribute credentials Saat menjalankan contoh aplikasi Python, jalur ke file .p12 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 dapat Anda akses. Jika Anda adalah pemilik sub-akun, Anda mungkin tidak dapat mengakses ID akun induk atau root.