Snippets de código

Esta página contém snippets de código das seguintes classes e objetos:

JSON EventTicketClass

Depois que você tiver definido a EventTicketClass, insira-a fazendo uma solicitação POST ao seguinte URI REST:

https://www.googleapis.com/walletobjects/v1/eventTicketClass

Adicione o parâmetro strict=true ao URI REST para ativar a análise de erro rígida e capturar erros extras, como campos de códigos duplicados:

https://www.googleapis.com/walletobjects/v1/eventTicketClass?strict=true

O exemplo a seguir mostra um recurso JSON que representa uma EventTicketClass. O JSON precisa ser enviado no corpo da solicitação POST. Mais especificamente, os exemplos de código a seguir demonstram como definir e inserir a EventTicketClass.

Recurso

{
    "kind": "walletobjects#eventTicketClass",
     "id": string,
    "reviewStatus": string,
    "issuerName": string,
     "eventName": {
        "kind": "walletobjects#localizedString",
          "translatedValues": [   {
            "kind": "walletobjects#translatedString",
                "language": string,
                "value": string
        }  ],
          "defaultValue": {
            "kind": "walletobjects#translatedString",
               "language": string,
               "value": string
        }
    },
    "venue": {
        "kind": "walletobjects#eventVenue",
          "name": {
            "kind": "walletobjects#localizedString",
               "translatedValues": [    {
                "kind": "walletobjects#translatedString",
                     "language": string,
                     "value": string
            }   ],
               "defaultValue": {
                "kind": "walletobjects#translatedString",
                    "language": string,
                    "value": string
            }
        },
          "address": {
            "kind": "walletobjects#localizedString",
               "translatedValues": [    {
                "kind": "walletobjects#translatedString",
                     "language": string,
                     "value": string
            }   ],
               "defaultValue": {
                "kind": "walletobjects#translatedString",
                    "language": string,
                    "value": string
            }
        }
    },
     "dateTime": {
        "kind": "walletobjects#eventDateTime",
          "doorsOpenLabel": string,
          "customDoorsOpenLabel": {
            "kind": "walletobjects#localizedString",
               "translatedValues": [    {
                "kind": "walletobjects#translatedString",
                     "language": string,
                     "value": string
            }   ],
               "defaultValue": {
                "kind": "walletobjects#translatedString",
                    "language": string,
                    "value": string
            }
        },
          "doorsOpen": string,
          "start": string,
          "end": string
    },
}

Java

// Define the Image Module Data
List<ImageModuleData> imageModuleData = new ArrayList<ImageModuleData>();

ImageModuleData image = new ImageModuleData().setMainImage(
    new Image().setSourceUri(
        new Uri().setUri("http://farm4.staticflickr.com/3738/12440799783_3dc3c20606_b.jpg")));

imageModuleData.add(image);

// Define Links Module Data
List<Uri> uris = new ArrayList<Uri>();
Uri uri1 = new Uri().setDescription("Nearby Locations").setUri("http://maps.google.com/?q=google");
Uri uri2 = new Uri().setDescription("Call Customer Service").setUri("tel:6505555555");

uris.add(uri1);
uris.add(uri2);

LinksModuleData linksModuleData = new LinksModuleData().setUris(uris);

// Define Text Areas
List<TextModuleData> textModulesData = new ArrayList<TextModuleData>();

TextModuleData details = new TextModuleData().setHeader("Custom EventTicket Details").setBody(
    "Baconrista events have pushed the limits since its founding.");

textModulesData.add(details);

// Define Geofence locations
List<LatLongPoint> locations = new ArrayList<LatLongPoint>();
locations.add(new LatLongPoint().setLatitude(37.422601).setLongitude(
    -122.085286));
locations.add(new LatLongPoint().setLatitude(37.424354).setLongitude(
    -122.09508869999999));
locations.add(new LatLongPoint().setLatitude(40.7406578).setLongitude(
    -74.00208940000002));

// Define event name
LocalizedStringDefaultValue eventnameDefault = new LocalizedStringDefaultValue().setlanguage("en-us").setValue("Baconrista Event-o-rama");
LocalizedString eventName = new LocalizedString().setDefaultValue(eventnameDefault);

