Dodawanie i usuwanie wywołań zwrotnych

Ten przewodnik wyjaśnia, jak używać wywołań zwrotnych w Google Wallet API. Gdy karta zostanie utworzona lub usunięta, Google może wykonać wywołanie zwrotne do wybranego przez Ciebie punktu końcowego HTTPS. Ta funkcja zwrotna jest specyficzna dla klasy i zawiera dane o zdarzeniu, takie jak klasa, obiekt i typ zdarzenia. Można go używać do śledzenia liczby dodanych i usuniętych użytkowników. Można na przykład skonfigurować wywołania zwrotne, aby wysyłać zdarzenia do aplikacji analitycznej w celu śledzenia zaangażowania klientów podczas wydarzeń promocyjnych.

Wymagania wstępne

Zanim zaczniesz, zapoznaj się z tymi wymaganiami wstępnymi:

  • Utworzony został punkt końcowy HTTPS, który obsługuje żądania POST. Musi on być publicznie dostępny.
  • Automatycznie zaktualizowano punkt końcowy wywołania zwrotnego każdej klasy. Właściwość callbackOptions każdej klasy znajdziesz w opisie interfejsu API REST.
  • Zalecane: zweryfikuj podpisy za pomocą biblioteki Tink.

Wdrażanie wywołań zwrotnych

Za każdym razem, gdy użytkownik dodaje lub usuwa obiekt, Google wysyła do sprzedawców wywołania zwrotne z informacjami o dodaniu lub usunięciu adresu URL klasy. Sprzedawca musi najpierw zweryfikować autentyczność wiadomości za pomocą kluczy publicznych. Gdy wywołania zwrotne zweryfikują wiadomość, można ich używać do operacji przesyłania danych do klienta.

Weryfikacja podpisu

Podczas wdrażania punktu końcowego HTTPS zalecamy, aby zweryfikować podpis wiadomości za pomocą biblioteki Tink. 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żywać biblioteki Tink do implementowania 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
  }
}

Oczekiwany format wiadomości

Wiadomość jest w formacie JSON zserializowanym do ciągu tekstowego i zawiera poniższe właściwości:

Identyfikator Opis
classId

W pełni kwalifikowany identyfikator klasy. Używa tego formatu:

<issuer_id.class_id>
objectId

W pełni kwalifikowany identyfikator obiektu. Używa tego formatu:

<issuer_id.object_id>
expTimeMillis Termin ważności w milisekundach od początku epoki. Po upływie tego terminu wiadomość powinna być traktowana jak nieprawidłowa.
eventType Może to być del lub save w przypadku DELETE i SAVE.
nonce Identyfikator jednorazowy monitorujący wiadomości dostarczone wiele razy.

Obsługa żądania z serwera Google

Poniższa lista zawiera najważniejsze pola nagłówka żądania, które jest wysyłane do punktu końcowego wywołania zwrotnego:

  • User-Agent: Googlebot
  • Content-Type: application/json

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

User-agent: Googlebot
Disallow:

Liczba ponownych prób

Wywołania zwrotne są wykonywane zgodnie z zasadą najlepszych starań. Google będzie stosować typowe strategie ponawiania prób, aby zapewnić odporność w przypadku, gdy punkt końcowy wywołania zwrotnego nie odpowiada lub ma okresowe przerwy w działaniu, i będzie stopniowo wycofywać się z prób.

Wiadomości dostarczane wiele razy

Część wiadomości może być dostarczana więcej niż raz. Aby usunąć duplikaty, zalecamy użycie nonce.