Взаимодействие в Google Pay

Как добавлять сообщения при обновлении важной информации

Во всех категориях есть раздел сообщений. Настройте его, чтобы высылать уведомления о важных изменениях, касающихся карт постоянного клиента, подарочных карт, специальных предложений, билетов на мероприятия, посадочных талонов и проездных. Чтобы посмотреть подробную информацию о разделе сообщений, перейдите по нужной ссылке:

Сообщения добавляются в объекты или классы с помощью методов insert, update или patch, заполняющих свойство массива messages[]. Кроме того, к уже существующим сообщениям можно добавлять новые (не более 10) с помощью метода addMessage. Дополнительную информацию можно найти в Справочных материалах.

Указанный ниже код получает текущую дату окончания специального предложения ( validTimeInterval.end), затем обновляет ее и добавляет в массив messages[]. Таким образом, пользователь заметит, что информация изменена, просматривая сохраненный Object в приложении Google Pay.

Java

// Get the specific Offer Object
OfferObject obj = client.offerobject().get("2945482443380251551.ExampleObject1").execute();

// Update the version, validTimeInterval.end, and add a message
obj.setVersion(obj.getVersion() + 1L);
obj.setValidTimeInterval(new TimeInterval().setEnd(new DateTime().setDate(new com.google.api.client.util.DateTime(new Date().getTime() + 263000000000L))));

// Get the current messages
List messages = obj.getMessages();

// Define new message
WalletObjectMessage message = new WalletObjectMessage()
  .setHeader("Important Notice")
  .setBody("Your offer has been extended!");

// Add the new message about updates to the Offer Object
messages.add(message);
obj.setMessages(messages);

// Update the Offer Object
OfferObject returnObj = client.offerobject().patch(obj.getId(), obj).execute();

PHP

// Get the specific Offer Object
Google_OfferObject $offerObj = $service->offerobject->get('2945482443380251551.ExampleObject1');

// Update the version, validTimeInterval.end, and add a message
$offerObj->setVersion($offerObj->getVersion() + 1);
$validTimeInterval = new Google_TimeInterval();
$startDateTime = new Google_DateTime();
$startDateTime->setDate('2013-06-12T23:20:50.52Z');
$validTimeInterval->setStart($startDateTime);
$endDateTime = new Google_DateTime();
$endDateTime->setDate('2013-12-12T23:20:50.52Z');
$validTimeInterval->setEnd($endDateTime);
$offerObj->setValidTimeInterval($validTimeInterval)

// Get the current messages
$messages = $offerObj->getMessages();

// Define new message
$newMessage = array(
  'header' => 'Important Notice',
  'body' => 'Your offer has been extended!',
  'kind' => 'walletobjects#walletObjectMessage'
);

// Add the new message about updates to the Offer Object
array_push($messages, $newMessage);
$offerObj->setMessages($messages);

// Update the Offer Object
Google_OfferObject offerObj = $service->offerobject->update('2945482443380251551.ExampleObject1',offerObj);

Python

# Get the specific Offer Object
offer_object = service.offerobject().get(resourceId='2945482443380251551.ExampleObject1')
# Update the version, validTimeInterval.end, and add a message
offer_object['version'] = str(int(offer_object['version']) + 1)
offer_object['validTimeInterval'] = {
     'start' : {'date':'2018-01-20T23:20:50.520Z'}
     ,'end' : {'date':'2018-01-24T23:20:50.520Z'}
    }

// Get the current messages
messages = offer_object['messages']

// Define new message
message = {
   'header': 'Important Notice',
   'body': 'Your offer has been extended!',
   'kind': 'walletobjects#walletObjectMessage'
 }

// Add the new message about updates to the Offer Object
messages.append(message)
offer_object['messages'] = messages

# Update the Offer Object
api_request = service.offerobject().update(resourceId='2945482443380251551.ExampleObject1',body=offer_object)
api_response = api_request.execute()

Как обновить состояние

У всех объектов в каждой категории есть свойство state. Изменив его значение, можно сообщить клиенту, что карта была активирована или истек срок ее действия.

