Веб-кнопка JavaScript

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 меняется в зависимости от следующих критериев:

  1. Если пользователь вошел в аккаунт Google, кнопка будет показана на языке, указанном в профиле аккаунта Google. Пользователь может прочитать статью Как изменить язык, чтобы узнать, как изменить язык в аккаунте Google.
  2. Если пользователь не вошел в аккаунт Google, кнопка использует значение ACCEPT-LANGUAGE в заголовке HTTP.

Если вы заметили, что кнопка отображается не на том языке, который должен быть выбран согласно описанной выше логике, или если формулировка кажется неестественной, обратитесь в службу поддержки.