Добавляйте и удаляйте обратные вызовы

В этом руководстве объясняется, как использовать обратные вызовы с API Google Кошелька. Когда ценность создается или удаляется, Google может выполнить обратный вызов к конечной точке HTTPS по вашему выбору. Этот обратный вызов зависит от класса и включает данные о событии, такие как класс, объект и тип события. Это можно использовать для синхронизации с количеством происходящих добавлений и удалений пользователей. Например, обратные вызовы можно настроить для отправки событий в аналитическое приложение для отслеживания взаимодействия с клиентами во время рекламных мероприятий.

Предварительные условия

Прежде чем начать, ознакомьтесь со следующими предварительными условиями:

  • Установите конечную точку HTTPS, которая обрабатывает запросы POST. Эта конечная точка должна быть общедоступной.
  • Программно обновите конечную точку обратного вызова для каждого класса. См. свойство callbackOptions по классам в REST API.
  • Рекомендуется: используйте библиотеку Tink для проверки подписей.

Реализация обратных вызовов

При каждом добавлении или удалении объекта, выполненном пользователем, Google отправляет продавцам обратный вызов с подробной информацией о добавлении или удалении по URL-адресу каждого класса. Продавцам необходимо сначала использовать открытые ключи для проверки подлинности сообщения. После того как обратные вызовы проверят сообщение, обратные вызовы можно использовать для последующих операций.

Проверьте подпись

Мы рекомендуем вам использовать библиотеку Tink для проверки подписи сообщения при реализации конечной точки HTTPS. Библиотека Tink предоставляет PaymentMethodTokenRecipient — утилиту, которая автоматически проверяет подпись и возвращает фактическое сообщение после успешной проверки.

В следующем примере показано, как использовать библиотеку Tink для реализации 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

Полный идентификатор объекта. Использует следующий формат:

<issuer_id.object_id>
expTimeMillis Срок действия в миллисекундах с момента EPOCH. По истечении срока действия сообщение необходимо считать недействительным.
eventType Может быть либо del , либо save для DELETE и SAVE .
nonce Nonce для отслеживания дублирующих поставок.

Обработка запроса с сервера Google

Ниже приведен список ключевых полей в заголовке запроса, который отправляется в конечную точку обратного вызова:

  • Пользовательский агент: Googlebot
  • Тип контента: application/json

Настройте свой сервер так, чтобы он не отклонял запрос. Для этого вы можете установить в robots.txt следующее:

User-agent: Googlebot
Disallow:

Повторные попытки

Обратные вызовы осуществляются по мере возможности. Google дважды пытается учесть временные сбои. После двойной попытки Google удаляет сообщение и больше не пытается его отправить.

Дублирующие поставки

В некоторых случаях могут быть дублированные поставки. Мы рекомендуем использовать nonce для их дедупликации.