Google Wallet का पास डेवलपमेंट फ़्लो

Google Wallet API, पहले से तय किए गए पास के सेट उपलब्ध कराता है. इन्हें खास तरह के इस्तेमाल के लिए ऑप्टिमाइज़ किया जाता है. जैसे, उपहार कार्ड, बोर्डिंग पास, इवेंट के टिकट वगैरह. एक जेनरिक पास भी होता है. इसे इस्तेमाल के उन मामलों में इस्तेमाल किया जाता है, जहां कोई खास तरह का पास उपलब्ध न हो.

इस लेख का मकसद, आपको Google Wallet API का इस्तेमाल करके पास बनाने और उसे जारी करने के बुनियादी तरीकों के बारे में जानकारी देना है. यहां दिए गए कुछ चरणों को पूरा करने के कई तरीके हैं. हालांकि, उच्च लेवल पर सभी पास टाइप, एक ही बेसिक डेवलपमेंट फ़्लो का इस्तेमाल करके बनाए जाते हैं.

पास बनाने के बारे में सिलसिलेवार तरीके से जानकारी पाने के लिए, वेब, ईमेल, और एसएमएस या Android ऐप्लिकेशन से जुड़ी गाइड देखें.

यह किसलिए है

पास क्लास, उन प्रॉपर्टी के सेट के बारे में बताती है जो किसी टेंप्लेट की तरह, एक से ज़्यादा पास में एक ही होती हैं. उदाहरण के लिए, अगर आपको किसी इवेंट के टिकट जारी करने हैं, तो पास क्लास उन फ़ील्ड के बारे में जानकारी देगी जो सभी टिकटों में एक जैसे होते हैं. जैसे, इवेंट का नाम, तारीख, और समय.

आपके जारी किए जाने वाले हर पास के लिए, पास क्लास का रेफ़रंस देना ज़रूरी है. आपको अपनी बनाई गई हर पास क्लास के लिए एक यूनीक आईडी भी असाइन करना होगा. इसका इस्तेमाल, पास बनाते समय रेफ़रंस के लिए किया जाता है.

इसे कैसे किया जाता है

पास की क्लास, JSON फ़ॉर्मैट में तय की जाती है. इसे Google Wallet REST API, Android SDK टूल या Google Wallet Business Console में बनाया जा सकता है.

पास की कैटगरी के उदाहरण दिखाएं

{
  "id": "ISSUER_ID.EVENT_CLASS_ID",
  "issuerName": "[TEST ONLY] Heraldic Event",
  "localizedIssuerName": {
    "defaultValue": {
      "language": "en-US",
      "value": "[TEST ONLY] Heraldic Event"
    }
  },
  "logo": {
    "sourceUri": {
      "uri": "https://images.unsplash.com/photo-1475721027785-f74eccf877e2?ixlib=rb-4.0.3&ixid=MnwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8&auto=format&fit=crop&w=660&h=660"
    },
    "contentDescription": {
      "defaultValue": {
        "language": "en-US",
        "value": "LOGO_IMAGE_DESCRIPTION"
      }
    }
  },
  "eventName": {
    "defaultValue": {
      "language": "en-US",
      "value": "Google Live"
    }
  },
  "venue": {
    "name": {
      "defaultValue": {
        "language": "en-US",
        "value": "Shoreline Amphitheater"
      }
    },
    "address": {
      "defaultValue": {
        "language": "en-US",
        "value": "ADDRESS_OF_THE_VENUE"
      }
    }
  },
  "dateTime": {
    "start": "2023-04-12T11:30"
  },
  "reviewStatus": "UNDER_REVIEW",
  "hexBackgroundColor": "#264750",
  "heroImage": {
    "sourceUri": {
      "uri": "https://images.unsplash.com/photo-1501281668745-f7f57925c3b4?ixlib=rb-4.0.3&ixid=MnwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8&auto=format&fit=crop&w=1032&h=336"
    },
    "contentDescription": {
      "defaultValue": {
        "language": "en-US",
        "value": "HERO_IMAGE_DESCRIPTION"
      }
    }
  }
}
    

यह किसलिए है

पास ऑब्जेक्ट, एक यूनीक पास की प्रॉपर्टी के बारे में बताता है, जिसे किसी उपयोगकर्ता को जारी किया जाएगा. उदाहरण के लिए, किसी इवेंट के टिकट का पास ऑब्जेक्ट, किसी खास टिकट के लिए यूनीक फ़ील्ड तय करता है. जैसे, सीट नंबर या क्यूआर कोड.

