如何通过Amadeus API获取特定航班全舱位座位图数据
问题解决:Amadeus Flight Offer Search 无法返回多舱位数据导致座位图API仅获取经济舱
首先看你代码里的核心问题:
你的originDestinations数组里只有一个id为"1"的行程,但在cabinRestrictions里给BUSINESS舱设置了originDestinationIds: ["2"],这个id不存在,所以这个舱位限制不会生效,自然搜不到商务舱的数据。
修正后的Flight Offer Search请求参数
把两个舱位限制的originDestinationIds都改成["1"]:
$data = [ "currencyCode" => "USD", "originDestinations" => [ [ "id" => "1", "originLocationCode" => $originLocationCode, "destinationLocationCode" => $destinationLocationCode, "departureDateTimeRange" => [ "date" => $departureDate, "time" => date('H:i:s', strtotime($departureTime)), ] ], ], "travelers" => [ [ "id" => "1", "travelerType" => "ADULT", ], ], "sources" => [ "GDS", ], "searchCriteria" => [ "flightFilters" => [ "connectionRestriction" => [ "maxNumberOfConnections" => 1, ], "cabinRestrictions" => [ [ "cabin" => "ECONOMY", "originDestinationIds" => ["1"], ], [ "cabin" => "BUSINESS", "originDestinationIds" => ["1"], ], // 如需头等舱/超级经济舱,添加对应条目,注意枚举值正确性 [ "cabin" => "FIRST", "originDestinationIds" => ["1"], ], [ "cabin" => "PREMIUM_ECONOMY", "originDestinationIds" => ["1"], ] ], ], ], ];
额外检查项
确认Flight Offer Search返回结果包含多舱位offer
调用Flight Offer Search后,检查返回的data数组里的每个flightOffers条目,查看travelerPricings[0].fareDetailsBySegment[0].cabin字段是否包含不同舱位值。如果搜索结果本身只有经济舱,说明对应航线/日期无其他舱位可用库存,或GDS源未提供该舱位数据。座位图API调用需传递所有目标舱位的flightOfferId
每个flightOffer对应一个舱位,调用Seatmap API时,要把所有需要获取座位图的flightOfferId都传入请求体的flightOffers数组,示例:{ "flightOffers": [ { "flightOfferId": "offer-id-for-economy" }, { "flightOfferId": "offer-id-for-business" } ] }验证舱位枚举值正确性
Amadeus API的舱位枚举值需严格匹配官方定义:- 经济舱:
ECONOMY - 超级经济舱:
PREMIUM_ECONOMY(注意不是你写的Business_Economy) - 商务舱:
BUSINESS - 头等舱:
FIRST
- 经济舱:
内容的提问来源于stack exchange,提问作者barkii
相关产品推荐
相关产品推荐

