对向 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 服务账号密钥进行身份验证,以获取访问令牌。

Google API 客户端库可处理身份验证和发出 API 请求。确保针对您偏好的编程语言安装库,以下示例使用的是该语言。

首先,执行必要的库导入,并为服务账号 JSON 定义一些变量,以及将要保存的发卡机构、类、唯一身份用户和对象的 ID。

若要开始使用 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.*;

public class DemoTransit {
 
/**
   * 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 DemoTransit() throws Exception {
    keyFilePath
=
       
System.getenv().getOrDefault("GOOGLE_APPLICATION_CREDENTIALS", "/path/to/key.json");

    auth
();
 
}

要开始使用 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\TicketLeg;
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\TransitObject;
use Google\Service\Walletobjects\Message;
use Google\Service\Walletobjects\AddMessageRequest;
use Google\Service\Walletobjects\Uri;
use Google\Service\Walletobjects\TranslatedString;
use Google\Service\Walletobjects\LocalizedString;
use Google\Service\Walletobjects\ImageUri;
use Google\Service\Walletobjects\Image;
use Google\Service\Walletobjects\TransitClass;

/** Demo class for creating and managing Transit passes in Google Wallet. */
class DemoTransit
{
 
/**
   * 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 中进行集成,请参阅我们完整 <ph type="x-smartling-placeholder"></ph> GitHub 上的代码示例

import json
import os
import uuid

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


class DemoTransit:
   
"""Demo class for creating and managing Transit passes 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# 进行集成,请参阅我们的完整 <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 Transit passes in Google Wallet.
/// </summary>
class DemoTransit
{
 
/// <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 DemoTransit()
 
{
    keyFilePath
= Environment.GetEnvironmentVariable(
       
"GOOGLE_APPLICATION_CREDENTIALS") ?? "/path/to/key.json";

   
Auth();
 
}

若要开始在 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 Transit passes in Google Wallet.
 */

class DemoTransit {
  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 中进行集成,请参阅 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 进行集成,请参阅 <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 进行集成,请参阅我们的完整 <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 中进行集成,请参阅我们完整 <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# 进行集成,请参阅我们的完整 <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 中进行集成,请参阅我们完整 <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 中进行集成,请参阅 GitHub 上的完整代码示例 <ph type="x-smartling-placeholder"></ph> GitHub 上的代码示例

// Create authenticated HTTP client using a service account file.
func
(d *demoTransit) 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 Wallet Android SDK 请求

对于使用 Google 钱包 Android SDK 的请求,系统会自动使用您的应用签名证书进行身份验证。Android SDK 会自动创建签名证书的 SHA-1 指纹,并将其包含在向 Google Wallet API 发出的请求中。

如需详细了解如何生成和注册应用签名证书的 SHA-1 指纹,请参阅授权您的应用使用 Google Wallet Android SDK