使用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'] }
可能的原因
- 支付数据问题
- 测试信用卡不符合沙箱要求:沙箱环境需使用指定测试卡号,示例中的卡号可能已失效;且
expiryDate为2023-08,已过期,会触发验证失败。 - 支付结构错误:Amadeus API要求
payments是数组类型,代码中传入单个字典会导致格式不匹配。
- 测试信用卡不符合沙箱要求:沙箱环境需使用指定测试卡号,示例中的卡号可能已失效;且
- Offer状态失效
- 即使
hotel_offer_search返回200,Offer可能已过期或被其他预订锁定,该接口仅返回Offer详情,不保证实时可预订性。
- 即使
- 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
相关产品推荐
相关产品推荐

