Python调用亚马逊SP API PATCH更新库存遇InvalidInput错误排查
亚马逊SP API PATCH更新库存的错误排查与修正
你的代码存在几个明确问题,导致触发InvalidInput错误,以下是问题分析和修正方案:
1. marketplaceIds格式不符合要求
请求体中的marketplaceIds要求为数组类型,但你传入的是单个字符串。亚马逊SP API明确规定该字段必须以数组形式传递,即便仅涉及一个 marketplace ID。
错误写法:
"marketplaceIds": "APJ6JRA9NG5V4"
正确写法:
"marketplaceIds": ["APJ6JRA9NG5V4"]
2. 请求体传递方式不规范
使用requests.patch时,直接使用json=patch_body替代data=json.dumps(patch_body)更可靠。json参数会自动设置正确的Content-Type请求头,同时确保JSON序列化格式准确,避免手动序列化可能引发的编码问题。
错误写法:
response = requests.patch(url, headers=headers, data=json.dumps(patch_body))
正确写法:
response = requests.patch(url, headers=headers, json=patch_body)
3. 冗余请求头可能引发冲突
请求头中的x-amz-marketplace-id属于冗余字段,你已在请求体内指定marketplaceIds,保留该字段可能导致参数冲突,建议移除。
修正后的完整代码
import datetime import requests import json # 假设已定义 access_token、marketplace_id 等变量 # 更新库存 def update_inventory(): url = "https://sellingpartnerapi-eu.amazon.com/listings/2021-08-01/items/XXXXXXXX/1AAA-3333-VVVV" headers = { "x-amz-access-token": access_token, "Content-Type": "application/json", "x-amz-date": datetime.datetime.utcnow().strftime("%Y%m%dT%H%M%SZ"), "Host": "sellingpartnerapi-eu.amazon.com" } patch_body = { "marketplaceIds": ["APJ6JRA9NG5V4"], "patches": [ { "op": "replace", "path": "/attributes/fulfillment_availability", "value": [ { "quantity": 1, "fulfillment_channel_code": "DEFAULT", } ] } ] } response = requests.patch(url, headers=headers, json=patch_body) return response.json()
额外检查项
- 确认URL中的卖家SKU(
XXXXXXXX)和ASIN(1AAA-3333-VVVV)拼写完全正确,即便GET请求正常也需再次核对。 - 验证
access_token是否有效,且权限覆盖了库存更新范围(需包含inventory相关权限)。 - 确认
fulfillment_channel_code取值符合实际场景:DEFAULT对应卖家自配送,AMAZON对应亚马逊配送。
内容的提问来源于stack exchange,提问作者Vladimiro De Luca
相关产品推荐
相关产品推荐

