Dodawanie i usuwanie wywołań zwrotnych

Z tego przewodnika dowiesz się, jak używać wywołań zwrotnych w interfejsie Google Wallet API. Po utworzeniu lub usunięciu wartościowej Google może wykonać wywołanie zwrotne do wybranego przez Ciebie punktu końcowego HTTPS. To wywołanie zwrotne jest związane z klasą i zawiera dane o zdarzeniu, takie jak klasa, obiekt i typ zdarzenia. Dzięki temu możesz być na bieżąco z liczbą operacji dodawania i usuwania kont użytkowników. Wywołania zwrotne można na przykład skonfigurować tak, aby wysyłać zdarzenia do aplikacji analitycznej w celu śledzenia zaangażowania klientów podczas wydarzeń promocyjnych.

Wymagania wstępne

Zanim zaczniesz, sprawdź, czy spełnione są wymagania wstępne:

  • Utwórz punkt końcowy HTTPS, który obsługuje żądania POST. Ten punkt końcowy musi być publicznie dostępny.
  • Automatycznie aktualizuj punkt końcowy wywołania zwrotnego dla każdej klasy. Zapoznaj się z właściwością callbackOptions według klasy w interfejsie API REST.
  • Zalecane: sprawdź podpisy przy użyciu biblioteki Tink.

Wdrażanie wywołań zwrotnych

Za każdym razem, gdy użytkownik doda lub usunie obiekt, Google wysyła do sprzedawców wywołania zwrotne ze szczegółowymi informacjami o dodaniu lub usunięciu adresu URL klasy. Sprzedawcy muszą najpierw użyć kluczy publicznych, aby potwierdzić autentyczność wiadomości. Gdy wywołania zwrotne potwierdzają wiadomość, można ich używać do operacji przesyłania danych do klienta.

Sprawdzanie podpisu

Zalecamy używanie biblioteki Tink do weryfikowania podpisu wiadomości podczas implementacji punktu końcowego HTTPS. Biblioteka Tink udostępnia PaymentMethodTokenRecipient – narzędzie, które automatycznie weryfikuje podpis, a gdy weryfikacja się powiedzie, zwraca wiadomość.

Poniższy przykład pokazuje, jak użyć biblioteki Tink do implementacji PaymentMethodTokenRecipient:

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
  }
}

Expected message format

The message format is JSON that's serialized into a string with the following properties:

Identifier Description
classId

Fully qualified class ID. Uses the following format:

<issuer_id.class_id>
objectId

Pełny i jednoznaczny identyfikator obiektu. Używa tego formatu:

<issuer_id.object_id>
expTimeMillis Czas ważności w milisekundach od początku epoki. Po upływie okresu ważności wiadomość musi zostać uznana za nieprawidłową. eventType Może mieć wartość del lub save w przypadku DELETE i SAVE. nonceIdentyfikator jednorazowy pozwalający śledzić zduplikowane dostawy.

Obsługa żądania z serwera Google

Poniżej znajduje się lista najważniejszych pól w nagłówku żądania, które jest wysyłane do punktu końcowego wywołania zwrotnego:

  • Klient użytkownika: Googlebot
  • Rodzaj treści: application/json

Skonfiguruj serwer tak, aby nie odrzucał żądań. Aby to zrobić, możesz ustawić w robots.txt te ustawienia:

User-agent: Googlebot
Disallow:

Liczba ponownych prób

Wywołania zwrotne są wykonywane zgodnie z zasadą możliwie najlepszej obsługi. Google dwukrotnie próbuje uwzględniać przejściowe awarie. Po dwukrotnych próbach Google usuwa wiadomość i nie próbuje wysłać jej ponownie.

Przesyłki zduplikowane

Czasami wiadomości mogą być dostarczane podwójnie. Do ich usuwania zalecamy użycie nonce.