Google Wallet API позволяет пользователям добавлять объекты в Google Кошелек из интернета. Пользователи могут добавлять карты прямо с вашего сайта.
В этом справочнике приведена информация об элементе HTML g:savetoandroidpay, который позволяет добавить кнопку API Google Кошелька, а также о веб-токене JSON, который описывает ваш веб-сервис для Google.
Google Wallet API JavaScript
Чтобы автоматически анализировать HTML-теги g:savetoandroidpay при загрузке, добавьте стандартный код JavaScript.
<script src="https://apis.google.com/js/platform.js" type="text/javascript"></script>
Для приложений AJAX и явной отрисовки кнопок Google Wallet API включите параметр "parsetags": "explicit".
<script src="https://apis.google.com/js/platform.js" type="text/javascript">
{"parsetags": "explicit"}
</script>HTML-тег g:savetoandroidpay
Тег пространства имен g:savetoandroidpay определяет местоположение и различные атрибуты кнопки "Добавить в Google Кошелек". Используйте этот тег, если вы выполняете рендеринг HTML и JWT на стороне сервера.
<g:savetoandroidpay jwt="JWT" onsuccess="successHandler" onfailure="failureHandler" />
| Поле | Тип | Обязательно | Описание |
|---|---|---|---|
height |
Строка | НЕТ | Высота кнопки. Возможные значения: small (высота 30 пикселей) и standard (высота 38 пикселей). Значение по умолчанию для height – small.
Примеры кнопок с разными настройками height можно найти в разделе Кнопки Google Wallet API. |
jwt |
Строка | Да | Google Wallet API JWT. |
onsuccess |
Строка | НЕТ | Строковое название функции обработчика обратного вызова при успешном сохранении. |
onfailure |
Строка | НЕТ | Строковое название функции обработчика обратного вызова при ошибке сохранения. В эту функцию передается объект ошибки, содержащий errorCode и errorMessage. |
onprovidejwt |
Строка | НЕТ | Строковое название функции обработчика JWT. Эта функция позволяет перехватывать и, возможно, изменять данные JWT до того, как объект будет добавлен в Google Кошелек.
Эта функция не принимает параметров и должна возвращать JWT в виде строки.
При реализации обработчика событий исходные данные JWT можно получить в поле this.getOpenParams().renderData.userParams.jwt. |
size |
Строка | НЕТ | Ширина кнопки. Вы можете задать для size значение matchparent, чтобы ширина соответствовала ширине родительского элемента. Если вы не укажете значение size, ширина будет соответствовать значению text.
Примеры кнопок с разными настройками size можно найти в разделе Кнопки Google Wallet API. |
text |
Строка | НЕТ | Поддержка прекращена |
textsize |
Строка | НЕТ | Если указано значение textsize=large, размер текста и кнопок будет значительно увеличен. Это необходимо в случаях, когда к интерфейсу предъявляются особые требования. |
theme |
Строка | НЕТ | Тема кнопки. Возможные значения: dark и light. Тема по умолчанию – dark. Примеры кнопок с разными настройками theme можно найти в разделе Кнопки Google Wallet API. |
JWT для Google Wallet API
JWT Google Wallet API определяет объекты и классы, которые нужно сохранить.
JSON-представление
{ "iss": "example_service_account@developer.gserviceaccount.com", "aud": "google", "typ": "savetowallet", "iat": 1368029586, "payload": { "eventTicketClasses": [{ ... //Event ticket Class JSON }], "eventTicketObjects": [{ // Event ticket Object JSON }], "flightClasses": [{ // Flight Class JSON }], "flightObjects": [{ // Flight Object JSON }], "giftCardClasses": [{ // Gift card Class JSON }], "giftCardObjects": [{ // Gift card Object JSON }], "loyaltyClasses": [{ // Loyalty Class JSON }], "loyaltyObjects": [{ // Loyalty Object JSON }], "offerClasses": [{ // Offer Class JSON }], "offerObjects": [{ // Offer Object JSON }], "transitClasses": [{ // Transit Class JSON }], "transitObjects": [{ // Transit Object JSON }] }, "origins": ["http://baconrista.com", "https://baconrista.com"] }
Поля
| Поле | Тип | Обязательно | Описание |
|---|---|---|---|
iss |
Строка | Да | Адрес электронной почты, сгенерированный для сервисного аккаунта Google Cloud. |
aud |
Строка | Да | Аудитория. Целевая аудитория объектов Google Wallet API всегда будет google. |
typ |
Строка | Да | Тип токена JWT. Аудитория объектов Google Wallet API всегда будет savetowallet. |
iat |
Целое число | Да | Время выпуска в секундах с начала эпохи. |
payload |
Объект | Да | Объект полезной нагрузки. |
payload.eventTicketClasses |
Массив | НЕТ | Класс билетов на мероприятия, который нужно сохранить. |
payload.eventTicketObjects |
Массив | НЕТ | Объект билета на мероприятие, который нужно сохранить. |
payload.flightClasses |
Массив | НЕТ | Класс перелета, который нужно сохранить. |
payload.flightObjects |
Массив | НЕТ | Объект рейса, который нужно сохранить. |
payload.giftCardClasses |
Массив | НЕТ | Класс подарочных карт, который нужно сохранить. |
payload.giftCardObjects |
Массив | НЕТ | Объект подарочной карты, который нужно сохранить. |
payload.loyaltyClasses |
Массив | НЕТ | Класс программы лояльности, который нужно сохранить. |
payload.loyaltyObjects |
Массив | НЕТ | Объект программы лояльности, который нужно сохранить. |
payload.offerObjects |
Массив | НЕТ | Объект предложения, который нужно сохранить. |
payload.offerClasses |
Массив | НЕТ | Предложите сохранить класс. |
payload.transitObjects |
Массив | НЕТ | Объект, который нужно сохранить. |
payload.transitClasses |
Массив | НЕТ | Выберите класс транзита, который нужно сохранить. |
origins |
Массив | Да | Массив доменов, для которых разрешено сохранение JWT. Если поле origins не заполнено, кнопка Google Wallet API не будет отображаться. Если поле origins не заполнено, в консоли браузера могут появиться сообщения "Load denied by X-Frame-Options" (Загрузка запрещена X-Frame-Options) или "Refused to display" (Отказано в показе). |
Закодированный токен JWT должен выглядеть примерно так:
eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJnb29nbGUiLCJvcmlnaW5zIjpbImh0dHA6Ly9sb2NhbGhvc3Q6ODA4MCIsImh0dHA6Ly93d3cuZ29vZ2xlLmNvbSJdLCJpc3MiOiJzMmFwLXRvb2wuZ29vZ2xlLmNvbUBhcHBzcG90LmdzZXJ2aWNlYWNjb3VudC5jb20iLCJpYXQiOjE1NTE5ODcxNTEsInR5cCI6InNhdmV0b3dhbGxldCIsInBheWxvYWQiOnsib2ZmZXJPYmplY3RzIjpbeyJpZCI6IjMyMDI0MTMyNDE4NDM2OTk0MDEuMDFfT2ZmZXJPYmplY3RJZCJ9XX19.maHX40WWT29TC_kEb90EKQBH9AiTYAZR3153K8UI7fznVnfjVdlwsH_GKTECV3PGXdNnKCcmatUbKsONC0bxrnAHYG02kuvA1D3hSctz_amU66ntsvGIDe13mpxTzhI8fPvt9KMP1iaO7uOJuLQIHwipu4uRFAjyFaHGVaSFaP9c53qQyb_Zgyyk50M-MhH2n4kDpstNCqUJKWaadQkOWjrtMjwGzQ_ME04lbR4wb_mfK1A7Rc1UieWkxM9aMl5TOPubBKxKRRk_CqillN8XoTl9MI5RRGPuElVO28zGpYlFS6BarzDaaUfmbRZGvfF8ZiKrHZKxVrJjfZIJ2TCcDw
Функция "gapi.savetoandroidpay.render"
Эта функция позволяет явно отрисовать кнопку Google Wallet API.
gapi.savetoandroidpay.render("dom-container",{
"jwt": "JWT",
"onsuccess": "successHandler",
"onfailure": "failureHandler"
});| Поле | Тип | Обязательно | Описание |
|---|---|---|---|
dom-container |
Строка | Да | Идентификатор контейнера, в который нужно добавить кнопку Google Wallet API. |
jwt |
Строка | Да | JWT, определяющий контент для сохранения. |
onsuccess |
Строка | НЕТ | Строковое название функции обработчика обратного вызова при успешном сохранении. |
onfailure |
Строка | НЕТ | Строковое название функции обработчика обратного вызова при ошибке сохранения. В эту функцию передается объект ошибки, содержащий errorCode и errorMessage. |
onprovidejwt |
Строка | НЕТ | Строковое название функции обработчика JWT. Эта функция позволяет перехватывать и, возможно, изменять данные JWT до того, как объект будет добавлен в Google Кошелек.
Эта функция не принимает параметры и должна возвращать JWT в виде строки.
При реализации обработчика событий исходные данные JWT можно получить в поле this.getOpenParams().renderData.userParams.jwt. |
Коды ошибок и сообщения Google Wallet API
В таблицах ниже перечислены коды ошибок и сообщения об ошибках по умолчанию, которые передаются в объекте ошибки функции обратного вызова при сбое, когда объект не удается сохранить с помощью кнопки JavaScript.
{
"errorCode": "errorCode",
"errorMessage": "errorMessage"
}errorCode |
errorMessage |
|---|---|
SERVICE_FAILURE |
На сервере Google Кошелька произошла ошибка. |
CLASS_NOT_FOUND |
Не удалось найти класс, на который ссылается объект. |
CLASS_MISMATCH |
Объект должен присутствовать, быть того же типа и ссылаться на вложенный класс. |
ORIGIN_MISMATCH |
Источник кнопки не соответствует источникам, указанным в списке. |
INVALID_NUM_TYPES |
Можно указать только один тип объекта. |
INVALID_SIGNATURE |
Не удалось проверить подпись. |
INVALID_DUPLICATE_IDS |
Дубликаты объектов или классов не допускаются. |
INVALID_JWT |
Недействительный JWT. |
INVALID_EXP_IAT |
Срок действия JWT истек или он был выпущен в будущем. |
INVALID_AUD |
Недопустимое значение в поле AUD. |
INVALID_TYP |
Недопустимое значение для поля TYP. |
INVALID_NUM_OBJECTS |
Для карт постоянного клиента, подарочных карт и специальных предложений можно указать только один объект и не более одного класса. |
MALFORMED_ORIGIN_URL |
Неверный формат URL источника. URL должен содержать протокол и домен. |
MISSING_ORIGIN |
Необходимо указать источник. |
MISSING_FIELDS |
В объекте или классе отсутствуют обязательные поля. |
Местные результаты
Язык кнопки JavaScript меняется в зависимости от следующих критериев:
- Если пользователь вошел в аккаунт Google, кнопка будет показана на языке, указанном в профиле аккаунта Google. Пользователь может прочитать статью Как изменить язык, чтобы узнать, как изменить язык в аккаунте Google.
- Если пользователь не вошел в аккаунт Google, кнопка использует значение
ACCEPT-LANGUAGEв заголовке HTTP.
Если вы заметили, что кнопка отображается не на том языке, который должен быть выбран согласно описанной выше логике, или если формулировка кажется неестественной, обратитесь в службу поддержки.