Snippets de código

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 cartões de embarque. Ela abrange as seguintes classes e objetos:

JSON FlightClass

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

https://walletobjects.googleapis.com/walletobjects/v1/flightClass

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/flightClass?strict=true

O exemplo a seguir mostra um recurso JSON representando uma FlightClass. O JSON precisa ser enviado no corpo da solicitação POST. Mais especificamente, as amostras de código a seguir demonstram como definir e inserir a FlightClass.

Recurso

{
    "kind": "walletobjects#flightClass",
    "id": string,
    "issuerName": string,
    "reviewStatus": string,
    "localScheduledDepartureDateTime": string,
    "flightHeader": {
        "kind": "walletobjects#flightHeader",
        "carrier": {
            "kind": "walletobjects#flightCarrier",
            "carrierIataCode": string,
            "airlineName": {
                "kind": "walletobjects#localizedString",
                "translatedValues": [{
                    "kind": "walletobjects#translatedString",
                    "language": string,
                    "value": string
                }],
                "defaultValue": {
                    "kind": "walletobjects#translatedString",
                    "language": string,
                    "value": string
                }
            },
            "airlineLogo": {
                "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
                        }
                    }
                }
            },
            "airlineAllianceLogo": {
                "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
                        }
                    }
                }
            }
        },
        "flightNumber": string
    },
    "origin": {
        "kind": "walletobjects#airportInfo",
        "airportIataCode": string,
        "terminal": string,
        "gate": string
    },
    "destination": {
        "kind": "walletobjects#airportInfo",
        "airportIataCode": string,
        "terminal": string,
        "gate": string
    }
}

Java

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

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 uris = new ArrayList();
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 textModulesData = new ArrayList();

TextModuleData details = new TextModuleData().setHeader("Custom Flight Details").setBody(
    "Baconrista flights has served snacks in-flight since its founding.");

textModulesData.add(details);

// Define Geofence locations
List locations = new ArrayList();
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 Flight details
CarrierData carrier = new CarrierData().setCarrierIataCode("LX");
FlightHeaderData flightHeaderData = new FlightHeaderData().setCarrier(carrier).setFlightNumber("123")
OriginData origin = new OriginData().setAirportIataCode("LAX").setGate("B2").setTerminal("1");
DestinationData destination = new DestinationData().setAirportIataCode("SFO").setGate("C3").setTerminal("2");

FlightClass wobClass = new FlightClass()
    .setId('2945482443380251551.ExampleFlightClass1')
    .setIssuerName("Baconrista Flights")
    .setReviewStatus("underReview")
    .setLinksModuleData(linksModuleData)
    .setImageModulesData(imageModuleData)
    .setTextModulesData(textModulesData)
     .setLocalScheduledDepartureDateTime("2027-03-05T06:30:00")
    .setFlightHeader(flightHeaderData)
    .setOrigin(origin)
    .setDestination(destination);

FlightClass response = client.flightclass().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 Flight Details',
        'body' => 'Baconrista flights has served snacks in-flight 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('Flights perks);
$imageModuleImageInstance = new Google_Service_Walletobjects_Image();
$imageModuleImageInstance->setSourceUri($uriModuleImageInstance);
$imagesModuleData = new Google_Service_Walletobjects_ImageModuleData();
$imagesModuleData->setMainImage($imageModuleImageInstance);
$imagesModuleDataArr = array ($imagesModuleData);

// Define Flight details
$carrier = array( 'carrierIataCode' => 'LX' );
$flightHeaderData = array(
    'carrier' => $carrier,
    'flightNumber' => '123'
);
$origin = array(
    'airportIataCode' => 'LAX',
    'gate' => 'B2',
    'terminal' => '1'
);
$destination = array(
    'airportIataCode' => 'SFO',
    'gate' => 'C1',
    'terminal' => '2'
);

