代码段

选择以下一种卡券类别可详细了解其使用方式。


此部分包含登机牌的代码段。它涵盖以下类和对象:

JSON FlightClass

定义了 FlightClass 后,您可以通过向以下 REST URI 发出 POST 请求来插入此类:

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

strict=true 参数添加到 REST URI 以启用严格的错误解析并捕获其他错误,例如重复的 ID 字段:

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

以下示例显示了表示 FlightClass 的 JSON 资源。必须在 POST 请求的正文中发送 JSON。以下代码示例详细演示了如何定义和插入 FlightClass

资源

{
    "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

以下示例定义了 FlightObject

资源

{
    "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'
      }
  }

插入 FlightObject 有两种方法。

第一种方法是向以下 REST URI 发送 POST 请求(在请求正文中定义对象):

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

第二种方法是根据 FlightObject 定义创建 JSON 网络令牌 (JWT),并将 JWT 放入保存到 Google Pay 按钮。如需了解详情,请参阅获取 REST API 的访问权限

使用 Android API 添加 FlightObject

目前无法使用 Android API 来添加 FlightObjects

使用 JWT 链接和 Intent 方法中所述,您可以通过在 ACTION_VIEW Intent 中调用 JWT 链接,在应用中使用 REST API。

保存多位乘客按钮

您可以使用一个保存到 Google Pay 按钮或网页链接为同一航段保存多位乘客,或为多个航段保存多位乘客。

在要签名的 JSON 网络令牌 (JWT) 中,请在数组中加入多个卡券。以下示例说明了如何执行此操作的两个变体(如创建一个按钮以保存多张卡券中所述):

  1. 此示例使用一个 JWT 保存具有同一卡券的对象。它使用预先插入的航班类和对象,并且仅发送每个对象的 ID。请注意,classId 属性是可选的。这里是出于演示目的而显示此属性。

    {
       "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. 此示例定义了一个类,以及引用此类的多个对象。当用户保存卡券时,将同时插入类和对象。

    {
        "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"
                }
            ]
        }
    }