使用OVH API的Python脚本添加DNS Zone后未生成订单,请求排查
问题分析与修复方案
核心错误点
- 订单ID获取逻辑错误:你在调用
checkout之前就获取了cart_info,此时订单还未生成,cart_info['orders']里不会包含刚创建的订单ID。正确的做法是直接从checkout接口的返回结果中提取orderId。 - 缺少必要的购物车预检查:OVH API建议在结算前调用购物车预览接口,确认购物车内容、价格等信息是否正确,避免结算时出现隐性错误。
- 无异常捕获机制:未处理API请求可能出现的HTTP错误(比如权限不足、参数错误),导致失败时无法定位问题。
修正后的代码
import json # 假设已正确初始化OVH client try: # 1. 创建新购物车 cart = client.post('/order/cart', ovhSubsidiary='PL') cart_id = cart.get('cartId') if not cart_id: print("创建购物车失败") exit() # 2. 设置DNS Zone参数并添加到购物车 zone_name = 'testttt.pl' result = client.post( f'/order/cart/{cart_id}/dns', domain=zone_name, duration="P1Y", planCode="zone", pricingMode="default", quantity=1 ) if 'itemId' not in result: print(f"添加DNS Zone {zone_name}到购物车失败") exit() print(f'DNS zone {zone_name}已添加到购物车') # 3. 预览购物车(可选但推荐,确认内容和价格) cart_preview = client.get(f'/order/cart/{cart_id}/preview') print(f'购物车预览:\n{json.dumps(cart_preview, indent=4)}') # 4. 结算购物车 order = client.post( f'/order/cart/{cart_id}/checkout', autoPayWithPreferredPaymentMethod=True ) order_id = order.get('orderId') if not order_id: print("提交订单失败") exit() print(f'订单 {order_id} 已提交') # 5. 查询订单状态 order_status = client.get(f'/me/order/{order_id}/status') print(f'订单 {order_id} 状态: {order_status}') except Exception as e: print(f'API请求出错: {str(e)}')
额外注意事项
- 确保你的OVH API密钥拥有
order和dns相关的权限。 - 检查
zone_name是否符合OVH的域名规则,且未被占用。 - 如果
autoPayWithPreferredPaymentMethod=True失败,可尝试手动选择支付方式,调用/order/cart/{cartId}/paymentMethod接口查看可用支付方式后再结算。
内容的提问来源于stack exchange,提问作者sphtd97
相关产品推荐
相关产品推荐