// Create wallet class.
$wobClass = new Google_Service_Walletobjects_FlightClass();
$flightClass->setId('2945482443380251551.FlightClass');
$wobClass->setIssuerName('Baconrista Flights');
$wobClass->setLinksModuleData($linksModuleData);
$wobClass->setTextModulesData($textModulesData);
$wobClass->setImageModulesData($imagesModuleDataArr);
$wobClass->setReviewStatus('underReview');
$wobClass->setLocations($locations);
$wobClass->setLocalScheduledDepartureDateTime("2027-03-05T06:30:00")
$wobClass->setFlightHeader($flightHeaderData)
$wobClass->setOrigin($origin)
$wobClass->setDestination($destination);

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

Python

api_object = generate_flight_class(
      '1234567', 'ExampleFlightClass')
api_request = service.flightclass().insert(body=api_object)
api_response = api_request.execute()

def generate_flight_class(issuer_id, class_id):
  flight_class = {
      'kind': 'walletobjects#flightClass',
      'id': '%s.%s' % (issuer_id, class_id),
      'issuerName': 'Baconrista Flights',
      '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 Flight Details',
          'body': 'Baconrista flights has served snacks in-flight 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': 'Flight perks'
            }
          }
        }
      ],
      'localScheduledDepartureDateTime' : '2027-03-05T06:30:00',
      'flightHeader' : {
        'carrier' : {
          'carrierIataCode' : 'LX'
        },
        'flightNumber' : '123'
      },
      'origin' : {
        'airportIataCode' : 'LAX',
        'gate' : 'A1',
        'terminal' : '1'
      },
      'destination' : {
        'airportIataCode' : 'SFO',
        'gate' : 'C3',
        'terminal' : '2'
      },
    }
  return flight_class

JSON FlightObject

Os exemplos a seguir definem o FlightObject:

Recurso

{
    "kind": "walletobjects#flightObject",
    "id": string,
    "classId": string,
    "state": string,
    "passengerName": string,
    "boardingAndSeatingInfo": {
        "kind": "walletobjects#boardingAndSeatingInfo",
        "boardingGroup": string,
        "seatNumber": string,
        "boardingPosition": string,
        "sequenceNumber": string,
        "seatClass": string,
        "boardingPrivilegeImage": {
            "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
                    }
                }
            }
        },
        "boardingDoor": string
    },
    "reservationInfo": {
        "kind": "walletobjects#reservationInfo",
        "confirmationCode": string,
        "eticketNumber": string,
        "frequentFlyerInfo": {
            "kind": "walletobjects#frequentFlyerInfo",
            "frequentFlyerProgramName": {
                "kind": "walletobjects#localizedString",
                "translatedValues": [{
                    "kind": "walletobjects#translatedString",
                    "language": string,
                    "value": string
                }],
                "defaultValue": {
                    "kind": "walletobjects#translatedString",
                    "language": string,
                    "value": string
                }
            },
            "frequentFlyerNumber": string
        }
    }
}

Java

// Define Boarding and Seating Info
BoardingAndSeatingInfo boardingAndSeatingInfo = new BoardingAndSeatingInfo().setSeatNumber("42").setBoardingGroup('B');

// Define Reservation Info
ReservationInfo reservationInfo = new ReservationInfo().setConfirmationCode("42aQw");

// Define Wallet Object
FlightObject object = new FlightObject()
	.setClassId('2945482443380251551.ExampleFlightClass1')
    .setId('2945482443380251551.ExampleFlightObject1')
    .setState("active")
    .setPassengerName("Sir Bacon the IV")
    .setBoardingAndSeatingInfo(boardingAndSeatingInfo)
    .setReservationInfo(reservationInfo);

PHP

// Define Boarding and Seating Info
$boardingAndSeatingInfo = new BoardingAndSeatingInfo();
$boardingAndSeatingInfo->setSeatNumber("42");
$boardingAndSeatingInfo->setBoardingGroup('B');

// Define Reservation Info
$reservationInfo = new ReservationInfo()
$reservationInfo->setConfirmationCode("42aQw");

