Python调用eBay Trading API AddItem构造有效请求报错排查
问题解决方法
这个报错不是SDK示例过时,是传参的字典层级错了。
- 该SDK的Trading接口会自动帮你拼接请求根节点、鉴权字段这些公共参数,你不需要把整个XML结构全转成字典传进去,所有商品相关的字段必须统一嵌套在顶层字典的
Item键下,直接把Currency、Country这些字段放在字典顶层,SDK生成请求XML的时候根本不会把它们放到<Item>标签里,自然会报字段缺失。 - 不要用通用XML转字典工具直接转换官方文档的示例XML:官方示例XML带完整的请求根节点、命名空间这些内容,直接转出来的字典会多一层无效嵌套,SDK识别不了。
- 最小可运行的VerifyAddItem传参结构参考如下:
from ebaysdk.trading import Connection myitem = { "Item": { "Title": "Test Listing Title", "Description": "Test item description", "PrimaryCategory": {"CategoryID": "377"}, "StartPrice": "10.0", "CategoryMappingAllowed": "true", "Country": "US", "Currency": "USD", "ListingDuration": "Days_7", "Location": "San Jose, CA", "PaymentMethods": "PayPal", "PayPalEmailAddress": "your-sandbox-paypal@example.com", "Quantity": "1", "ReturnPolicy": { "ReturnsAcceptedOption": "ReturnsAccepted", "RefundOption": "MoneyBack", "ReturnsWithinOption": "Days_30", "Description": "30 days return", "ShippingCostPaidByOption": "Buyer" }, "ShippingDetails": { "ShippingType": "Flat", "ShippingServiceOptions": { "ShippingServicePriority": "1", "ShippingService": "USPSMedia", "ShippingServiceCost": "2.50" } }, "Site": "US" } } # 开debug模式可以直接打印最终发出的完整XML,方便排查节点问题 api = Connection(config_file="ebay.yaml", domain="api.sandbox.ebay.com", debug=True) resp = api.execute("VerifyAddItem", myitem) print(resp.dict())
- 几个额外注意点:
- 你提到的3年前的SDK示例本身结构没有问题,跑不通基本是抄代码的时候漏了
Item这层嵌套,或者沙箱账号的站点配置和传的Country、Currency字段不匹配。 - 目前Trading API仍在维护,没有废弃,字段规则和官方文档是对齐的,不存在结构过时的情况。如果要切REST API实现单商品刊登,可以用Sell系列下的Inventory API创建商品、再用Offer API发布上架,流程比Trading API稍复杂但权限控制更细。
- 调不通的时候优先开debug看实际发出的XML结构,和官方示例的业务节点逐行对比,比反复改字典试错效率高很多。
- 你提到的3年前的SDK示例本身结构没有问题,跑不通基本是抄代码的时候漏了
内容的提问来源于stack exchange,提问作者Hydrolox
相关产品推荐
相关产品推荐

