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. Ten wywołanie zwrotne jest specyficzne dla karty i zawiera dane o zdarzeniu, takie jak externalPassId 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 aktualizuj adres URL punktu końcowego wywołania zwrotnego wydawcy. Właściwość callbackOptions wydawcy znajdziesz w interfejsie API REST.
  • Zalecane: zweryfikuj podpisy za pomocą biblioteki Tink.

Wdrażanie wywołań zwrotnych

Za każdym razem, gdy użytkownik dodaje lub usuwa kartę, Google wysyła do sprzedawców wywołania zwrotne z informacjami o dodaniu lub usunięciu adresu URL wywołania zwrotnego wydawcy. 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
externalPassId

Pełny i jednoznaczny zewnętrzny identyfikator karty. Używa tego formatu:

<issuer_id.external_pass_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.