Google Wallet API へのリクエストを認証する

Google Wallet API へのリクエストは認証される必要があります。これは、そのリクエストがデベロッパーのアプリケーションによるものであることを Wallet API が識別できるようにすることです。

開始する前に、Google Wallet REST APIGoogle Wallet Android SDK の認証情報を適切に生成して登録していることを確認します。

Google Wallet REST API リクエスト

Google Wallet REST API へのリクエストは、Google Wallet REST API Google Cloud サービス アカウント キーを使用して認証され、アクセス トークンを取得します。

認証と API リクエストの実行は、Google API クライアント ライブラリによって処理されます。以下の例で使用されている、お好みのプログラミング言語のライブラリを必ずインストールします。

まず、必要なライブラリをインポートし、サービス アカウント JSON 用の変数と、保存する発行者、クラス、一意のユーザー、およびオブジェクトの ID を定義します。

Java

Java で統合を開始するには、 <ph type="x-smartling-placeholder"></ph> コードサンプルを GitHub で公開しています

import com.auth0.jwt.JWT;
import com.auth0.jwt.algorithms.Algorithm;
import com.google.api.client.googleapis.batch.BatchRequest;
import com.google.api.client.googleapis.batch.json.JsonBatchCallback;
import com.google.api.client.googleapis.javanet.GoogleNetHttpTransport;
import com.google.api.client.googleapis.json.GoogleJsonError;
import com.google.api.client.googleapis.json.GoogleJsonResponseException;
import com.google.api.client.http.*;
import com.google.api.client.json.gson.GsonFactory;
import com.google.api.services.walletobjects.*;
import com.google.api.services.walletobjects.model.*;
import com.google.auth.http.HttpCredentialsAdapter;
import com.google.auth.oauth2.GoogleCredentials;
import com.google.auth.oauth2.ServiceAccountCredentials;
import java.io.*;
import java.security.interfaces.RSAPrivateKey;
import java.util.*;

/** Demo class for creating and managing Offers in Google Wallet. */
public class DemoOffer {
  /**
   * Path to service account key file from Google Cloud Console. Environment variable:
   * GOOGLE_APPLICATION_CREDENTIALS.
   */
  public static String keyFilePath;

  /** Service account credentials for Google Wallet APIs. */
  public static GoogleCredentials credentials;

  /** Google Wallet service client. */
  public static Walletobjects service;

  public DemoOffer() throws Exception {
    keyFilePath =
        System.getenv().getOrDefault("GOOGLE_APPLICATION_CREDENTIALS", "/path/to/key.json");

    auth();
  }

PHP

PHP で統合を開始するには、 <ph type="x-smartling-placeholder"></ph> コードサンプルを GitHub で公開しています

use Firebase\JWT\JWT;
use Google\Auth\Credentials\ServiceAccountCredentials;
use Google\Client as GoogleClient;
use Google\Service\Walletobjects;
use Google\Service\Walletobjects\DateTime;
use Google\Service\Walletobjects\TimeInterval;
use Google\Service\Walletobjects\OfferObject;
use Google\Service\Walletobjects\OfferClass;
use Google\Service\Walletobjects\LatLongPoint;
use Google\Service\Walletobjects\Barcode;
use Google\Service\Walletobjects\ImageModuleData;
use Google\Service\Walletobjects\LinksModuleData;
use Google\Service\Walletobjects\TextModuleData;
use Google\Service\Walletobjects\TranslatedString;
use Google\Service\Walletobjects\LocalizedString;
use Google\Service\Walletobjects\ImageUri;
use Google\Service\Walletobjects\Image;
use Google\Service\Walletobjects\Message;
use Google\Service\Walletobjects\AddMessageRequest;
use Google\Service\Walletobjects\Uri;

/** Demo class for creating and managing Offers in Google Wallet. */
class DemoOffer
{
  /**
   * The Google API Client
   * https://github.com/google/google-api-php-client
   */
  public GoogleClient $client;

  /**
   * Path to service account key file from Google Cloud Console. Environment
   * variable: GOOGLE_APPLICATION_CREDENTIALS.
   */
  public string $keyFilePath;

