必须对向 Google Wallet API 发出的请求进行身份验证,以便 Wallet API 识别相应请求是由您的应用发出的。
在开始之前,请确保您已正确生成并注册 Google Wallet REST API 和 Google 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。