// Define Event logo
ImageModuleData logoImage = new ImageModuleData().setMainImage(
    new Image().setSourceUri(
        new Uri().setUri("https://www.google.com/images/branding/googlelogo/2x/googlelogo_color_272x92dp.png")));

// Define Event ticket venue details
LocalizedStringDefaultValue venueNameDefault = new LocalizedStringDefaultValue().setlanguage("en-us").setValue("Baconrista Stadium");
LocalizedString venueName = new LocalizedString().setDefaultValue(venueNameDefault);
LocalizedStringDefaultValue venueAddressDefault = new LocalizedStringDefaultValue().setlanguage("en-us").setValue("101 Baconrista Dr.");
LocalizedString venueAddress = new LocalizedString().setDefaultValue(venueAddressDefault);

Venue venue = new Venue().setName(venueName).setAddress(venueAddress);

// Define event start, end, and door opent datetimes.  DateTime should be String value in ISO 8601 extended format date/time, with or without an offset
VenueDateTime dateTime = new VenueDateTime()
    .setDoorsOpen("2020-04-12T10:20:50.52Z")
    .setStart("2020-04-12T11:20:50.52Z")
    .setEnd("2020-04-12T16:20:50.52Z");

EventTicketClass wobClass = new EventTicketClass()
    .setId('2945482443380251551.ExampleEventTicketClass1')
    .setIssuerName("Baconrista Stadium")
    .setReviewStatus("underReview")
    .setLocations(locations)
    .setLinksModuleData(linksModuleData)
    .setImageModulesData(imageModuleData)
    .setTextModulesData(textModulesData)
    .setEventName(eventName)
    .setLogo(logoImage)
    .setVenue(venue)
    .setDateTime(dateTime);

EventTicketClass response = client.EventTicketClass().insert(wobClass).execute();

PHP

// A list of locations at which the Wallet Class can be used.
$locations = array(
    array(
        'kind' => 'walletobjects#latLongPoint',
        'latitude' => 37.424015499999996,
        'longitude' => -122.09259560000001
    ),
    array(
        'kind' => 'walletobjects#latLongPoint',
        'latitude' => 37.424354,
        'longitude' => -122.09508869999999
    ),
    array(
        'kind' => 'walletobjects#latLongPoint',
        'latitude' => 37.7901435,
        'longitude' => -122.39026709999997
    ),
    array(
        'kind' => 'walletobjects#latLongPoint',
        'latitude' => 40.7406578,
        'longitude' => -74.00208940000002
    )
);
// Source uri of title image.
$uriTitleImageInstance = new Google_Service_Walletobjects_Uri();
$imageTitleImageInstance = new Google_Service_Walletobjects_Image();
$uriTitleImageInstance->setUri(
    'http://farm4.staticflickr.com/3723/11177041115_6e6a3b6f49_o.jpg'
);
$imageTitleImageInstance->setSourceUri($uriTitleImageInstance);
// Define text module data.
$textModulesData = array(
    array(
        'header' => 'Custom Details',
        'body' => 'Baconrista events have pushed the limits since its founding.'
    ),
);
// Define links module data.
$linksModuleData = new Google_Service_Walletobjects_LinksModuleData();
$uris = array (
    array(
        'uri' => 'http://maps.google.com/map?q=google',
        'kind' => 'walletobjecs#uri',
        'description' => 'Nearby Locations'
    ),
    array(
        'uri' => 'tel:6505555555',
        'kind' => 'walletobjecs#uri',
        'description' => 'Call Customer Service'
    )
);
$linksModuleData->setUris($uris);

$uriModuleImageInstance = new Google_Service_Walletobjects_Uri();
$uriModuleImageInstance->setUri(
    'http://farm8.staticflickr.com/7401/11177116434_d8e600bba6_o.jpg'
);
$uriModuleImageInstance->setDescription('Coffee beans');
$imageModuleImageInstance = new Google_Service_Walletobjects_Image();
$imageModuleImageInstance->setSourceUri($uriModuleImageInstance);
$imagesModuleData = new Google_Service_Walletobjects_ImageModuleData();
$imagesModuleData->setMainImage($imageModuleImageInstance);
$imagesModuleDataArr = array ($imagesModuleData);

