Amazon SP API 补丁操作操作履行可用性

问题描述 投票:0回答:1

如何通过 Python 中的 Amazon Seller Central SP API 发送 path_body 来更新数量?

例如,我有这样的代码:

request_params = {
    "MarketplaceIds": marketplace_id,  # required parameter
    "CreatedAfter": (
        datetime.datetime.now() - datetime.timedelta(days=60)
    ).isoformat(),  # orders created since 30 days ago, the date needs to be in the ISO format
}

#UPDATE QTA
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",
        "x-amz-marketplace-id": marketplace_id,  # My marketplace ID
    }

    patch_body = {
        "marketplaceIds": "APJ6JRA9NG5V4",
        "patches": [
            {
                "op": "replace",
                "path": "/attributes/fulfillment_availability",
                "value": [
                    {
                        "quantity": 1,
                        "fulfillment_channel_code": "DEFAULT",
                    }
                ]
            }
        ]
    }
    
    response = requests.patch(url, headers=headers, data=json.dumps(patch_body))

    return response.json()

在PATCH操作中,我做错了什么?

我收到 InvalidInput 错误,并且不确定如何创建更新数据的调用,而常规 GET 请求没有任何问题。

python amazon-selling-partner-api
1个回答
0
投票

PATCH 请求,根据 Amazon SP-API 官方文档,您的请求中存在一些问题:

  1. 您在正文根中缺少 productType 元素。您可以将其设置为
    PRODUCT
    。亚马逊目录中的每个产品都继承自此基本产品类型,其中包含有关数量和价格(以及其他属性)的信息。您可以调用
    getDefinitionsProductType
    下载相应的架构(请参阅此处)。
  2. marketplaceIds元素放置错误,因为它必须作为 GET 参数传递(即在查询字符串中)

总结一下,您的请求必须像这样执行:

def update_inventory():
    url = "https://sellingpartnerapi-eu.amazon.com/listings/2021-08-01/items/XXXXXXXX/1AAA-3333-VVVV?marketplaceIds=APJ6JRA9NG5V4"
    
    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",
        "x-amz-marketplace-id": marketplace_id,  # My marketplace ID
    }

    patch_body = {
        "productType": "PRODUCT",
        "patches": [
            {
                "op": "replace",
                "path": "/attributes/fulfillment_availability",
                "value": [
                    {
                        "quantity": 1,
                        "fulfillment_channel_code": "DEFAULT",
                    }
                ]
            }
        ]
    }
    
    response = requests.patch(url, headers=headers, data=json.dumps(patch_body))

    return response.json()
© www.soinside.com 2019 - 2024. All rights reserved.