जब पास ऑब्जेक्ट बन जाता है, तो Google Wallet API एक नया पास सेव करता है और उसे आपके जारी करने वाले खाते से जोड़ देता है. सेव किया गया यह पास, पास ऑब्जेक्ट की यूनीक प्रॉपर्टी और इससे जुड़ी पास क्लास की टेंप्लेट प्रॉपर्टी का कॉम्बिनेशन है.

आपको हर पास ऑब्जेक्ट को एक यूनीक आईडी भी असाइन करना होगा. इसका इस्तेमाल, पास जारी करते समय रेफ़रंस के लिए किया जाता है.

इसे कैसे किया जाता है

पास ऑब्जेक्ट, JSON फ़ॉर्मैट में होता है. इसे Google Wallet REST API या Android SDK टूल की मदद से बनाया जा सकता है.

पास हुए ऑब्जेक्ट के उदाहरण दिखाएं

{
  "id": "ISSUER_ID.OBJECT_ID",
  "classId": "ISSUER_ID.EVENT_CLASS_ID",
  "state": "ACTIVE",
  "seatInfo": {
    "seat": {
      "defaultValue": {
        "language": "en-us",
        "value": "5"
      }
    },
    "row": {
      "defaultValue": {
        "language": "en-us",
        "value": "G"
      }
    },
    "section": {
      "defaultValue": {
        "language": "en-us",
        "value": "40"
      }
    },
    "gate": {
      "defaultValue": {
        "language": "en-us",
        "value": "3A"
      }
    }
  },
  "barcode": {
    "type": "QR_CODE",
    "value": "BARCODE_VALUE",
    "alternateText": ""
  }
}
    

यह किसलिए है

किसी उपयोगकर्ता को पास जारी करने के लिए, पास क्लास और पास ऑब्जेक्ट को JSON वेब टोकन (JWT) में एन्कोड करना ज़रूरी है. JWT फ़ॉर्मैट, दो पक्षों के बीच दावों को दिखाने का एक सामान्य और ओपन स्टैंडर्ड है. Google Wallet API से पास जारी करने के मामले में, JWT का इस्तेमाल यह दावा करने के लिए किया जाता है कि उपयोगकर्ता के पास, जारी करने वाले के खाते से जुड़े किसी खास पास को ऐक्सेस करने का अधिकार है.

जब Google Wallet API को JWT भेजा जाता है, तो कोड में बदले गए डेटा का इस्तेमाल, किसी पास की पहचान करने और उसे उपयोगकर्ता को जारी करने के लिए किया जाता है. अगर पास पहले ही जारी किया जा चुका है, तो इस डेटा की मदद से Google Wallet API को यह पता करने की अनुमति भी मिलती है कि पास डुप्लीकेट है. इसके बाद, इसे उपयोगकर्ता के Google Wallet में एक से ज़्यादा बार नहीं जोड़ा जा सकता.

इसे कैसे किया जाता है

JWT को JSON फ़ॉर्मैट में, JWT के स्पेसिफ़िकेशन के आधार पर तय किया जाता है. Google Wallet API की मदद से पास जारी करने के लिए JWT तय करने के लिए, आपको JWT की payload प्रॉपर्टी में उस पास की जानकारी देनी होगी जिसे आपको जारी करना है.

JWT का उदाहरण दिखाएं

{
  "iss": "issuer@example.com",
  "aud": "google",
  "typ": "savetowallet",
  "iat": 1696877738,
  "origins": [
    "www.example.com"
  ],
  "payload": {
    "eventTicketObjects": [
      {
        "id": "ISSUER_ID.LOYALTY_OBJECT_SUFFIX"
      }
    ]
  }
}
    

यह किसलिए है

पास जारी करने के लिए, Google Wallet API को भेजे जाने वाले सभी JWT, उन क्रेडेंशियल से साइन किए जाने चाहिए जिन्हें आपने Google Wallet Business Console में पहले उपलब्ध कराया था. साइनिंग की सुविधा, JWT को एन्क्रिप्ट करने के लिए आपके क्रेडेंशियल का इस्तेमाल करती है, ताकि आपके पास सुरक्षित रहें. साथ ही, Google Wallet API को यह पुष्टि करने की अनुमति दी जा सके कि इसमें कोड में बदली गई जानकारी मान्य है और जारी करने वाले के खाते से जुड़ी है.

इसे कैसे किया जाता है

Google Wallet की क्लाइंट लाइब्रेरी और Android SDK, आपके JWT पर साइन करने के आसान तरीके उपलब्ध कराते हैं. ऐसी कई ओपन-सोर्स लाइब्रेरी भी उपलब्ध हैं जो कोड साइनिंग में आने वाली मुश्किलों को मैनेज करती हैं, ताकि आप इनमें से कोई भी विकल्प चुन सकें.