  /**
   * Service account credentials for Google Wallet APIs.
   */
  public ServiceAccountCredentials $credentials;

  /**
   * Google Wallet service client.
   */
  public Walletobjects $service;

  public function __construct()
  {
    $this->keyFilePath = getenv('GOOGLE_APPLICATION_CREDENTIALS') ?: '/path/to/key.json';

    $this->auth();
  }

Python

Python で統合を開始するには、 <ph type="x-smartling-placeholder"></ph> コードサンプルを GitHub で公開しています

import json
import os
import uuid

from googleapiclient.discovery import build
from googleapiclient.errors import HttpError
from google.oauth2.service_account import Credentials
from google.auth import jwt, crypt


class DemoOffer:
    """Demo class for creating and managing Offers in Google Wallet.

    Attributes:
        key_file_path: Path to service account key file from Google Cloud
            Console. Environment variable: GOOGLE_APPLICATION_CREDENTIALS.
        base_url: Base URL for Google Wallet API requests.
    """

    def __init__(self):
        self.key_file_path = os.environ.get('GOOGLE_APPLICATION_CREDENTIALS',
                                            '/path/to/key.json')
        # Set up authenticated client
        self.auth()

C#

C# で統合を開始するには、 <ph type="x-smartling-placeholder"></ph> コードサンプルを GitHub で公開しています

using System.IdentityModel.Tokens.Jwt;
using System.Net.Http.Headers;
using System.Text.RegularExpressions;
using Google.Apis.Auth.OAuth2;
using Google.Apis.Services;
using Google.Apis.Walletobjects.v1;
using Google.Apis.Walletobjects.v1.Data;
using Microsoft.IdentityModel.Tokens;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;


/// <summary>
/// Demo class for creating and managing Offers in Google Wallet.
/// </summary>
class DemoOffer
{
  /// <summary>
  /// Path to service account key file from Google Cloud Console. Environment
  /// variable: GOOGLE_APPLICATION_CREDENTIALS.
  /// </summary>
  public static string keyFilePath;

  /// <summary>
  /// Service account credentials for Google Wallet APIs
  /// </summary>
  public static ServiceAccountCredential credentials;

  /// <summary>
  /// Google Wallet service client
  /// </summary>
  public static WalletobjectsService service;

  public DemoOffer()
  {
    keyFilePath = Environment.GetEnvironmentVariable(
        "GOOGLE_APPLICATION_CREDENTIALS") ?? "/path/to/key.json";

    Auth();
  }

Node.js

Node で統合を開始する方法については、 <ph type="x-smartling-placeholder"></ph> コードサンプルを GitHub で公開しています

const { google } = require('googleapis');
const jwt = require('jsonwebtoken');
const { v4: uuidv4 } = require('uuid');

/**
 * Demo class for creating and managing Offers in Google Wallet.
 */
class DemoOffer {
  constructor() {
    /**
     * Path to service account key file from Google Cloud Console. Environment
     * variable: GOOGLE_APPLICATION_CREDENTIALS.
     */
    this.keyFilePath = process.env.GOOGLE_APPLICATION_CREDENTIALS || '/path/to/key.json';
    this.auth();
  }

Go

Go で統合を開始するには、GitHub にある完全なコードサンプルをご覧ください。 <ph type="x-smartling-placeholder"></ph> コードサンプルを GitHub で公開しています

package main

import (
	"bytes"
	"context"
	"encoding/json"
	"fmt"
	"github.com/golang-jwt/jwt"
	"github.com/google/uuid"
	"golang.org/x/oauth2"
	"golang.org/x/oauth2/google"
	oauthJwt "golang.org/x/oauth2/jwt"
	"google.golang.org/api/option"
	"google.golang.org/api/walletobjects/v1"
	"io"
	"log"
	"os"
	"strings"
)

次に、いずれかのフレームワーク ライブラリを使用して、Google Wallet API を呼び出すために必要な認証情報を取得します。

Java

Java で統合を開始するには、 <ph type="x-smartling-placeholder"></ph> コードサンプルを GitHub で公開しています

/**
 * Create authenticated HTTP client using a service account file.
 *
 */
public void auth() throws Exception {
  credentials =
      GoogleCredentials.fromStream(new FileInputStream(keyFilePath))
          .createScoped(List.of(WalletobjectsScopes.WALLET_OBJECT_ISSUER));
  credentials.refresh();

  HttpTransport httpTransport = GoogleNetHttpTransport.newTrustedTransport();

  // Initialize Google Wallet API service
  service =
      new Walletobjects.Builder(
              httpTransport,
              GsonFactory.getDefaultInstance(),
              new HttpCredentialsAdapter(credentials))
          .setApplicationName("APPLICATION_NAME")
          .build();
}

PHP

PHP で統合を開始するには、 <ph type="x-smartling-placeholder"></ph> コードサンプルを GitHub で公開しています

/**
 * Create authenticated HTTP client using a service account file.
 */
public function auth()
{
  $this->credentials = new ServiceAccountCredentials(
    Walletobjects::WALLET_OBJECT_ISSUER,
    $this->keyFilePath
  );

  // Initialize Google Wallet API service
  $this->client = new GoogleClient();
  $this->client->setApplicationName('APPLICATION_NAME');
  $this->client->setScopes(Walletobjects::WALLET_OBJECT_ISSUER);
  $this->client->setAuthConfig($this->keyFilePath);

  $this->service = new Walletobjects($this->client);
}

Python

Python で統合を開始するには、 <ph type="x-smartling-placeholder"></ph> コードサンプルを GitHub で公開しています

def auth(self):
    """Create authenticated HTTP client using a service account file."""
    self.credentials = Credentials.from_service_account_file(
        self.key_file_path,
        scopes=['https://www.googleapis.com/auth/wallet_object.issuer'])

