Alex
Alex
10年跨境老兵(微信:sfgoods),熟悉主流平台(Amazon Ebay 速卖通 Shopee Lazada),欢迎交流~

注册于 1年前

回答
43
文章
5
关注者
1

你有没有尝试使用 searchListingsItems 这些看看能否拉到VC的数据?

如果能拉到,说明SC这个接口也适合VC的,就可以用notication来更新库存了(准实时)

你可以试试。 或者需要我一起协助可以加我 微信 sfgoods

我配合你测试一下

需要使用getListingsItem 接口拉取一下,看看issue是什么,一般是有错误导致的查不到

[https://api.sp-api.net/zh/api-308930030
](https://api.sp-api.net/zh/api-308930030)
image.png

如果需要上传没有品牌名称和商品编号的商品,putListingsItem能实现吗

可以的,需要按照schema格式上传

通过 SP-API 无法直接获取 Easy Ship 订单的完整轨迹(包含所有历史状态和时间戳);
但可以通过调用 getScheduledPackage 接口获取当前状态(带追踪 ID),结合轮询与通知机制(若能捕获状态变化),逐步构建出轨迹历史;同时可以借助报告接口做批量补充和审核。

看起来并不是“接口坏了”,而是没能在目标站点把你的 SKU 挂到同一个目录商品上,所以 LISTING_OFFER_ONLY 被系统判定为“没有找到可挂载的目录商品 → 走成了创建商品流(LISTING)”,于是返回了:

  • 13013:西语提示“该商品不在该站点目录或已被删除。不要用 建议 ASIN,要用原始 UPC/GTIN 再发一次。”
  • 90220:既然被当成“创建商品”,就需要 item_name 等标题类必填字段,但你没传,所以报缺失。

你的请求里最关键的一点是:
你只传了 merchant_suggested_asin(“建议 ASIN”),这不会保证在 ES 站点成功匹配。如果该 ASIN 在西班牙站没有对应目录条目(或还没被跨站同步),SP-API 就无法把你挂到现有目录,于是走创建流并要求标题等信息。


为什么后台/表格/历史 feed 可以成功,而 PUT Listings 失败?

  • 后台和表格(Flat File)通常会用 GTIN(EAN/UPC)去匹配,而不是“建议 ASIN”。同一个 GTIN 在各站点的目录能自动归并,所以能顺利挂上。
  • 你这次用 LISTING_OFFER_ONLY + merchant_suggested_asin,如果目标站点没有该 ASIN,系统就找不到“可挂”的目录 → 报 13013/90220。

可以这几个方面自查看看

  1. 该 ASIN 在目标站点是否存在?
    用 Catalog Items API(2022-04-01 版)查 GET /catalog/2022-04-01/items/{ASIN}?marketplaceIds=A1RKKUPIHCS9HS

    • 存在:继续看第 2 点。
    • 不存在:见“修复方案 B”。
  2. productType 是否与该 ASIN 的 item_type_keyword 匹配?
    你传的是 "productType": "CABINET"。如果目标站点该 ASIN 实际的 product type 不是 CABINET,会导致校验偏离。

    • 用 Definitions API getDefinitionsProductType(传 marketplace=ES、locale=es_ES)核对该 ASIN 的 item_type_keyword,把 productType 改成目标站点实际的 product type。
  3. 用“报价专用”字段,不要混入创建商品字段
    requirements: LISTING_OFFER_ONLY 下,只传报价/配送相关字段:价格(purchasable_offer)、库存(fulfillment_availability)、成色(condition_type)、运费模板(merchant_shipping_group)等。
    你现在的字段基本没问题,但仅靠 merchant_suggested_asin 不足以匹配
  4. 库存与价格
    你请求里 quantity: 0,但响应里读回是 18——说明后面有别的系统/模板同步了库存。若想立即在 ES 站点上架,确保 quantity > 0 且有有效价格。

推荐的修复方案(择一)

方案 A:先确认 ASIN 在 ES 存在 → 纯“跟卖挂接”

前提:该 ASIN 在 ES 站点确实存在。
做法

  • productType 改成与该 ASIN 在 ES 的 item_type_keyword 一致的值。
  • 维持 requirements: LISTING_OFFER_ONLY,并去掉一切创建商品用的字段(别传 item_name 等)。
  • merchant_suggested_asin 可以保留,但不要指望它完成匹配,真正的匹配取决于该 ASIN是否在该站存在。
  • 传价格、库存、成色、运费模板即可。
若这样仍报 13013,基本就是该 ASIN 在 ES 没目录或暂未可售 → 用方案 B。

方案 B:用 GTIN 在目标站点“先建后挂”

前提:该 ASIN 在 ES 不存在/不可售。
做法

  • 把请求切换为 requirements: "LISTING"(不是 OFFER_ONLY)。
  • 使用 GTIN(EAN/UPC) 匹配(Listings Items 支持通过属性提交外部 ID;若你用 Feeds 更顺手,也可走 Feeds 的 product/price/inventory 模板)。
  • 同时提供该 productType 下 创建商品的必填字段external_product_id(+类型)、brand/manufactureritem_nameitem_type_keyword 等。
  • 一旦创建成功,目录会在 ES 生成与 DE 同 GTIN 的条目,你的报价自然就挂上了。
这与后台/表格成功的原理一致:它们也是用 GTIN 做跨站归并。

方案 C:用 BIL/全球开店工具做跨站同步

如果你常规要把 DE 的上架自动“推”到 FR/IT/ES,考虑用 Build International Listings 或后台的“跨国上架”功能,让系统负责在目标站点建立/映射目录,再由 API 只发报价和库存即可。


一个更稳的请求示例(已存在同 ASIN 的前提

{
  "listingsItemPutRequest": {
    "attributes": {
      "purchasable_offer": [{
        "marketplace_id": "A1RKKUPIHCS9HS",
        "our_price": [{
          "schedule": [{ "value_with_tax": 149.99 }]
        }],
        "currency": "EUR"
      }],
      "condition_type": [{
        "marketplace_id": "A1RKKUPIHCS9HS",
        "value": "new_new"
      }],
      "fulfillment_availability": [{
        "quantity": 18,
        "fulfillment_channel_code": "DEFAULT"
      }],
      "merchant_shipping_group": [{
        "marketplace_id": "A1RKKUPIHCS9HS",
        "value": "legacy-template-id"
      }]
      /* 可选:supplier_declared_dg_hz_regulation 等 */
    },
    "productType": "<与该 ASIN 在ES的item_type_keyword一致>",
    "requirements": "LISTING_OFFER_ONLY"
  },
  "sellerId": "ES店铺SellerID",
  "site": "ES",
  "sku": "你的SellerSKU"
}

常见坑位对照

  • 用 GTIN 做跨站匹配;ASIN 只是各站点的本地标识,可能不通用。
  • 核对 productType(用 Definitions/Catalog 拿到 ES 站点的 item_type_keyword)。
  • ✅ OFFER ONLY 只传报价/库存/成色等;一旦被系统判定为“创建”,就会要求 item_name、品牌等。
  • ❌ 仅靠 merchant_suggested_asin。这是提示性字段,不保证匹配。
  • ❌ 目标站点没有该 ASIN 还用 LISTING_OFFER_ONLY。应改走 LISTING+GTIN,或先用 BIL 建好。

不确定你这个商品是否是做了FBA和FBM还是只有FBM? 在这个不知道的前提下有几个场景你试试:

  1. 如果有FBA和FBM同时,那修改时候把FBA和FBM的都加上

比如:

{
  "fulfillmentAvailability": [
    {
      "fulfillmentChannelCode": "DEFAULT",   // 自发货
      "quantity": 10,
      "leadTimeToShipMinDays": 2,
      "leadTimeToShipMaxDays": 4
    },
    {
      "fulfillmentChannelCode": "AMAZON_NA"  // FBA 北美
      // 这里不要放 lead_time_to_ship / leadTimeToShip* / quantity
    }
  ]
}

或者不用PATCH使用MERGE

  1. 如果是单纯的FBM,你加上市场ID看看
{
    "productType": "PRODUCT",
    "patches": [
        {
            "op": "replace",
            "path": "/attributes/fulfillment_availability",
            "value": [
                {
                    "marketplace_id": "ABCDE",
                    "fulfillment_channel_code": "DEFAULT",
                    "lead_time_to_ship_max_days": 4,
                    "quantity": 543
                }
            ]
        }
    ]
}

这个修改和PT没关系。这个属性是通用属性,用PRODUCT或者不传PT(没记错的话)应该都可以修改

这个一般是UPC豁免没有豁免成功. 豁免是针对分类或者PT的。检查是不是真豁免成功了

Feed 显示 success 只代表“已接受入队”,平台后续处理是异步的。

当然,如果feed这里错误,也需要先根据message id对应去处理(比如有的属性错误,这里就会报出来)

上线/可售与否要以 Listings 为准:用 listing 接口拉取并检查 issues 错误:
https://api.sp-api.net/zh/api-308930030
image.png

需要批量检查就用批量接口:
https://api.sp-api.net/zh/api-289540209

我试了下,有的情况有,有的没有

先说有的情况:

使用getListing接口 https://api.sp-api.net/zh/api-308930030

比如这个是变体:可以拉到对应的关系

"relationships": [
    {
      "marketplaceId": "ATVPDKIKX0DER",
      "relationships": [
        {
          "parentSkus": [
            "xxxxxxx"
          ],
          "type": "VARIATION",
          "variationTheme": {
            "attributes": [
              "color"
            ],
            "theme": "COLOR"
          }
        }
      ]
    }
  ],

image.png

如果换成父体,也能拉到子的

 "relationships": [
    {
      "marketplaceId": "ATVPDKIKX0DER",
      "relationships": [
        {
          "childSkus": [
            "afdsfsdf",
            "fsdfds",
            "fsdfsdf",
            "fsdf"          
          ],
          "type": "VARIATION",
          "variationTheme": {
            "attributes": [
              "color"
            ],
            "theme": "COLOR"
          }
        }
      ]
    }
  ],

image.png

没有情况

官方没有说明,但是我实际测试,跟卖时候是没有返回的。
你看下merchant_suggested_asin 这个有没有。这个有,那是跟卖的,就可能是空的

当然还可能有其他情况是空的,欢迎发出来一起探讨

因为你没有发PT(productType)所以我没法具体看,不过你可以先自查:

变体主体你看看是否有:SIZE/COLOR 或者 SIZE_NAME/COLOR_NAME

这个报错就是说,变体主体已经不被接受了,你看看是使用getDefinitionsProductType是不是最新的版本。

当然你后续追加一下具体的PT,我拉一下具体数据看看

啊,这个问题,调整售价就可以解决了吧

需要用到AWS事件桥和SQS,详细如下:

目标

  • 订阅商品更新(如:LISTINGS_ITEM_STATUS_CHANGE)
  • 订阅订单更新(如:ORDER_CHANGE)

总体流程

有两种接收通知的方式:

  1. Amazon EventBridge:用于商品相关通知(Listings)
  2. Amazon SQS(Simple Queue Service):用于订单等通知(Orders)

商品更新订阅流程(使用 Amazon EventBridge)

支持的通知类型示例

  • LISTINGS_ITEM_STATUS_CHANGE
  • LISTINGS_ITEM_MFN_QUANTITY_CHANGE
  • BRANDED_ITEM_CONTENT_CHANGE

步骤 1:创建 Destination(createDestination)

接口: POST /notifications/v1/destinations

参数:

{
  "resourceSpecification": {
    "eventBridge": {
      "region": "us-east-1",
      "accountId": "AWS_ACCOUNT_ID"
    }
  },
  "name": "MyEventBridgeDestination"
}

返回值中保存:

  • destinationId
  • resource.eventBridge.name(用于 EventBridge 配置)

步骤 2:在 AWS EventBridge 配置 partner event source

  1. 登录 AWS 控制台
  2. 找到 EventBridge > Partner event sources
  3. 找到格式为 aws.partner/sellingpartnerapi.amazon.com/{AWS Account Id}/{Application Id} 的 source
  4. 点击并关联事件总线(Event Bus)

步骤 3:创建 Rule 匹配通知类型

  1. 在 EventBridge 控制台,进入 Rules > Create rule
  2. 选择刚刚关联的 partner event bus
  3. 选择 “Use pattern form”
  4. 事件模式样例(仅接收某类通知):
{
  "source": [
    {
      "prefix": "aws.partner/sellingpartnerapi.amazon.com"
    }
  ],
  "detail-type": ["LISTINGS_ITEM_STATUS_CHANGE"]
}
  1. 设置 Target(如 SQS queue、Lambda 等)

步骤 4:创建 Subscription(createSubscription)

接口: POST /notifications/v1/subscriptions/{notificationType}

参数示例:

{
  "payloadVersion": "1.0",
  "destinationId": "YOUR_DESTINATION_ID"
}

notificationType 示例值:

  • "LISTINGS_ITEM_STATUS_CHANGE"
  • "BRANDED_ITEM_CONTENT_CHANGE"

订单更新订阅流程(使用 Amazon SQS)

支持的通知类型示例

  • ORDER_CHANGE
  • ANY_OFFER_CHANGED(可以包含 marketplaceIds 过滤器)

步骤 1:授权 SP-API 写入 SQS

参考 AWS 文档配置权限策略,允许 SP-API 写入您指定的 SQS 队列。


步骤 2:如使用加密,授权 SP-API 访问 KMS key(可选)

提供以下 IAM policy 示例:

{
  "Effect": "Allow",
  "Principal": {
    "AWS": "arn:aws:iam::437568002678:root"
  },
  "Action": ["kms:GenerateDataKey", "kms:Decrypt"],
  "Resource": "*"
}

步骤 3:创建 Destination(createDestination)

接口: POST /notifications/v1/destinations

参数:

{
  "resourceSpecification": {
    "sqs": {
      "arn": "arn:aws:sqs:region:account_id:queue_name"
    }
  },
  "name": "MySQSQueueDestination"
}

返回值中保存:

  • destinationId

步骤 4:创建 Subscription(createSubscription)

接口: POST /notifications/v1/subscriptions/{notificationType}

常见 notificationType 示例:

  • "ORDER_CHANGE"(订单状态/买家取消)
  • "ANY_OFFER_CHANGED"(包含市场过滤器)

参数示例(带过滤器):

{
  "payloadVersion": "1.0",
  "destinationId": "YOUR_DESTINATION_ID",
  "processingDirective": {
    "eventFilter": {
      "eventFilterType": "ANY_OFFER_CHANGED",
      "marketplaceIds": ["ATVPDKIKX0DER"]
    },
    "aggregationSettings": {
      "aggregationTimePeriod": "FiveMinutes"
    }
  }
}

重要说明

  • SQS 类型必须是 Standard queue,不能是 FIFO
  • 接收通知时需去重:通过 NotificationMetadata.notificationId
  • 支持重复、乱序交付,需做好幂等处理
  • ORDER_CHANGE 不支持 marketplaceIds 过滤,若需要请使用 ANY_OFFER_CHANGED

具体流程是这个文档:https://developer-docs.amazon.com/sp-api/docs/notifications-api-v1-use-case-guide

再次调用confirmShipment 或者POST_ORDER_FULFILLMENT_DATA 试试

发布
问题

公众
平台

最新资讯发布