ওয়েব API দিয়ে শুরু করা

সেভ করা পৃষ্ঠা গুছিয়ে রাখতে 'সংগ্রহ' ব্যবহার করুন আপনার পছন্দ অনুযায়ী কন্টেন্ট সেভ করুন ও সঠিক বিভাগে রাখুন।

ওয়েব API দিয়ে শুরু করার আগে, নিশ্চিত করুন যে আপনি পূর্বশর্তগুলি সম্পূর্ণ করেছেন৷ ওয়েব API এর সাথে চালিয়ে যেতে, আপনার অবশ্যই একটি পরিষেবা অ্যাকাউন্ট এবং একটি পরিষেবা অ্যাকাউন্ট কী থাকতে হবে এবং পাসেস API কল করার জন্য আপনাকে আপনার পরিষেবা অ্যাকাউন্টে অ্যাক্সেস দিতে হবে।

নীচের ধাপে উল্লেখ করা কোড স্নিপেটগুলি চালানোর জন্য GitHub-এ নমুনা কোডটি ডাউনলোড করুন

প্রমাণীকরণ এবং অনুমোদন

Google Wallet API-এর অনুরোধগুলি অবশ্যই প্রমাণীকৃত হতে হবে যাতে Google Wallet API সনাক্ত করতে পারে যে অনুরোধটি আপনার অ্যাপ্লিকেশন দ্বারা করা হচ্ছে৷ এটি একটি অ্যাক্সেস টোকেন পেতে পরিষেবা অ্যাকাউন্ট কী ব্যবহার করে অর্জন করা হয়।

প্রথমে, প্রয়োজনীয় লাইব্রেরি আমদানি সম্পাদন করুন এবং JSON পরিষেবা অ্যাকাউন্টের জন্য কিছু ভেরিয়েবল এবং ইস্যুকারী, শ্রেণী, অনন্য ব্যবহারকারী এবং অবজেক্টের জন্য আইডি সংজ্ঞায়িত করুন যা সংরক্ষণ করা হবে।

জাভা

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.http.*;
import com.google.api.client.http.json.JsonHttpContent;
import com.google.api.client.json.GenericJson;
import com.google.api.client.json.JsonParser;
import com.google.api.client.json.gson.GsonFactory;
import com.google.auth.http.HttpCredentialsAdapter;
import com.google.auth.oauth2.GoogleCredentials;
import com.google.auth.oauth2.ServiceAccountCredentials;
import com.google.common.collect.Lists;

import java.io.*;
import java.security.interfaces.RSAPrivateKey;
import java.util.*;

// Only include if you are using the Google Wallet client library
// https://developers.google.com/wallet/retail/loyalty-cards/resources/libraries
import com.google.api.services.walletobjects.Walletobjects;
import com.google.api.services.walletobjects.model.*;

