कॉलबैक जोड़ें और मिटाएं

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

ज़रूरी शर्तें

शुरू करने से पहले, यहां दी गई शर्तें देखें:

  • ऐसा एचटीटीपीएस एंडपॉइंट तैयार करें जो पोस्ट अनुरोधों को मैनेज करता हो. यह एंडपॉइंट सार्वजनिक तौर पर उपलब्ध होना चाहिए.
  • हर क्लास के लिए, प्रोग्राम के हिसाब से कॉलबैक एंडपॉइंट को अपडेट करें. REST API में, callbackOptions क्लास के हिसाब से प्रॉपर्टी देखें.
  • सुझाव: हस्ताक्षर की पुष्टि करने के लिए, Tink लाइब्रेरी का इस्तेमाल करें.

कॉलबैक लागू करना

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

हस्ताक्षर की पुष्टि करना

हमारा सुझाव है कि एचटीटीपीएस एंडपॉइंट लागू करते समय, मैसेज के हस्ताक्षर की पुष्टि करने के लिए, Tink लाइब्रेरी का इस्तेमाल करें. Tink लाइब्रेरी PaymentMethodTokenRecipient की सुविधा देती है. यह एक ऐसी सुविधा है जो हस्ताक्षर की पुष्टि अपने-आप करती है और पुष्टि होने के बाद, असल मैसेज दिखाता है.

इस उदाहरण में, PaymentMethodTokenRecipient को लागू करने के लिए, Tink लाइब्रेरी का इस्तेमाल करने का तरीका बताया गया है:

import java.io.IOException;
import javax.servlet.http.*;
import com.google.common.io.CharStreams;
import com.google.crypto.tink.apps.paymentmethodtoken.*;

// Replace ISSUER_ID with your issuer id
private static final String RECIPIENT_ID = "ISSUER_ID";

private static final String PUBLIC_KEY_URL = "https://pay.google.com/gp/m/issuer/keys";
private static final String SENDER_ID = "GooglePayPasses";
private static final String PROTOCOL = "ECv2SigningOnly";

private static final GooglePaymentsPublicKeysManager keysManager = new GooglePaymentsPublicKeysManager.Builder()
        .setKeysUrl(PUBLIC_KEY_URL)
        .build();

public void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException {
  try {
    // Extract signed message with signature from POST request body.
    String signedMessage = CharStreams.toString(request.getReader());
    PaymentMethodTokenRecipient recipient =
            new PaymentMethodTokenRecipient.Builder()
                    .protocolVersion(PROTOCOL)
                    .fetchSenderVerifyingKeysWith(keysManager)
                    .senderId(SENDER_ID)
                    .recipientId(RECIPIENT_ID)
                    .build();

    String serializedJsonMessage = recipient.unseal(signedMessage);

    // Use serializedJsonMessage to extract the details
  } catch (Exception e) {
    // Handle the error
  }
}

मैसेज का ज़रूरी फ़ॉर्मैट

मैसेज का फ़ॉर्मैट JSON है, जिसे नीचे दी गई प्रॉपर्टी की मदद से स्ट्रिंग में क्रम से लगाया जाता है:

पहचानकर्ता कंपनी का ब्यौरा
classId

पूरी तरह क्वालिफ़ाइड क्लास आईडी. इस फ़ॉर्मैट का इस्तेमाल करता है:

<issuer_id.class_id>
objectId

पूरी तरह क्वालिफ़ाइड ऑब्जेक्ट आईडी. इस फ़ॉर्मैट का इस्तेमाल करता है:

<issuer_id.object_id>
expTimeMillis EPOCH के बाद से, समयसीमा खत्म होने का समय, मिलीसेकंड में. समयसीमा खत्म होने के बाद, मैसेज को अमान्य माना जाना चाहिए.
eventType DELETE और SAVE के लिए, del या save हो सकता है.
nonce डुप्लीकेट डिलीवरी को ट्रैक करने की ज़रूरत नहीं है.

Google सर्वर से मिलने वाले अनुरोध को मैनेज करना

आपके कॉलबैक एंडपॉइंट पर भेजे गए अनुरोध के हेडर में मौजूद मुख्य फ़ील्ड की सूची नीचे दी गई है:

  • उपयोगकर्ता-एजेंट: Googlebot
  • कॉन्टेंट किस तरह का है: application/json

अपना सर्वर कॉन्फ़िगर करें, ताकि यह अनुरोध को अस्वीकार न करे. ऐसा करने के लिए, robots.txt में इसे सेट किया जा सकता है:

User-agent: Googlebot
Disallow:

फिर से कोशिश की गई

कॉलबैक की कोशिश करें. Google, कुछ समय के लिए हुई गड़बड़ियों को ध्यान में रखते हुए दो बार कोशिश करता है. दो बार कोशिश करने के बाद, Google मैसेज को मिटा देता है और उसे फिर से भेजने की कोशिश नहीं करता.

डुप्लीकेट डिलीवरी

कुछ मामलों में, डुप्लीकेट डिलीवरी भी हो सकती हैं. हमारा सुझाव है कि आप उन्हें डुप्लीकेट करने के लिए, nonce का इस्तेमाल करें.