Google Wallet Pass डेवलपमेंट फ़्लो

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 Web Token (JWT) में एन्कोड किया जाना चाहिए. JWT फ़ॉर्मैट दो पक्षों के बीच के दावों को दिखाने के लिए, एक सामान्य और ओपन स्टैंडर्ड है. Google Wallet API से पास जारी करने के मामले में, JWT का इस्तेमाल यह दावा करने के लिए किया जाता है कि उपयोगकर्ता के पास, आपके जारी करने वाले खाते से जुड़े खास पास को ऐक्सेस करने का अधिकार है.

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

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

JWT, JWT के स्पेसिफ़िकेशन के हिसाब से, JSON फ़ॉर्मैट में तय किए जाते हैं. 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 सेवा खाता कुंजी से साइन किया जाता है. Google Wallet Android SDK का इस्तेमाल करने वाले लोगों के लिए, यह SDK टूल आपके ऐप्लिकेशन साइनिंग सर्टिफ़िकेट के SHA-1 फ़िंगरप्रिंट के साथ, JWT पर हस्ताक्षर करने का काम अपने-आप मैनेज करता है.

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

उदाहरण कोड हस्ताक्षर दिखाएं

Java

  // Create the JWT as a HashMap object
  HashMap claims = new HashMap();
  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 payload = new HashMap();
  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 में सेव करने के लिए पास जारी कर दिया जाएगा.

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

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

'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 का इस्तेमाल करके पहले से बनाए जा सकते हैं. पास बनाने के बाद, उनका इस्तेमाल उनके आईडी के बारे में बताकर पास जारी करने के लिए किया जाता है.

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

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

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": ""
        }
      }]
    }
  }