// Define event name
$eventnameDefault = new LocalizedStringDefaultValue()->setlanguage("en-us")->setValue("Baconrista Event-o-rama");
$eventName = new LocalizedString()->setDefaultValue($eventnameDefault);

// Define Event logo
$uriLogoImageInstance = new Google_Service_Walletobjects_Uri();
$imageLogoImageInstance = new Google_Service_Walletobjects_Image();
$uriLogoImageInstance->setUri(
    'https://www.google.com/images/branding/googlelogo/2x/googlelogo_color_272x92dp.png'
);
$imageLogoImageInstance->setSourceUri($uriLogoImageInstance);
$logoImage = new Logo()->setMainImage($imageLogoImageInstance);

// Define Event ticket venue details
$venueNameDefault = new LocalizedStringDefaultValue()->setlanguage("en-us")->setValue("Baconrista Stadium");
$venueName = new LocalizedString()->setDefaultValue(venueNameDefault);
$venueAddressDefault = new LocalizedStringDefaultValue()->setlanguage("en-us")->setValue("101 Baconrista dr.");
$venueAddress = new LocalizedString()->setDefaultValue(venueAddressDefault);

$venue = new Venue().setName($venueName).setAddress($venueAddress);

// Define event start, end, and door opent datetimes.  DateTime should be String value in ISO 8601 extended format date/time, with or without an offset
$dateTime = new VenueDateTime();
$dateTime->setDoorsOpen("2020-04-12T10:20:50.52Z")
$dateTime->setStart("2020-04-12T11:20:50.52Z")
$dateTime->setEnd("2020-04-12T16:20:50.52Z");

// Create wallet class.
$wobClass = new Google_Service_Walletobjects_EventTicketClass();
$EventTicketClass->setId('2945482443380251551.EventTicketClass');
$wobClass->setIssuerName('Baconrista Stadium');
$wobClass->setReviewStatus('underReview');
$wobClass->setLocations($locations);
$wobClass->setEventName($eventName);
$wobClass->setLogo($logoImage);
$wobClass->setVenue($venue);
$wobClass->setDateTime($dateTime);

$service->EventTicketClass->insert($wobClass);

Python

api_object = generate_eventticket_class(
      '1234567', 'ExampleeventticketClass')
api_request = service.eventticketclass().insert(body=api_object)
api_response = api_request.execute()

def generate_eventticket_class(issuer_id, class_id):
  eventticket_class = {
      'kind': 'walletobjects#eventTicketClass',
      'id': '%s.%s' % (issuer_id, class_id),
      'issuerName': 'Baconrista Stadium',
      'eventName': {
            'defaultValue': {
             'language': 'en-US',
             'value': 'Bacon Coffee Fun Event'
            }
      },
      'locations': [{
          'kind': 'walletobjects#latLongPoint',
          'latitude': 37.424015499999996,
          'longitude': -122.09259560000001
      }, {
          'kind': 'walletobjects#latLongPoint',
          'latitude': 37.424354,
          'longitude': -122.09508869999999
      }, {
          'kind': 'walletobjects#latLongPoint',
          'latitude': 37.7901435,
          'longitude': -122.39026709999997
      }, {
          'kind': 'walletobjects#latLongPoint',
          'latitude': 40.7406578,
          'longitude': -74.00208940000002
      }],
      'reviewStatus': 'underReview',
      'review': {
          'comments': 'Real auto approval by system'
      },
      'textModulesData': [{
          'header': 'Custom Details',
          'body': 'Baconrista events have pushed the limits since its founding.'
      }],
      'linksModuleData': {
          'uris': [{
              'kind': 'walletobjects#uri',
              'uri': 'http://maps.google.com/map?q=google',
              'description': 'Nearby Locations'
          }, {
              'kind': 'walletobjects#uri',
              'uri': 'tel:6505555555',
              'description': 'Call Customer Service'
          }]
      },
      'imageModulesData': [{
          'mainImage': {
              'kind': 'walletobjects#image',
              'sourceUri': {
                  'kind': 'walletobjects#uri',
                  'uri': 'http://farm4.staticflickr.com/3738/12440799783_3dc3c20606_b.jpg',
                  'description': 'Coffee beans'
              }
          }
      }],
      "logo": {
          "kind": "walletobjects#image",
            "sourceUri": {
              "kind": "walletobjects#uri",
                 "uri": 'https://www.google.com/images/branding/googlelogo/2x/googlelogo_color_272x92dp.png',
                 "description": 'Baconrista stadium logo'
          }
      },
      "venue": {
          "kind": "walletobjects#eventVenue",
            "name": {
              "kind": "walletobjects#localizedString",
                    "defaultValue": {
                  "kind": "walletobjects#translatedString",
                      "language": 'en-us',
                      "value": 'Baconrista Stadium'
              }
          },
            "address": {
              "kind": "walletobjects#localizedString",
                    "defaultValue": {
                  "kind": "walletobjects#translatedString",
                      "language": 'en-us',
                      "value": '101 Baconrista Dr.'
              }
          }
      },
       "dateTime": {
          "kind": "walletobjects#eventDateTime",
            "doorsOpen": '2020-04-12T10:20:50.52Z',
            "start": '2020-04-12T11:20:50.52Z',
            "end": '2020-04-12T16:20:50.52Z'
      }
  }
  return eventticket_class

