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ść
callbackOptionskaż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.