В этом руководстве объясняется, как использовать обратные вызовы с API Google Wallet. При создании или удалении пароля 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 } }
Ожидаемый формат сообщения
Сообщение имеет формат JSON, сериализованный в строку со следующими свойствами:
| Идентификатор | Описание |
|---|---|
classId | Полный идентификатор класса. Используется следующий формат: <issuer_id.class_id> |
objectId | Полный идентификатор объекта. Используется следующий формат: <issuer_id.object_id> |
expTimeMillis | Время истечения срока действия в миллисекундах с момента начала эпохи (EPOCH). По истечении этого времени сообщение должно быть признано недействительным. |
eventType | Можно выбрать либо del , либо save для DELETE и SAVE . |
nonce | Для отслеживания любых повторных доставок используется одноразовый код (None). |
Обработайте запрос с сервера Google.
Ниже приведён список ключевых полей в заголовке запроса, отправляемого на вашу конечную точку обратного вызова:
- User-Agent:
Googlebot - Content-Type:
application/json
Настройте сервер таким образом, чтобы он не отклонял запросы. Для этого можно указать следующие параметры в robots.txt :
User-agent: Googlebot Disallow:
Повторные попытки
Обратные вызовы осуществляются по принципу «максимальных усилий». Google будет использовать стандартные стратегии повторных попыток, чтобы обеспечить отказоустойчивость в случаях, когда конечная точка обратного вызова не отвечает или имеет периодические сбои, и корректно отменит попытки.
Повторные доставки
В некоторых случаях возможны дублирующиеся доставки. Мы рекомендуем использовать nonce для их удаления.