    self.client = build('walletobjects', 'v1', credentials=self.credentials)

C#

C# で統合を開始するには、 <ph type="x-smartling-placeholder"></ph> コードサンプルを GitHub で公開しています

/// <summary>
/// Create authenticated service client using a service account file.
/// </summary>
public void Auth()
{
  credentials = (ServiceAccountCredential)GoogleCredential
      .FromFile(keyFilePath)
      .CreateScoped(new List<string>
      {
        WalletobjectsService.ScopeConstants.WalletObjectIssuer
      })
      .UnderlyingCredential;

  service = new WalletobjectsService(
      new BaseClientService.Initializer()
      {
        HttpClientInitializer = credentials
      });
}

Node.js

Node で統合を開始する方法については、 <ph type="x-smartling-placeholder"></ph> コードサンプルを GitHub で公開しています

/**
 * Create authenticated HTTP client using a service account file.
 */
auth() {
  const auth = new google.auth.GoogleAuth({
    keyFile: this.keyFilePath,
    scopes: ['https://www.googleapis.com/auth/wallet_object.issuer'],
  });

  this.credentials = require(this.keyFilePath);

  this.client = google.walletobjects({
    version: 'v1',
    auth: auth,
  });
}

Go

Go で統合を開始するには、GitHub にある完全なコードサンプルをご覧ください。 <ph type="x-smartling-placeholder"></ph> コードサンプルを GitHub で公開しています

// Create authenticated HTTP client using a service account file.
func (d *demoOffer) auth() {
	credentialsFile := os.Getenv("GOOGLE_APPLICATION_CREDENTIALS")
	b, _ := os.ReadFile(credentialsFile)
	credentials, err := google.JWTConfigFromJSON(b, walletobjects.WalletObjectIssuerScope)
	if err != nil {
		fmt.Println(err)
		log.Fatalf("Unable to load credentials: %v", err)
	}
	d.credentials = credentials
	d.service, _ = walletobjects.NewService(context.Background(), option.WithCredentialsFile(credentialsFile))
}

Google ウォレット Android SDK リクエスト

Google ウォレット Android SDK を使用したリクエストは、アプリ署名証明書を使用して自動的に認証されます。Android SDK は署名証明書の SHA-1 フィンガープリントを自動的に作成し、Google Wallet API へのリクエストに追加します。

アプリ署名証明書の SHA-1 フィンガープリントの生成と登録の詳細については、Google ウォレット Android SDK に対するアプリの認証をご覧ください。