जो लोग Google Wallet REST API का इस्तेमाल करके पास जारी करते हैं उनके लिए JWT, Google Cloud Service Account की कुंजी से साइन किया जाता है. Google Wallet का Android SDK इस्तेमाल करने वाले लोग, यह SDK टूल आपके ऐप्लिकेशन साइनिंग सर्टिफ़िकेट के SHA-1 फ़िंगरप्रिंट के साथ, JWT में हस्ताक्षर होने का काम अपने-आप कर लेता है.

आपके क्रेडेंशियल की सुरक्षा के लिए, JWT में सिर्फ़ आपके सर्वर पर या ऐप्लिकेशन में Google Wallet Android SDK का इस्तेमाल करके साइन इन किया जाना चाहिए.

कोड साइनिंग का उदाहरण दिखाएं

Java

  // Create the JWT as a HashMap object
  HashMap<String, Object> claims = new HashMap<String, Object>();
  claims.put("iss", ((ServiceAccountCredentials) credentials).getClientEmail());
  claims.put("aud", "google");
  claims.put("origins", Arrays.asList("www.example.com"));
  claims.put("typ", "savetowallet");

  // Create the Google Wallet payload and add to the JWT
  HashMap<String, Object> payload = new HashMap<String, Object>();
  payload.put("eventTicketObjects", Arrays.asList(newObject));
  claims.put("payload", payload);

  // Google Cloud service account credentials are used to sign the JWT
  Algorithm algorithm =
      Algorithm.RSA256(
          null, (RSAPrivateKey) ((ServiceAccountCredentials) credentials).getPrivateKey());
  String token = JWT.create().withPayload(claims).sign(algorithm);
        

Node.JS

  // Create the JWT claims
  let claims = {
    iss: this.credentials.client_email,
    aud: 'google',
    origins: ['www.example.com'],
    typ: 'savetowallet',
    payload: {
      eventTicketObjects: [newObject]
    },
  };

  // The service account credentials are used to sign the JWT
  let token = jwt.sign(claims, this.credentials.private_key, { algorithm: 'RS256' });
        

Python

  # Create the JWT claims
  claims = {
      'iss': self.credentials.service_account_email,
      'aud': 'google',
      'origins': ['www.example.com'],
      'typ': 'savetowallet',
      'payload': {
          # The listed classes and objects will be created
          'eventTicketObjects': [new_object]
      }
  }

  # The service account credentials are used to sign the JWT
  signer = crypt.RSASigner.from_service_account_file(self.key_file_path)
  token = jwt.encode(signer, claims).decode('utf-8')
        

यह किसलिए है

हस्ताक्षर किया गया JWT बना लेने के बाद, Google Wallet का इस्तेमाल करने वाले व्यक्ति को अपना पास जारी किया जा सकता है! ऐसा करने के लिए, उपयोगकर्ता को 'Google Wallet में जोड़ें' विकल्प दिखाएं बटन या लिंक. जब कोई उपयोगकर्ता बटन या हाइपरलिंक पर क्लिक करता है, तब हस्ताक्षर किया गया JWT, Google Wallet API को भेजा जाता है. इसके बाद, वह आपके सेव किए गए क्रेडेंशियल की मदद से, इसे डिक्रिप्ट करता है. JWT हस्ताक्षर की पुष्टि होने के बाद, उपयोगकर्ता को पास जारी कर दिया जाएगा, ताकि वह उसे Google Wallet में सेव कर सके.

इसे कैसे किया जाता है

'Google Wallet में जोड़ें' खाता बनाने के लिए बटन पर क्लिक करने के लिए Google Wallet Android SDK का इस्तेमाल करें. वेब, ईमेल, और मैसेज जैसे दूसरे सभी प्लैटफ़ॉर्म के लिए, https://pay.google.com/gp/v/save/<signed_jwt> फ़ॉर्मैट में हाइपरलिंक बनाएं. जहां भी संभव हो, इस लिंक को उपयोगकर्ता को 'Google वॉलेट में जोड़ें' के रूप में डिलीवर करना सबसे अच्छा होता है बटन.

'Google Wallet में जोड़ें' का इस्तेमाल करने के बारे में ज़्यादा जानकारी के लिए बटन पर क्लिक करने के बाद, Google Wallet API ब्रैंड के दिशा-निर्देश देखें

उदाहरण कोड दिखाएं

  https://pay.google.com/gp/v/save/<signed_jwt>
        

Android SDK

  private lateinit var walletClient: PayClient
  private val addToGoogleWalletRequestCode = 1000
  private lateinit var addToGoogleWalletButton: View

  override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    walletClient = Pay.getClient(this)
    addToGoogleWalletButton.setOnClickListener {
      walletClient.savePasses(newObjectJson, this, addToGoogleWalletRequestCode)
    }
  }
        