Любое обновление нужно начинать с запроса GET, чтобы получить Object. Это необходимо для использования актуальной версии объекта. При изменении баланса нужно повышать версию объекта. Чтобы сохранить обновленный объект Object, выполните запрос PUT.

Ниже приведены примеры URI, используемые в архитектуре REST для получения объекта запросом GET и обновления offerObject запросом PUT.

GET https://www.googleapis.com/walletobjects/v1/offerObject/resourceId
PUT https://www.googleapis.com/walletobjects/v1/offerObject/resourceId

Более подробную информацию о различных методах GET и обновления можно найти в Справочных материалах.

Ниже приведены примеры кода для обновления offerObject в различных языках программирования. Аналогичные коды используются во всех категориях.

Java

// Get the specific Offer Object
OfferObject obj = client.offerobject().get("2945482443380251551.ExampleObject1").execute();
// Update the version and state
obj.setVersion(obj.getVersion() + 1L);
obj.setState("expired"); //see the Reference API for valid "state" options
// Update the Offer Object
OfferObject returnObj = client.offerobject().update(obj.getId(), obj).execute();

PHP

// Get the specific Offer Object
Google_OfferObject offerObj = $service->offerobject->get('2945482443380251551.ExampleObject1');
// Update the version and points
offerObj.setVersion(offerObj.getVersion() + 1);
offerObj.setState("state"); // see the Reference API for valid "state" options
// Update the Offer Object
Google_OfferObject offerObj = $service->offerobject->update('2945482443380251551.ExampleObject1',offerObj);

Python

# Get the specific Offer Object
offer_object = service.offerobject().get(resourceId='2945482443380251551.ExampleObject1')
# Update the version and state
offer_object['version'] = str(int(offer_object['version']) + 1)
offer_object['state'] = 'expired' # see the Reference API for valid "state" options
# Update the Offer Object
api_request = service.offerobject().update(resourceId='2945482443380251551.ExampleObject1',body=offer_object)
api_response = api_request.execute()

Локализация

Используя инструмент Google Pay API for Passes, продавцы могут предоставлять локализованный контент пользователям в зависимости от их местоположения. Для этого в API включены дополнительные поля. Каждое локализованное поле – это вложенный объект LocalizedString, который выглядит следующим образом:

{
  "kind": "walletobjects#localizedString",
  "translatedValues": [
    {
      "kind": "walletobjects#translatedString",
      "language": string,
      "value": string
    }
  ],
  "defaultValue": [
    {
      "kind": "walletobjects#translatedString",
      "language": string,
      "value": string
    }
  ]
}

Поле defaultValue обязательно для всех строк LocalizedStrings. Во всех переведенных строках необходимо указать язык и значение.

Поле language должно указывать на языковой тег BCP 47 (например, en-US, en-GB, es-419). Value – это переведенное значение строки, которое увидят пользователи, если их местонахождение подходит под указанный языковой тег.

Локализованные строки показываются в зависимости от региона пользователя. Если подходящее значение translatedValue не выбрано, будет использоваться DefaultValue. Если выбрано соответствующее локализованное поле, поля без перевода не будут использоваться.

Как определить, что пользователь удалил карту

Чтобы определить, удалил ли пользователь свою карту (например, карту постоянного клиента) из приложения Google Pay, выполните следующие действия.

Получите Object пользователя, используя вызов GET, и проверьте атрибут hasUsers.

Например, чтобы проверить loyaltyObject, выполните следующий вызов GET:

GET https://www.googleapis.com/walletobjects/v1/loyaltyObject/objectId

Даже если все пользователи удалили карту или карта лояльности была удалена продавцом, Google сохраняет объект. Атрибут hasUsers объекта будет иметь значение false.

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

Создавая объекты, вы определяете их идентификаторы, используя которые можно получить LoyaltyObject. Чтобы предоставлять пользователям персональную информацию о текущем уровне и балансе баллов, держите идентификаторы в собственном хранилище.

Более подробную информацию о методах GET можно найти в Справочных материалах. Google не высылает уведомления в реальном времени при удалении объектов. Для предоставления такой услуги потребовалось бы настроить службу просмотра уведомлений и обязать продавцов выполнять условия определенного соглашения об обслуживании.

Способы взаимодействия с пользователями, применимые для категорий

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