ตรวจสอบสิทธิ์คำขอที่ส่งไปยัง Google Wallet API

คำขอที่ส่งไปยัง Google Wallet API ต้องผ่านการตรวจสอบสิทธิ์เพื่อให้ Wallet API ระบุได้ว่าคำขอนั้นมาจากแอปพลิเคชันของคุณ

ก่อนเริ่มต้น โปรดตรวจสอบว่าคุณได้สร้างและลงทะเบียนข้อมูลรับรองสำหรับ Google Wallet REST API และ Google Wallet Android SDK อย่างถูกต้อง

คำขอ Google Wallet REST API

คำขอที่ส่งไปยัง Google Wallet REST API ผ่านการตรวจสอบสิทธิ์โดยใช้คีย์บัญชีบริการ Google Cloud ของ Google Wallet REST เพื่อรับโทเค็นเพื่อการเข้าถึง

ไลบรารีของไคลเอ็นต์ Google API จะจัดการการตรวจสอบสิทธิ์และส่งคำขอ API ตรวจสอบว่าคุณได้ติดตั้งไลบรารีสำหรับภาษาโปรแกรมที่ต้องการ ซึ่งตัวอย่างต่อไปนี้ใช้

ก่อนอื่น ให้นำเข้าไลบรารีที่จำเป็น แล้วกำหนดตัวแปรบางส่วนสำหรับ JSON ของบัญชีบริการ และรหัสสำหรับผู้ออกใบรับรอง คลาส ผู้ใช้ที่ไม่ซ้ำ และออบเจ็กต์ที่จะบันทึก

Java

หากต้องการเริ่มการผสานรวมใน Java โปรดดู ตัวอย่างโค้ดทั้งหมดบน 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 โปรดดู ตัวอย่างโค้ดทั้งหมดบน 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 โปรดดู ตัวอย่างโค้ดทั้งหมดบน 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# โปรดดู ตัวอย่างโค้ดทั้งหมดบน 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

หากต้องการเริ่มการผสานรวมในโหนด โปรดดู ตัวอย่างโค้ดทั้งหมดบน 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 ของ 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 โปรดดู ตัวอย่างโค้ดทั้งหมดบน 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 โปรดดู ตัวอย่างโค้ดทั้งหมดบน 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 โปรดดู ตัวอย่างโค้ดทั้งหมดบน 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# โปรดดู ตัวอย่างโค้ดทั้งหมดบน 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

หากต้องการเริ่มการผสานรวมในโหนด โปรดดู ตัวอย่างโค้ดทั้งหมดบน 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 ของ 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 Wallet Android SDK

คำขอที่ใช้ Google Wallet Android SDK จะได้รับการตรวจสอบสิทธิ์โดยอัตโนมัติโดยใช้ใบรับรอง App Signing Android SDK จะสร้างลายนิ้วมือ SHA-1 ของใบรับรองที่ลงนามโดยอัตโนมัติ และรวมลายนิ้วมือดังกล่าวไว้กับคำขอที่ส่งไปยัง Google Wallet API

ดูข้อมูลเพิ่มเติมเกี่ยวกับการสร้างและลงทะเบียนลายนิ้วมือ SHA-1 ของใบรับรอง App Signing ได้ที่การให้สิทธิ์แอปสำหรับ Google Wallet Android SDK