JSON EventTicketObject

Estes exemplos definem o EventTicketObject:

Recurso

{
  "kind": "walletobjects#eventTicketObject",
  "id": string,
  "classId": string,
  "state": string,
  "barcode": {
    "kind": "walletobjects#barcode",
    "type": string,
    "value": string,
    "alternateText": string
  },
  "messages": [
    {
      "kind": "walletobjects#walletObjectMessage",
      "header": string,
      "localizedHeader": {
        "kind": "walletobjects#localizedString",
        "translatedValues": [
          {
            "kind": "walletobjects#translatedString",
            "language": string,
            "value": string
          }
        ],
        "defaultValue": {
          "kind": "walletobjects#translatedString",
          "language": string,
          "value": string
        }
      },
      "body": string,
      "localizedBody": {
        "kind": "walletobjects#localizedString",
        "translatedValues": [
          {
            "kind": "walletobjects#translatedString",
            "language": string,
            "value": string
          }
        ],
        "defaultValue": {
          "kind": "walletobjects#translatedString",
          "language": string,
          "value": string
        }
      },
      "displayInterval": {
        "kind": "walletobjects#timeInterval",
        "start": {
          "date": datetime
        },
        "end": {
          "date": datetime
        }
      },
      "id": string,
      "messageType": string
    }
  ],
  "validTimeInterval": {
    "kind": "walletobjects#timeInterval",
    "start": {
      "date": datetime
    },
    "end": {
      "date": datetime
    }
  },
  "locations": [
    {
      "kind": "walletobjects#latLongPoint",
      "latitude": double,
      "longitude": double
    }
  ],
  "hasUsers": boolean,
  "smartTapRedemptionValue": string,
  "hasLinkedDevice": boolean,
  "disableExpirationNotification": boolean,
  "infoModuleData": {
    "labelValueRows": [
      {
        "columns": [
          {
            "label": string,
            "localizedLabel": {
              "kind": "walletobjects#localizedString",
              "translatedValues": [
                {
                  "kind": "walletobjects#translatedString",
                  "language": string,
                  "value": string
                }
              ],
              "defaultValue": {
                "kind": "walletobjects#translatedString",
                "language": string,
                "value": string
              }
            },
            "value": string,
            "localizedValue": {
              "kind": "walletobjects#localizedString",
              "translatedValues": [
                {
                  "kind": "walletobjects#translatedString",
                  "language": string,
                  "value": string
                }
              ],
              "defaultValue": {
                "kind": "walletobjects#translatedString",
                "language": string,
                "value": string
              }
            }
          }
        ]
      }
    ],
    "showLastUpdateTime": boolean
  },
  "imageModulesData": [
    {
      "mainImage": {
        "kind": "walletobjects#image",
        "sourceUri": {
          "kind": "walletobjects#uri",
          "uri": string,
          "description": string,
          "localizedDescription": {
            "kind": "walletobjects#localizedString",
            "translatedValues": [
              {
                "kind": "walletobjects#translatedString",
                "language": string,
                "value": string
              }
            ],
            "defaultValue": {
              "kind": "walletobjects#translatedString",
              "language": string,
              "value": string
            }
          }
        }
      }
    }
  ],
  "textModulesData": [
    {
      "header": string,
      "body": string,
      "localizedHeader": {
        "kind": "walletobjects#localizedString",
        "translatedValues": [
          {
            "kind": "walletobjects#translatedString",
            "language": string,
            "value": string
          }
        ],
        "defaultValue": {
          "kind": "walletobjects#translatedString",
          "language": string,
          "value": string
        }
      },
      "localizedBody": {
        "kind": "walletobjects#localizedString",
        "translatedValues": [
          {
            "kind": "walletobjects#translatedString",
            "language": string,
            "value": string
          }
        ],
        "defaultValue": {
          "kind": "walletobjects#translatedString",
          "language": string,
          "value": string
        }
      }
    }
  ],
  "linksModuleData": {
    "uris": [
      {
        "kind": "walletobjects#uri",
        "uri": string,
        "description": string,
        "localizedDescription": {
          "kind": "walletobjects#localizedString",
          "translatedValues": [
            {
              "kind": "walletobjects#translatedString",
              "language": string,
              "value": string
            }
          ],
          "defaultValue": {
            "kind": "walletobjects#translatedString",
            "language": string,
            "value": string
          }
        }
      }
    ]
  },
  "classReference": eventticketclass Resource,
  "seatInfo": {
    "kind": "walletobjects#eventSeat",
    "seat": {
      "kind": "walletobjects#localizedString",
      "translatedValues": [
        {
          "kind": "walletobjects#translatedString",
          "language": string,
          "value": string
        }
      ],
      "defaultValue": {
        "kind": "walletobjects#translatedString",
        "language": string,
        "value": string
      }
    },
    "row": {
      "kind": "walletobjects#localizedString",
      "translatedValues": [
        {
          "kind": "walletobjects#translatedString",
          "language": string,
          "value": string
        }
      ],
      "defaultValue": {
        "kind": "walletobjects#translatedString",
        "language": string,
        "value": string
      }
    },
    "section": {
      "kind": "walletobjects#localizedString",
      "translatedValues": [
        {
          "kind": "walletobjects#translatedString",
          "language": string,
          "value": string
        }
      ],
      "defaultValue": {
        "kind": "walletobjects#translatedString",
        "language": string,
        "value": string
      }
    },
    "gate": {
      "kind": "walletobjects#localizedString",
      "translatedValues": [
        {
          "kind": "walletobjects#translatedString",
          "language": string,
          "value": string
        }
      ],
      "defaultValue": {
        "kind": "walletobjects#translatedString",
        "language": string,
        "value": string
      }
    }
  },
  "reservationInfo": {
    "kind": "walletobjects#eventReservationInfo",
    "confirmationCode": string
  },
  "ticketHolderName": string,
  "ticketNumber": string,
  "ticketType": {
    "kind": "walletobjects#localizedString",
    "translatedValues": [
      {
        "kind": "walletobjects#translatedString",
        "language": string,
        "value": string
      }
    ],
    "defaultValue": {
      "kind": "walletobjects#translatedString",
      "language": string,
      "value": string
    }
  },
  "faceValue": {
    "kind": "walletobjects#money",
    "micros": long,
    "currencyCode": string
  }
}

