اصالت‌سنجی درخواست‌ها برای 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 API اصالت‌سنجی می‌شود تا کد دسترسی دریافت شود.

کتابخانه‌های کارخواه Google API اصالت‌سنجی و ارسال درخواست‌های API را انجام می‌دهند. مطمئن شوید کتابخانه را برای زبان برنامه‌نویسی ترجیحی‌تان نصب کرده‌اید، که در مثال‌های زیر استفاده می‌شود.

ابتدا، کتابخانه‌های لازم را وارد کنید و چند متغیر برای JSON حساب سرویس و شناسه‌های صادرکننده، کلاس، کاربر منحصربه‌فرد، و شیء که ذخیره خواهد شد تعریف کنید.

جاوا

برای شروع ادغام در 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.*;

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

برای شروع ادغام در PHP، به نمونه کدهای کامل ما در 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

برای شروع ادغام در Python، به نمونه‌های کد کامل ما در 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#‎

برای شروع ادغام در 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 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.js

برای شروع ادغام در Node، به نمونه‌های کد کامل ما در 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 مراجعه کنید نمونه کدهای 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، به نمونه کدهای کامل ما در 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

برای شروع ادغام در Node، به نمونه‌های کد کامل ما در 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 مراجعه کنید نمونه کدهای 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))
}

درخواست‌های «کیت توسعه نرم‌افزار Android» برای «کیف پول Google»

درخواست‌هایی که از کیت توسعه نرم‌افزار Android «کیف پول Google» استفاده می‌کنند به‌طور خودکار بااستفاده از گواهی امضای برنامه شما اصالت‌سنجی می‌شوند. «کیت توسعه نرم‌افزار Android» به‌طور خودکار اثر انگشت SHA-1 گواهی امضای شما را ایجاد می‌کند و آن را در درخواست‌های ارسال‌شده به Google Wallet API قرار می‌دهد.

برای کسب اطلاعات بیشتر درباره تولید و ثبت اثر انگشت SHA-1 گواهی امضای برنامه، به مجاز کردن برنامه برای کیت توسعه نرم‌افزار Android «کیف پول Google» مراجعه کنید.