public class DemoOffer {
  public static void main(String[] args) throws Exception {
    /*
     * keyFilePath - Path to service account key file from Google Cloud Console
     * - Environment variable: GOOGLE_APPLICATION_CREDENTIALS
     */
    final String keyFilePath = System.getenv().getOrDefault(
        "GOOGLE_APPLICATION_CREDENTIALS",
        "/path/to/key.json");

    /*
     * issuerId - The issuer ID being updated in this request
     * - Environment variable: WALLET_ISSUER_ID
     */
    String issuerId = System.getenv().getOrDefault(
        "WALLET_ISSUER_ID",
        "issuer-id");

    /*
     * classId - Developer-defined ID for the wallet class
     * - Environment variable: WALLET_CLASS_ID
     */
    String classId = System.getenv().getOrDefault(
        "WALLET_CLASS_ID",
        "test-offer-class-id");

    /*
     * userId - Developer-defined ID for the user, such as an email address
     * - Environment variable: WALLET_USER_ID
     */
    String userId = System.getenv().getOrDefault(
        "WALLET_USER_ID",
        "user-id");

    /*
     * objectId - ID for the wallet object
     * - Format: `issuerId.identifier`
     * - Should only include alphanumeric characters, '.', '_', or '-'
     * - `identifier` is developer-defined and unique to the user
     */
    String objectId = String.format("%s.%s-%s",
        issuerId, userId.replaceAll("[^\\w.-]", "_"), classId);

পিএইচপি

use Firebase\JWT\JWT;
use Google\Auth\Credentials\ServiceAccountCredentials;
use Google\Auth\Middleware\AuthTokenMiddleware;
use Google\Client as Google_Client;
use GuzzleHttp\Client;
use GuzzleHttp\HandlerStack;
use GuzzleHttp\Exception\ClientException;


/*
 * keyFilePath - Path to service account key file from Google Cloud Console
 *             - Environment variable: GOOGLE_APPLICATION_CREDENTIALS
 */
$keyFilePath = getenv('GOOGLE_APPLICATION_CREDENTIALS') ?: '/path/to/key.json';

/*
 * issuerId - The issuer ID being updated in this request
 *          - Environment variable: WALLET_ISSUER_ID
 */
$issuerId = getenv('WALLET_ISSUER_ID') ?: 'issuer-id';

/*
 * classId - Developer-defined ID for the wallet class
 *         - Environment variable: WALLET_CLASS_ID
 */
$classId = getenv('WALLET_CLASS_ID') ?: 'test-offer-class-id';

/*
 * userId - Developer-defined ID for the user, such as an email address
 *        - Environment variable: WALLET_USER_ID
 */
$userId = getenv('WALLET_USER_ID') ?: 'user-id';

/*
 * objectId - ID for the wallet object
 *          - Format: `issuerId.identifier`
 *          - Should only include alphanumeric characters, '.', '_', or '-'
 *          - `identifier` is developer-defined and unique to the user
 */
$objectId = "{$issuerId}." . preg_replace('/[^\w.-]/i', '_', $userId) . "-{$classId}";

পাইথন

import json
import os
import re
import uuid

from google.auth.transport.requests import AuthorizedSession
from google.oauth2 import service_account
from google.auth import jwt, crypt

# KEY_FILE_PATH - Path to service account key file from Google Cloud Console
#               - Environment variable: GOOGLE_APPLICATION_CREDENTIALS
KEY_FILE_PATH = os.environ.get("GOOGLE_APPLICATION_CREDENTIALS",
                               "/path/to/key.json")

# ISSUER_ID - The issuer ID being updated in this request
#           - Environment variable: WALLET_ISSUER_ID
ISSUER_ID = os.environ.get("WALLET_ISSUER_ID", "issuer-id")

# CLASS_ID - Developer-defined ID for the wallet class
#         - Environment variable: WALLET_CLASS_ID
CLASS_ID = os.environ.get("WALLET_CLASS_ID", "test-offer-class-id")

# USER_ID - Developer-defined ID for the user, such as an email address
#        - Environment variable: WALLET_USER_ID
USER_ID = os.environ.get("WALLET_USER_ID", "test@example.com")

# objectId - ID for the wallet object
#          - Format: `issuerId.identifier`
#          - Should only include alphanumeric characters, '.', '_', or '-'
#          - `identifier` is developer-defined and unique to the user
OBJECT_ID = "%s.%s-%s" % (ISSUER_ID, re.sub(r"[^\w.-]", "_", USER_ID), CLASS_ID)

সি#

using System.IdentityModel.Tokens.Jwt;
using System.Net;
using System.Net.Http.Headers;
using System.Text.RegularExpressions;
using Google.Apis.Auth.OAuth2;
using Microsoft.IdentityModel.Tokens;
using Newtonsoft.Json;


class DemoOffer
{
  /*
  * keyFilePath - Path to service account key file from Google Cloud Console
  *             - Environment variable: GOOGLE_APPLICATION_CREDENTIALS
  */
  static string keyFilePath = Environment.GetEnvironmentVariable("GOOGLE_APPLICATION_CREDENTIALS") ?? "/path/to/key.json";

  /*
  * issuerId - The issuer ID being used in this request
  *          - Environment variable: WALLET_ISSUER_ID
  */
  static string issuerId = Environment.GetEnvironmentVariable("WALLET_ISSUER_ID") ?? "issuer-id";

  /*
  * classId - Developer-defined ID for the wallet class
  *         - Environment variable: WALLET_CLASS_ID
  */
  static string classId = Environment.GetEnvironmentVariable("WALLET_CLASS_ID") ?? "test-offer-class-id";

  /*
  * userId - Developer-defined ID for the user, such as an email address
  *        - Environment variable: WALLET_USER_ID
  */
  static string userId = Environment.GetEnvironmentVariable("WALLET_USER_ID") ?? "user-id";

  /*
  * objectId - ID for the wallet object
  *          - Format: `issuerId.identifier`
  *          - Should only include alphanumeric characters, '.', '_', or '-'
  *          - `identifier` is developer-defined and unique to the user
  */
  static string objectId = $"{issuerId}.{new Regex(@"[^\w.-]", RegexOptions.Compiled).Replace(userId, "_")}-{classId}";

Node.js

const { GoogleAuth } = require('google-auth-library');
const jwt = require('jsonwebtoken');
const { v4: uuidv4 } = require('uuid');

/*
 * keyFilePath - Path to service account key file from Google Cloud Console
 *             - Environment variable: GOOGLE_APPLICATION_CREDENTIALS
 */
const keyFilePath = process.env.GOOGLE_APPLICATION_CREDENTIALS || '/path/to/key.json';

/*
 * issuerId - The issuer ID being updated in this request
 *          - Environment variable: WALLET_ISSUER_ID
 */
const issuerId = process.env.WALLET_ISSUER_ID || 'issuer-id';

/*
 * classId - Developer-defined ID for the wallet class
 *         - Environment variable: WALLET_CLASS_ID
 */
const classId = process.env.WALLET_CLASS_ID || 'test-offer-class-id';

/*
 * userId - Developer-defined ID for the user, such as an email address
 *        - Environment variable: WALLET_USER_ID
 */
let userId = process.env.WALLET_USER_ID || 'user-id';

/*
 * objectId - ID for the wallet object
 *          - Format: `issuerId.identifier`
 *          - Should only include alphanumeric characters, '.', '_', or '-'
 *          - `identifier` is developer-defined and unique to the user
 */
let objectId = `${issuerId}.${userId.replace(/[^\w.-]/g, '_')}-${classId}`;

এরপরে, Google Wallet API কল করার জন্য প্রয়োজনীয় শংসাপত্রগুলি পুনরুদ্ধার করতে ফ্রেমওয়ার্ক লাইব্রেরিগুলির একটি ব্যবহার করুন৷

জাভা

GoogleCredentials credentials = GoogleCredentials.fromStream(new FileInputStream(keyFilePath))
    .createScoped(Lists.newArrayList("https://www.googleapis.com/auth/wallet_object.issuer"));
credentials.refresh();

HttpTransport httpTransport = GoogleNetHttpTransport.newTrustedTransport();
HttpRequestFactory httpRequestFactory = httpTransport.createRequestFactory(new HttpCredentialsAdapter(credentials));

পিএইচপি

$credentials = new ServiceAccountCredentials(
  'https://www.googleapis.com/auth/wallet_object.issuer',
  $keyFilePath
);

$middleware = new AuthTokenMiddleware($credentials);
$stack = HandlerStack::create();
$stack->push($middleware);
$httpClient = new Client([
  'handler' => $stack,
  'auth' => 'google_auth'
]);

পাইথন

credentials = service_account.Credentials.from_service_account_file(
    KEY_FILE_PATH,
    scopes=["https://www.googleapis.com/auth/wallet_object.issuer"])

http_client = AuthorizedSession(credentials)

সি#

credentials = (ServiceAccountCredential)GoogleCredential.FromFile(keyFilePath)
    .CreateScoped(new[] { "https://www.googleapis.com/auth/wallet_object.issuer" })
    .UnderlyingCredential;

httpClient = new HttpClient();
httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue(
    "Bearer",
    await credentials.GetAccessTokenForRequestAsync()
);

Node.js

const credentials = require(keyFilePath);

const httpClient = new GoogleAuth({
  credentials: credentials,
  scopes: 'https://www.googleapis.com/auth/wallet_object.issuer'
});

একটি পাস অবজেক্ট তৈরি করা

একটি পাস অবজেক্ট একটি পাস ক্লাসের একটি উদাহরণ। একটি পাস অবজেক্ট তৈরি করতে, আপনাকে অবশ্যই নিম্নলিখিত বৈশিষ্ট্যগুলি প্রদান করতে হবে:

  • classId : পাস করা ক্লাসের id
  • id : আপনার গ্রাহকের জন্য একটি অনন্য আইডি এই বৈশিষ্ট্যগুলি কীভাবে অফারে উপস্থাপন করা হয় সে সম্পর্কে আরও তথ্যের জন্য টেমপ্লেট নির্দেশিকা পড়ুন।

একটি পাস অবজেক্ট তৈরি করতে কোড নমুনা:

HTTP

POST /walletobjects/v1/offerObject HTTP/1.1
Host: walletobjects.googleapis.com
Content-Type: application/json
Authorization: Bearer <ACCESS_TOKEN>;
Accept-Language: en-us
Accept-Encoding: gzip, deflate
Connection: Keep-Alive

{
  "id": "issuer-id.user-id",
  "classId": "issuer-id.class-id",
  "heroImage": {
    "sourceUri": {
      "uri": "https://farm4.staticflickr.com/3723/11177041115_6e6a3b6f49_o.jpg",
      "description": "Test heroImage description"
    }
  },
  "textModulesData": [
    {
      "header": "Test text module header",
      "body": "Test text module body"
    }
  ],
  "linksModuleData": {
    "uris": [
      {
        "kind": "walletobjects#uri",
        "uri": "http://maps.google.com/",
        "description": "Test link module uri description"
      },
      {
        "kind": "walletobjects#uri",
        "uri": "tel:6505555555",
        "description": "Test link module tel description"
      }
    ]
  },
  "imageModulesData": [
    {
      "mainImage": {
        "kind": "walletobjects#image",
        "sourceUri": {
          "kind": "walletobjects#uri",
          "uri": "http://farm4.staticflickr.com/3738/12440799783_3dc3c20606_b.jpg",
          "description": "Test image module description"
        }
      }
    }
  ],
  "barcode": {
    "type": "qrCode",
    "value": "Testing Offers QR Code"
  },
  "state": "active",
  "validTimeInterval": {
    "kind": "walletobjects#timeInterval",
    "start": {
      "date": "2023-06-12T23:20:50.52Z"
    },
    "end": {
      "date": "2023-12-12T23:20:50.52Z"
    }
  },
  "locations": [
    {
      "kind": "walletobjects#latLongPoint",
      "latitude": 37.424015499999996,
      "longitude": -122.09259560000001
    }
  ]
}

জাভা

HttpRequest objectRequest;
HttpResponse objectResponse;

GenericUrl objectUrl = new GenericUrl(
    "https://walletobjects.googleapis.com/walletobjects/v1/offerObject/" + objectId);
String objectPayload = String.format(
    "{"
  + "  \"id\": \"%s\","
  + "  \"classId\": \"%s.%s\","
  + "  \"heroImage\": {"
  + "    \"sourceUri\": {"
  + "      \"uri\": \"https://farm4.staticflickr.com/3723/11177041115_6e6a3b6f49_o.jpg\","
  + "      \"description\": \"Test heroImage description\""
  + "    }"
  + "  },"
  + "  \"textModulesData\": ["
  + "    {"
  + "      \"header\": \"Test text module header\","
  + "      \"body\": \"Test text module body\""
  + "    }"
  + "  ],"
  + "  \"linksModuleData\": {"
  + "    \"uris\": ["
  + "      {"
  + "        \"kind\": \"walletobjects#uri\","
  + "        \"uri\": \"http://maps.google.com/\","
  + "        \"description\": \"Test link module uri description\""
  + "      },"
  + "      {"
  + "        \"kind\": \"walletobjects#uri\","
  + "        \"uri\": \"tel:6505555555\","
  + "        \"description\": \"Test link module tel description\""
  + "      }"
  + "    ]"
  + "  },"
  + "  \"imageModulesData\": ["
  + "    {"
  + "      \"mainImage\": {"
  + "        \"kind\": \"walletobjects#image\","
  + "        \"sourceUri\": {"
  + "          \"kind\": \"walletobjects#uri\","
  + "          \"uri\": \"http://farm4.staticflickr.com/3738/12440799783_3dc3c20606_b.jpg\","
  + "          \"description\": \"Test image module description\""
  + "        }"
  + "      }"
  + "    }"
  + "  ],"
  + "  \"barcode\": {"
  + "    \"type\": \"qrCode\","
  + "    \"value\": \"Testing Offers QR Code\""
  + "  },"
  + "  \"state\": \"active\","
  + "  \"validTimeInterval\": {"
  + "    \"kind\": \"walletobjects#timeInterval\","
  + "    \"start\": {"
  + "      \"date\": \"2023-06-12T23:20:50.52Z\""
  + "    },"
  + "    \"end\": {"
  + "      \"date\": \"2023-12-12T23:20:50.52Z\""
  + "    }"
  + "  },"
  + "  \"locations\": ["
  + "    {"
  + "      \"kind\": \"walletobjects#latLongPoint\","
  + "      \"latitude\": 37.424015499999996,"
  + "      \"longitude\": -122.09259560000001"
  + "    }"
  + "  ]"
  + "}", objectId, issuerId, classId);

try {
  // Create and send the request
  objectRequest = httpRequestFactory.buildGetRequest(objectUrl);
  objectResponse = objectRequest.execute();

  System.out.println("object GET response: " + objectResponse.parseAsString());
} catch (HttpResponseException ex) {
  if (ex.getStatusCode() == 404) {
    // Object does not yet exist
    // Send POST request to create it
    // Convert body to JSON
    JsonParser objectParser = GsonFactory.getDefaultInstance().createJsonParser(objectPayload);
    GenericJson objectJson = objectParser.parseAndClose(GenericJson.class);
    HttpContent objectBody = new JsonHttpContent(GsonFactory.getDefaultInstance(), objectJson);

    // Create and send the request
    objectRequest = httpRequestFactory.buildPostRequest(objectUrl, objectBody);
    objectResponse = objectRequest.execute();

    System.out.println("object POST response: " + objectResponse.parseAsString());
  } else {
    // Something else went wrong
    throw ex;
  }
}

পিএইচপি

$objectUrl = "https://walletobjects.googleapis.com/walletobjects/v1/offerObject/";
$objectPayload = <<<EOD
{
  "id": "{$objectId}",
  "classId": "{$issuerId}.{$classId}",
  "heroImage": {
    "sourceUri": {
      "uri": "https://farm4.staticflickr.com/3723/11177041115_6e6a3b6f49_o.jpg",
      "description": "Test heroImage description"
    }
  },
  "textModulesData": [
    {
      "header": "Test text module header",
      "body": "Test text module body"
    }
  ],
  "linksModuleData": {
    "uris": [
      {
        "kind": "walletobjects#uri",
        "uri": "http://maps.google.com/",
        "description": "Test link module uri description"
      },
      {
        "kind": "walletobjects#uri",
        "uri": "tel:6505555555",
        "description": "Test link module tel description"
      }
    ]
  },
  "imageModulesData": [
    {
      "mainImage": {
        "kind": "walletobjects#image",
        "sourceUri": {
          "kind": "walletobjects#uri",
          "uri": "http://farm4.staticflickr.com/3738/12440799783_3dc3c20606_b.jpg",
          "description": "Test image module description"
        }
      }
    }
  ],
  "barcode": {
    "type": "qrCode",
    "value": "Testing Offers QR Code"
  },
  "state": "active",
  "validTimeInterval": {
    "kind": "walletobjects#timeInterval",
    "start": {
      "date": "2023-06-12T23:20:50.52Z"
    },
    "end": {
      "date": "2023-12-12T23:20:50.52Z"
    }
  },
  "locations": [
    {
      "kind": "walletobjects#latLongPoint",
      "latitude": 37.424015499999996,
      "longitude": -122.09259560000001
    }
  ]
}
EOD;

try {
  $objectResponse = $httpClient->get($objectUrl . $objectId);
} catch (ClientException $err) {
  if ($err->getResponse()->getStatusCode() == 404) {
    // Object does not yet exist
    // Send POST request to create it
    $objectResponse = $httpClient->post(
      $objectUrl,
      ['json' => json_decode($objectPayload)]
    );
  }
}

echo 'object GET or POST response: ' . $objectResponse->getBody();

পাইথন

OBJECT_URL = "https://walletobjects.googleapis.com/walletobjects/v1/offerObject/"
object_payload = {
    "id": OBJECT_ID,
    "classId": f"{ISSUER_ID}.{CLASS_ID}",
    "heroImage": {
        "sourceUri": {
            "uri": "https://farm4.staticflickr.com/3723/11177041115_6e6a3b6f49_o.jpg",
            "description": "Test heroImage description"
        }
    },
    "textModulesData": [
        {
            "header": "Test text module header",
            "body": "Test text module body"
        }
    ],
    "linksModuleData": {
        "uris": [
            {
                "kind": "walletobjects#uri",
                "uri": "http://maps.google.com/",
                "description": "Test link module uri description"
            },
            {
                "kind": "walletobjects#uri",
                "uri": "tel:6505555555",
                "description": "Test link module tel description"
            }
        ]
    },
    "imageModulesData": [
        {
            "mainImage": {
                "kind": "walletobjects#image",
                "sourceUri": {
                    "kind": "walletobjects#uri",
                    "uri": "http://farm4.staticflickr.com/3738/12440799783_3dc3c20606_b.jpg",
                    "description": "Test image module description"
                }
            }
        }
    ],
    "barcode": {
        "type": "qrCode",
        "value": "Testing Offers QR Code"
    },
    "state": "active",
    "validTimeInterval": {
        "kind": "walletobjects#timeInterval",
        "start": {
            "date": "2023-06-12T23:20:50.52Z"
        },
        "end": {
            "date": "2023-12-12T23:20:50.52Z"
        }
    },
    "locations": [
        {
            "kind": "walletobjects#latLongPoint",
            "latitude": 37.424015499999996,
            "longitude": -122.09259560000001
        }
    ]
}

object_response = http_client.get(OBJECT_URL + OBJECT_ID)
if object_response.status_code == 404:
    # Object does not yet exist
    # Send POST request to create it
    object_response = http_client.post(
        OBJECT_URL,
        json=object_payload
    )

print("object GET or POST response:", object_response.text)

সি#

string objectUrl = "https://walletobjects.googleapis.com/walletobjects/v1/offerObject/";
var objectPayload = new
{
  id = objectId,
  classId = $"{issuerId}.{classId}",
  heroImage = new
  {
    sourceUri = new
    {
      uri = "https://farm4.staticflickr.com/3723/11177041115_6e6a3b6f49_o.jpg",
      description = "Test heroImage description"
    }
  },
  textModulesData = new object[]
  {
    new
    {
      header = "Test text module header",
      body = "Test text module body"
    }
  },
  linksModuleData = new
  {
    uris = new object[]
    {
      new
      {
        kind = "walletobjects#uri",
        uri = "http://maps.google.com/",
        description = "Test link module uri description"
      },
      new
      {
        kind = "walletobjects#uri",
        uri = "tel:6505555555",
        description = "Test link module tel description"
      }
    }
  },
  imageModulesData = new object[]
  {
    new
    {
      mainImage = new
      {
        kind = "walletobjects#image",
        sourceUri = new
        {
          kind = "walletobjects#uri",
          uri = "http://farm4.staticflickr.com/3738/12440799783_3dc3c20606_b.jpg",
          description = "Test image module description"
        }
      }
    }
  },
  barcode = new
  {
    type = "qrCode",
    value = "Testing Offers QR Code"
  },
  state = "active",
  validTimeInterval = new
  {
    kind = "walletobjects#timeInterval",
    start = new
    {
      date = "2023-06-12T23:20:50.52Z"
    },
    end = new
    {
      date = "2023-12-12T23:20:50.52Z"
    }
  },
  locations = new object[]
  {
    new
    {
      kind = "walletobjects#latLongPoint",
      latitude = 37.424015499999996,
      longitude = -122.09259560000001
    }
  }
};

HttpRequestMessage objectRequest = new HttpRequestMessage(HttpMethod.Get, $"{objectUrl}{objectId}");
HttpResponseMessage objectResponse = httpClient.Send(objectRequest);
if (objectResponse.StatusCode == HttpStatusCode.NotFound)
{
  // Object does not yet exist
  // Send POST request to create it
  objectRequest = new HttpRequestMessage(HttpMethod.Post, objectUrl);
  objectRequest.Content = new StringContent(JsonConvert.SerializeObject(objectPayload));
  objectResponse = httpClient.Send(objectRequest);
}

string objectContent = await objectResponse.Content.ReadAsStringAsync();
Console.WriteLine($"object GET or POST response: {objectContent}");

Node.js

const objectUrl = 'https://walletobjects.googleapis.com/walletobjects/v1/offerObject/';
const objectPayload = {
  "id": objectId,
  "classId": `${issuerId}.${classId}`,
  "heroImage": {
    "sourceUri": {
      "uri": "https://farm4.staticflickr.com/3723/11177041115_6e6a3b6f49_o.jpg",
      "description": "Test heroImage description"
    }
  },
  "textModulesData": [
    {
      "header": "Test text module header",
      "body": "Test text module body"
    }
  ],
  "linksModuleData": {
    "uris": [
      {
        "kind": "walletobjects#uri",
        "uri": "http://maps.google.com/",
        "description": "Test link module uri description"
      },
      {
        "kind": "walletobjects#uri",
        "uri": "tel:6505555555",
        "description": "Test link module tel description"
      }
    ]
  },
  "imageModulesData": [
    {
      "mainImage": {
        "kind": "walletobjects#image",
        "sourceUri": {
          "kind": "walletobjects#uri",
          "uri": "http://farm4.staticflickr.com/3738/12440799783_3dc3c20606_b.jpg",
          "description": "Test image module description"
        }
      }
    }
  ],
  "barcode": {
    "type": "qrCode",
    "value": "Testing Offers QR Code"
  },
  "state": "active",
  "validTimeInterval": {
    "kind": "walletobjects#timeInterval",
    "start": {
      "date": "2023-06-12T23:20:50.52Z"
    },
    "end": {
      "date": "2023-12-12T23:20:50.52Z"
    }
  },
  "locations": [
    {
      "kind": "walletobjects#latLongPoint",
      "latitude": 37.424015499999996,
      "longitude": -122.09259560000001
    }
  ]
};
let objectResponse;

try {
  objectResponse = await httpClient.request({
    url: objectUrl + objectId,
    method: 'GET'
  });
} catch (err) {
  if (err.response && err.response.status === 404) {
    // Object does not yet exist
    // Send POST request to create it
    objectResponse = await httpClient.request({
      url: objectUrl,
      method: 'POST',
      data: objectPayload
    });
  } else {
    objectResponse = err;
  }
}

console.log('object GET or POST response:', objectResponse);

একবার সম্পূর্ণ হলে, সার্ভারে আপনার গ্রাহকের পাস অবজেক্ট তৈরি করা হবে। যাইহোক, এই পর্যায়ে, পাস অবজেক্টটি Google ব্যবহারকারী বা তাদের ডিভাইসের সাথে লিঙ্ক করা হয়নি। পাসটি একটি Google Wallet ব্যবহারকারীর সাথে যুক্ত করার জন্য, ব্যবহারকারীকে প্রথমে Google Wallet-এ পাসটি যোগ করতে হবে

Google Wallet এ যোগ করা হচ্ছে

Google Wallet-এ একটি পাস যোগ করা পাস অবজেক্টকে Google ব্যবহারকারীর সাথে লিঙ্ক করে এবং শুধুমাত্র লগ ইন করা Google পরিচয়ের প্রেক্ষাপটে শুরু করা যেতে পারে। ব্যবহারকারীকে Google Wallet URL-এ যোগ করার নির্দেশ দিয়ে এটি অর্জন করা যেতে পারে।

Google Wallet URL-এ যোগ করুন একটি গতিশীলভাবে তৈরি করা URL যাতে পূর্ববর্তী ধাপে তৈরি করা পাস অবজেক্ট আইডি সম্পর্কে নিম্নলিখিত তথ্য রয়েছে৷ এই তথ্যটি একটি JSON ওয়েব টোকেন (JWT) হিসাবে এনকোড করা হয়েছে।

JSON ওয়েব টোকেন (JWT)

JWT-তে এমন দাবি রয়েছে যে আপনি (ইস্যুকারী) পাস অবজেক্ট সম্পর্কে করছেন যা ব্যবহারকারী দ্বারা সংরক্ষিত হবে। পরিষেবা অ্যাকাউন্ট তৈরি করুন ধাপ থেকে প্রাপ্ত পরিষেবা অ্যাকাউন্ট কী থেকে ব্যক্তিগত_কী ব্যবহার করে JWT-কে অবশ্যই স্বাক্ষর করতে হবে এবং Google JWT স্বাক্ষর যাচাই করে এই দাবিগুলিকে যাচাই করবে।

JWT দাবিগুলির নিম্নলিখিত কাঠামো থাকা উচিত:

{
  "aud": "google",
  "origins": ["https://example.com"],
  "iss": "my-service-account@my-project-id.iam.gserviceaccount.com",
  "typ": "savetowallet",
  "payload": {
    "offerObjects": [
      {
        "id": "PASSES_OBJECT_ID_1234567890"
      }
    ]
  }
}

private_key claims তৈরি করুন (ধাপ 1), এবং পরিষেবা অ্যাকাউন্ট কী-এর ব্যক্তিগত_কী (ধাপ 2) দিয়ে দাবিগুলি স্বাক্ষর করে token পান:

জাভা

HashMap<String, String> objectIdMap = new HashMap<String, String>();
objectIdMap.put("id", objectId);

HashMap<String, Object> payload = new HashMap<String, Object>();
payload.put("offerObjects", new ArrayList<>(Arrays.asList(objectIdMap)));

HashMap<String, Object> claims = new HashMap<String, Object>();
claims.put("iss", ((ServiceAccountCredentials) credentials).getClientEmail());
claims.put("aud", "google");
claims.put("origins", new ArrayList<>(Arrays.asList("www.example.com")));
claims.put("typ", "savetowallet");
claims.put("payload", payload);

Algorithm algorithm = Algorithm.RSA256(
    null,
    (RSAPrivateKey) ((ServiceAccountCredentials) credentials).getPrivateKey());
String token = JWT.create()
    .withPayload(claims)
    .sign(algorithm);
String saveUrl = "https://pay.google.com/gp/v/save/" + token;

System.out.println(saveUrl);

পিএইচপি

$serviceAccount = json_decode(file_get_contents($keyFilePath), true);
$claims = [
  'iss' => $serviceAccount['client_email'],
  'aud' => 'google',
  'origins' => ['www.example.com'],
  'typ' => 'savetowallet',
  'payload' => [
    'offerObjects' => [
      ['id' => $objectId]
    ]
  ]
];

$token = JWT::encode($claims, $serviceAccount['private_key'], 'RS256');
$saveUrl = "https://pay.google.com/gp/v/save/${token}";

echo $saveUrl;

পাইথন

claims = {
    "iss": http_client.credentials.service_account_email,
    "aud": "google",
    "origins": ["www.example.com"],
    "typ": "savetowallet",
    "payload": {
        "offerObjects": [
            {
                "id": OBJECT_ID
            }
        ]
    }
}

signer = crypt.RSASigner.from_service_account_file(KEY_FILE_PATH)
token = jwt.encode(signer, claims).decode("utf-8")
save_url = f"https://pay.google.com/gp/v/save/{token}"

print(save_url)

সি#

JwtPayload claims = new JwtPayload();
claims.Add("iss", credentials.Id);
claims.Add("aud", "google");
claims.Add("origins", new string[] { "www.example.com" });
claims.Add("typ", "savetowallet");
claims.Add("payload", new
{
  offerObjects = new object[]
  {
    new
    {
      id = objectId
    }
  }
});

RsaSecurityKey key = new RsaSecurityKey(credentials.Key);
SigningCredentials signingCredentials = new SigningCredentials(key, SecurityAlgorithms.RsaSha256);
JwtSecurityToken jwt = new JwtSecurityToken(new JwtHeader(signingCredentials), claims);
string token = new JwtSecurityTokenHandler().WriteToken(jwt);
string saveUrl = $"https://pay.google.com/gp/v/save/{token}";

Console.WriteLine(saveUrl);

Node.js

const claims = {
  iss: credentials.client_email,
  aud: 'google',
  origins: ['www.example.com'],
  typ: 'savetowallet',
  payload: {
    offerObjects: [{
      id: objectId
    }],
  }
};

const token = jwt.sign(claims, credentials.private_key, { algorithm: 'RS256' });
const saveUrl = `https://pay.google.com/gp/v/save/${token}`;

console.log(saveUrl);

আপনি একটি স্বাক্ষরিত JWT পাওয়ার পরে, আপনি Google Wallet লিঙ্কে যোগ করতে এই তথ্যটি ব্যবহার করতে পারেন।

Google Wallet লিঙ্কে যোগ করুন নিম্নলিখিত বিন্যাস আছে:

https://pay.google.com/gp/v/save/{token}

এই লিঙ্কটি আপনার ওয়েব পৃষ্ঠায় এম্বেড করা যেতে পারে, বা হাইপারলিঙ্ক হিসাবে ইমেল করা যেতে পারে। এটি চ্যাট এবং এসএমএসের মতো অন্যান্য চ্যানেল ব্যবহার করে গ্রাহককে পাঠানো যেতে পারে।

একটি এনকোডেড JWT এর নিরাপদ দৈর্ঘ্য হল 1800 অক্ষর। যদি আপনার JWT এই সীমার নিচে হয়, তাহলে সম্পূর্ণ বস্তুটি স্বাক্ষরিত JWT-তে অন্তর্ভুক্ত করা যেতে পারে। আপনার JWT এই সীমার নিচে থাকা উচিত। দৈর্ঘ্য 1800 অক্ষরের বেশি হলে, ওয়েব ব্রাউজার দ্বারা ছেঁটে ফেলার কারণে সংরক্ষণ কাজ নাও করতে পারে।

Google Wallet বোতামে যোগ করুন

সেরা ফলাফলের জন্য, আপনার ওয়েব পৃষ্ঠা, ইমেল বা অ্যান্ড্রয়েড অ্যাপ্লিকেশানে Google Wallet বোতাম সম্পদের সুবিধা নিন।

Google Wallet বোতাম দুটি উপায়ে রেন্ডার করা যেতে পারে:

  • জাভাস্ক্রিপ্ট ওয়েব বোতাম ওয়েবসাইটগুলির জন্য ব্যবহার করা যেতে পারে।
  • একটি Google Wallet বোতাম সহ JWT লিঙ্কটি ইমেল, এসএমএস এবং অ্যাপস এবং ওয়েবসাইটগুলির জন্য ব্যবহার করা যেতে পারে।

পরবর্তী পদক্ষেপ

  • একটি অফার আপডেট করুন
  • আপনার অফারের চেহারা কাস্টমাইজ করুন
  • এখনও প্রশ্ন আছে? আমাদের FAQ পর্যালোচনা করুন.