Java

// Define Barcode
Barcode barcode = new Barcode().setType("upcA").setValue("123456789012")
    .setAlternateText("12345");

// Define Seat Info
LocalizedStringDefaultValue gateDefault = new LocalizedStringDefaultValue().setlanguage("en-us").setValue("A");
LocalizedString gate = new LocalizedString().setDefaultValue(gateDefault);

LocalizedStringDefaultValue sectionDefault = new LocalizedStringDefaultValue().setlanguage("en-us").setValue("5");
LocalizedString section = new LocalizedString().setDefaultValue(sectionDefault);

LocalizedStringDefaultValue rowDefault = new LocalizedStringDefaultValue().setlanguage("en-us").setValue("G3");
LocalizedString row = new LocalizedString().setDefaultValue(rowDefault);

LocalizedStringDefaultValue seatDefault = new LocalizedStringDefaultValue().setlanguage("en-us").setValue("42");
LocalizedString seat = new LocalizedString().setDefaultValue(seatDefault);

SeatInfo seatInfo = new SeatInfo()
  .setGate(gate)
  .setSection(section)
  .setRow(row)
  .setSeat(seat);

// Define Wallet Object
eventTicketObject object = new eventTicketObject()
  .setClassId('2945482443380251551.ExampleeventTicketClass1')
    .setId('2945482443380251551.ExampleeventTicketObject1')
    .setBarcode(barcode)
    .setState("active")
    .setSeatInfo(seatInfo)
    .setTicketHolderName("Sir Bacon IV")
    .setTicketNumber("123abc");

