Selecione uma das seguintes indústrias de cartão para saber mais sobre como ele pode ser usado.
Esta seção contém snippets de código para ingressos de eventos. Ela abrange as seguintes classes e objetos:
JSON EventTicketClass
Depois que você tiver definido o EventTicketClass
, insira-o fazendo uma solicitação POST
ao seguinte URI REST:
https://walletobjects.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://walletobjects.googleapis.com/walletobjects/v1/eventTicketClass?strict=true
O exemplo a seguir mostra um recurso JSON que representa um 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 o 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 ImageUri().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 ImageUri().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_ImageUri(); $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_ImageUri(); $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_ImageUri(); $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://walletobjects.googleapis.com/walletobjects/v1/eventTicketObject
A segunda maneira é criar um JSON Web Token (JWT) com base na definição EventTicketObject
e colocá-lo 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 uma intent ACTION_VIEW
,
conforme descrito em
Usar o método de intent e link do JWT.
Botão para salvar vários participantes
É possível 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:
-
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" } ] } }
-
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", } ] } }