// Create wallet object.
$flightObject = new Google_Service_Walletobjects_FlightObject();
$flightObject->setClassId('2945482443380251551.FlightClass');
$flightObject->setId('2945482443380251551.FlightObject');
$flightObject->setState('active');
$flightObject->setPassengerName("Sir Bacon the IV");
$flightObject->setBoardingAndSeatingInfo($boardingAndSeatingInfo);
$flightObject->setReservationInfo($reservationInfo);

Python

flight_object = {
      'kind': 'walletobjects#flightObject',
      'classId': '1234567.ExampleFlightClass',
      'id': '1234567.ExampleFlightObject',
      'state': 'active',
      'passengerName' : 'Sir Bacon the IV',
      'boardingAndSeatingInfo' : {
        'seatNumber' : '42',
        'boardingGroup' : 'B'
      },
      'reservationInfo' : {
        'confirmationCode' : '42aQw'
      }
  }

Há duas maneiras de inserir o FlightObject.

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

https://walletobjects.googleapis.com/walletobjects/v1/flightObject

A segunda maneira é criar um JSON Web Token (JWT) com base na definição FlightObject e colocá-lo em um botão Salvar no Google Pay. Para mais informações, consulte Receber acesso à API REST.

Adicionar FlightObject com a API Android

A adição de FlightObjects à 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 passageiros

É possível salvar vários passageiros para o mesmo trecho de voo, ou vários passageiros para trechos com vários voos, com um botão Salvar no Google Pay ou um link da Web.

No JSON Web Token (JWT) a ser assinado, inclua vários cartões na matriz. Os exemplos a seguir mostram duas formas de fazer isso, conforme descrito em Criar um botão para salvar vários cartões:

  1. Este exemplo salva objetos do mesmo cartão em um JWT. Ele usa classes e objetos de voo pré-inseridos e envia apenas os códigos de cada objeto. Observe que a propriedade classId é opcional. Ela é mostrada aqui para fins demonstrativos.

    {
       "aud": "google",
       "origins": [],
       "iss": "your_iam_account@appspot.gserviceaccount.com",
       "iat": 1534891254,
       "typ": "savetowallet",
       "payload": {
           "flightObjects": [
               {
                   "classId": "<my_issuer_id>.FlightClass_A",
                   "id": "<my_issuer_id>.FlightObject_A_01"
               },
               {
                   "classId": "<my_issuer_id>.FlightClass_A",
                   "id": "<my_issuer_id>.FlightObject_A_02"
               }
           ]
       }
    }
  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": "s2googlepay-api@sunlit-pixel-197421.google.com.iam.gserviceaccount.com",
        "iat": 1536886148,
        "typ": "savetoandroidpay",
        "payload": {
            "flightObjects": [
                {
                    "classId": "<my_issuer_id>.FlightClass_A",
                    "state": "active",
                    "passengerName": "test name adHoc",
                    "id": "<my_issuer_id>.FlightObject_A",
                    "reservationInfo": {
                        "confirmationCode": "testcode"
                    }
                },
                {
                    "classId": "<my_issuer_id>.FlightClass_A",
                    "state": "active",
                    "passengerName": "test name",
                    "id": "<my_issuer_id>.flight_multi_0913-obj01-copy",
                    "reservationInfo": {
                        "confirmationCode": "testcode"
                    }
                }
            ],
            "flightClasses": [
                {
                    "origin": {
                        "terminal": "2",
                        "gate": "A1",
                        "kind": "walletobjects#airportInfo",
                        "airportIataCode": "SFO"
                    },
                    "kind": "walletobjects#flightClass",
                    "reviewStatus": "underReview",
                    "destination": {
                        "terminal": "1",
                        "gate": "B3",
                        "kind": "walletobjects#airportInfo",
                        "airportIataCode": "TPE"
                    },
                    "id": "<my_issuer_id>.FlightClass_A",
                    "flightHeader": {
                        "carrier": {
                            "carrierIataCode": "BR"
                        },
                        "flightNumber": "123"
                    },
                    "localScheduledDepartureDateTime": "2027-03-05T06:30:00",
                    "issuerName": "Baconrista Airlines"
                }
            ]
        }
    }