PHP

$barcode = new Google_Service_Walletobjects_Barcode();
$barcode->setType('upcA');
$barcode->setValue('123456789012');
$barcode->setAlternateText('12345');

// Define Seat Info
$gateDefault = new LocalizedStringDefaultValue()
$gateDefault->setlanguage("en-us")
$gateDefault->setValue("A");
$gate = new LocalizedString();
$gate->setDefaultValue($gateDefault);

$sectionDefault = new LocalizedStringDefaultValue()
$sectionDefault->setlanguage("en-us")
$sectionDefault->setValue("5");
$section = new LocalizedString();
$section->setDefaultValue($sectionDefault);

$rowDefault = new LocalizedStringDefaultValue()
$rowDefault->setlanguage("en-us")
$rowDefault->setValue("G3");
$row = new LocalizedString();
$row->setDefaultValue($rowDefault);

$seatDefault = new LocalizedStringDefaultValue()
$seatDefault->setlanguage("en-us")
$seatDefault->setValue("42");
$seat = new LocalizedString();
$seat->setDefaultValue($seatDefault);

$seatInfo = new SeatInfo();
$seatInfo->setGate(gate);
$seatInfo->setSection(section);
$seatInfo->setRow(row);
$seatInfo->setSeat(seat);

// Create wallet object.
$eventTicketObject = new Google_Service_Walletobjects_eventTicketObject();
$eventTicketObject->setClassId('2945482443380251551.eventTicketClass');
$eventTicketObject->setId('2945482443380251551.eventTicketObject');
$eventTicketObject->setState('active');
$eventTicketObject->setBarcode($barcode);
$eventTicketObject->setSeatInfo($seatInfo);
$eventTicketObject->setTicketHolderName("Sir Bacon IV");
$eventTicketObject->setTicketNumber("123abc");

Python

eventTicket_object = {
    'kind': 'walletobjects#eventTicketObject',
    'classId': '1234567.ExampleEventTicketClass',
    'id': '1234567.ExampleEventTicketObject',
    'state': 'active',
    'barcode': {
        'kind': 'walletobjects#barcode',
        'type': 'upcA',
        'value': '123456789012',
        'alternateText': '12345'
    },
    "seatInfo": {
        "kind": "walletobjects#eventSeat",
        "seat": {
            "kind": "walletobjects#localizedString",
            "defaultValue": {
                "kind": "walletobjects#translatedString",
                "language": 'en-us',
                "value": '42'
            }
        },
        "row": {
            "kind": "walletobjects#localizedString",
            "defaultValue": {
                "kind": "walletobjects#translatedString",
                "language": 'en-us',
                "value": 'G3'
            }
        },
        "section": {
            "kind": "walletobjects#localizedString",
            "defaultValue": {
                "kind": "walletobjects#translatedString",
                "language": 'en-us',
                "value": '5'
            }
        },
        "gate": {
            "kind": "walletobjects#localizedString",
            "defaultValue": {
                "kind": "walletobjects#translatedString",
                "language": 'en-us',
                "value": 'A'
            }
        }
    },
    "ticketHolderName": 'Sir Bacon IV',
    "ticketNumber": '123abc',

}

