选择以下一种卡券类别可详细了解其使用方式。
此部分包含登机牌的代码段。它涵盖以下类和对象:
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 ListimageModuleData = 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) 中,请在数组中加入多个卡券。以下示例说明了如何执行此操作的两个变体(如创建一个按钮以保存多张卡券中所述):
-
此示例使用一个 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" } ] } }
-
此示例定义了一个类,以及引用此类的多个对象。当用户保存卡券时,将同时插入类和对象。
{ "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" } ] } }