Взаимодействие с пользователями через 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://walletobjects.googleapis.com/walletobjects/v1/offerObject/resourceId
PUT https://walletobjects.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. Если выбрано соответствующее локализованное поле, поля без перевода использоваться не будут.

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

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

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

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

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

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

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

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

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

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

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