Há duas maneiras de inserir o EventTicketObject.

A primeira maneira é fazer uma solicitação POST (com objeto definido no corpo) para o seguinte URI REST:

https://www.googleapis.com/walletobjects/v1/eventTicketObject

A segunda maneira é criar um JSON Web Token (JWT) a partir da definição EventTicketObject e colocar o JWT em um botão Salvar no Google Pay. Para mais informações, consulte Adicionar um botão da Web.

Adicionar EventTicketObject usando a API Android

A adição de EventTicketObjects à API Android não está disponível no momento.

Para usar a API REST no app, chame um link JWT em um intent ACTION_VIEW, conforme descrito em Usar o método de intent e link do JWT.

Botão para salvar vários participantes

Você pode salvar muitos cartões com um botão ou link Salvar no Google Pay. Isso é útil quando um usuário compra vários ingressos para um evento.

Para salvar vários participantes, inclua vários cartões na matriz no JSON Web Token (JWT) a ser assinado. Os exemplos a seguir mostram duas variações sobre como fazer isso, conforme descrito em Criar um botão para salvar vários cartões:

  1. Este exemplo usa classes de ingressos de evento pré-inseridas e objetos categorizados como o mesmo grupo, e envia somente os códigos de cada objeto. Observe que a propriedade classId é opcional. Ela é mostrada aqui para fins demonstrativos. Neste exemplo, os códigos de classe usados são diferentes.

    {
        "aud": "google",
        "origins": [
            "http://localhost:8080"
        ],
        "iss": "your_iam_account@appspot.gserviceaccount.com",
        "iat": 1536970285,
        "typ": "savetoandroidpay",
        "payload": {
            "eventTicketObjects": [
                {
                    "classId": "<my_issuer_id>.EventTicketClass_A",
                    "id": "<my_issuer_id>.EventTicketObject_A"
                },
                {
    	      //this is a different class, but has same class.eventId
                    "classId": "<my_issuer_id>.EventTicketClass_B",
                    "id": "<my_issuer_id>.EventTicketObject_B"
                }
            ]
        }
    }
        
  2. Este exemplo define uma classe e vários objetos que referenciam essa classe. Tanto a classe quanto os objetos são inseridos quando o usuário salva os cartões.

    {
        "aud": "google",
        "origins": [
            "http://localhost:8080"
        ],
        "iss": "your_iam_account@appspot.gserviceaccount.com",
        "iat": 1536970285,
        "typ": "savetoandroidpay",
        "payload": {
            "eventTicketClasses": [
              {
               "id": "<my_issuer_id>.EventTicketClass",
               "issuerName": "Baconrista Events",
               "reviewStatus": "underReview",
               "eventName": {
                "defaultValue": {
                 "language": "en-US",
                 "value": "Bacon Coffee Fun Event"
                }
               },
               "venue": {
                "name": {
                 "defaultValue": {
                  "language": "En-US",
                  "value": "1600 Amphitheatre Pkwy, Mountain View, CA 94043"
                 }
                },
                "address": {
                 "defaultValue": {
                  "language": "En-US",
                  "value": "1600 Amphitheatre Pkwy, Mountain View, CA 94043"
                 }
                }
               },
               "dateTime": {
                "doorsOpenLabel": "doorsOpen",
                "doorsOpen": "2027-04-12T19:20",
                "start": "2027-04-12T20:00",
                "end": "2027-04-12T21:20"
               }
              }
          ],
          "eventTicketObjects": [ {
            "classId": "<my_issuer_id>.EventTicketClass",
            "id": "<my_issuer_id>.EventTicketObject_1",
            "state": "active",
            },
            {
              "classId": "<my_issuer_id>.EventTicketClass",
              "id": "<my_issuer_id>.EventTicketObject_1",
              "state": "active",
            }
          ]
        }
    }