पास की जानकारी सेव करने के बाद, उपयोगकर्ता के Google Wallet ऐप्लिकेशन में उसकी जानकारी दिखेगी. साथ ही, सेव किए गए पास की जानकारी भी दिखेगी.

JWT में पास ऑब्जेक्ट और पास क्लास बनाना

पास की क्लास और पास ऑब्जेक्ट, Google Wallet REST API या Android SDK का इस्तेमाल करके पहले से बनाए जा सकते हैं. पास बनाने के बाद, उनका इस्तेमाल उनके आईडी का रेफ़रंस देकर पास जारी करने के लिए किया जाता है.

इसके अलावा, 'अभी समय' पर पास क्लास और पास ऑब्जेक्ट भी बनाए जा सकते हैं उनके JSON को सीधे JWT में एम्बेड करके. इसका इस्तेमाल, उपयोगकर्ता को पास जारी करने के लिए किया जाता है. इस तरीके में, Google Wallet API की मदद से पास की क्लास और पास ऑब्जेक्ट बनाए जाते हैं. ऐसा तब किया जाता है, जब साइन की गई JWT, 'Google Wallet में जोड़ें' का इस्तेमाल करके भेजी जाती है बटन या लिंक.

उदाहरण के लिए, नीचे दी गई टेबल में, payload.eventTicketClasses और payload.eventTicketObjects प्रॉपर्टी का इस्तेमाल करके, तय किए गए नए पास क्लास और पास ऑब्जेक्ट वाला JWT दिखाया गया है. ध्यान दें कि ये प्रॉपर्टी, अरे हैं. इसका मतलब है कि ये एक या एक से ज़्यादा पास क्लास या पास ऑब्जेक्ट को स्वीकार कर सकती हैं. JWT में, एक ऐसा नया Passes ऑब्जेक्ट भी सेट किया जा सकता है जो किसी मौजूदा पास क्लास का रेफ़रंस अपने आईडी से देता है.

JWT का उदाहरण दिखाएं

  {
    "iss": "issuer@example.com",
    "aud": "google",
    "typ": "savetowallet",
    "iat": 1696877738,
    "origins": [
      "www.example.com"
    ],
    "payload": {
      "eventTicketClasses": [{
        "id": "ISSUER_ID.EVENT_CLASS_ID",
        "issuerName": "[TEST ONLY] Heraldic Event",
        "localizedIssuerName": {
          "defaultValue": {
            "language": "en-US",
            "value": "[TEST ONLY] Heraldic Event"
          }
        },
        "logo": {
          "sourceUri": {
            "uri": "https://images.unsplash.com/photo-1475721027785-f74eccf877e2?ixlib=rb-4.0.3&ixid=MnwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8&auto=format&fit=crop&w=660&h=660"
          },
          "contentDescription": {
            "defaultValue": {
              "language": "en-US",
              "value": "LOGO_IMAGE_DESCRIPTION"
            }
          }
        },
        "eventName": {
          "defaultValue": {
            "language": "en-US",
            "value": "Google Live"
          }
        },
        "venue": {
          "name": {
            "defaultValue": {
              "language": "en-US",
              "value": "Shoreline Amphitheater"
            }
          },
          "address": {
            "defaultValue": {
              "language": "en-US",
              "value": "ADDRESS_OF_THE_VENUE"
            }
          }
        },
        "dateTime": {
          "start": "2023-04-12T11:30"
        },
        "reviewStatus": "UNDER_REVIEW",
        "hexBackgroundColor": "#264750",
        "heroImage": {
          "sourceUri": {
            "uri": "https://images.unsplash.com/photo-1501281668745-f7f57925c3b4?ixlib=rb-4.0.3&ixid=MnwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8&auto=format&fit=crop&w=1032&h=336"
          },
          "contentDescription": {
            "defaultValue": {
              "language": "en-US",
              "value": "HERO_IMAGE_DESCRIPTION"
            }
          }
        }
      }],
      "eventTicketObjects": [{
        "id": "ISSUER_ID.OBJECT_ID",
        "classId": "ISSUER_ID.EVENT_CLASS_ID",
        "state": "ACTIVE",
        "seatInfo": {
          "seat": {
            "defaultValue": {
              "language": "en-us",
              "value": "5"
            }
          },
          "row": {
            "defaultValue": {
              "language": "en-us",
              "value": "G"
            }
          },
          "section": {
            "defaultValue": {
              "language": "en-us",
              "value": "40"
            }
          },
          "gate": {
            "defaultValue": {
              "language": "en-us",
              "value": "3A"
            }
          }
        },
        "barcode": {
          "type": "QR_CODE",
          "value": "BARCODE_VALUE",
          "alternateText": ""
        }
      }]
    }
  }