You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Amadeus API预订酒店时遭遇500内部服务器错误排查

Amadeus酒店预订API返回500 Internal Server Error的排查

问题描述

我正在将Amadeus API集成到应用中实现酒店预订功能,但使用有效Offer ID 8ANZ20L7F2 尝试预订时,持续遭遇500 Internal Server Error。其他数据获取端点正常工作,API凭证也确认正确。简化后的Python代码如下:

@app.post("/book_hotel")
async def book_hotel(
    offer_id: str = Query(..., description="Offer ID")
):
    try:
        # Confirm availability of a given offer
        offer_availability = amadeus.shopping.hotel_offer_search(offer_id).get()
        if offer_availability.status_code == 200:
            guests = [
                {
                    'id': 1,
                    'name': {'title': 'MR', 'firstName': 'BOB', 'lastName': 'SMITH'},
                    'contact': {'phone': '+33679278416', 'email': 'bob.smith@email.com'}
                }
            ]

            payments = {
                'id': 1,
                'method': 'creditCard',
                'card': {
                    'vendorCode': 'VI',
                    'cardNumber': '4151289722471370',
                    'expiryDate': '2023-08'
                }
            }

            booking = amadeus.booking.hotel_bookings.post(offer_id, guests, payments).data
        else:
            return {"response": 'The room is not available'}
    except ResponseError as error:
        raise HTTPException(status_code=500, detail=str(error.response.body))

    return {
        "id": booking[0]['id'],
        "providerConfirmationId": booking[0]['providerConfirmationId']
    }

可能的原因

  1. 支付数据问题
    • 测试信用卡不符合沙箱要求:沙箱环境需使用指定测试卡号,示例中的卡号可能已失效;且expiryDate为2023-08,已过期,会触发验证失败。
    • 支付结构错误:Amadeus API要求payments是数组类型,代码中传入单个字典会导致格式不匹配。
  2. Offer状态失效
    • 即使hotel_offer_search返回200,Offer可能已过期或被其他预订锁定,该接口仅返回Offer详情,不保证实时可预订性。
  3. SDK参数传递错误
    • 部分Amadeus Python SDK版本要求预订参数需封装为统一字典传入,而非直接拆分三个独立参数。

排查步骤

  • 修正支付数据:将payments改为数组,使用有效测试卡和未过期日期:
    payments = [
        {
            'id': 1,
            'method': 'creditCard',
            'card': {
                'vendorCode': 'VI',
                'cardNumber': '4111111111111111',
                'expiryDate': '2028-12'
            }
        }
    ]
    
  • 验证Offer实时可用性:改用hotel_offer_availability接口确认Offer可预订状态,该接口专门用于校验实时库存。
  • 调整SDK调用方式:按SDK要求封装参数为字典:
    booking_payload = {
        "offerId": offer_id,
        "guests": guests,
        "payments": payments
    }
    booking = amadeus.booking.hotel_bookings.post(booking_payload).data
    
  • 查看完整错误详情:捕获ResponseError时打印完整响应体,Amadeus通常会在错误信息中给出具体原因(如字段缺失、格式错误)。
  • 核对沙箱数据规则:确保客人信息、支付数据完全符合Amadeus沙箱的测试规范,避免使用不符合要求的测试值。

内容的提问来源于stack exchange,提问作者FFFFFFFFF

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 05:04:58