【问题标题】:XML submitted just fine to Amazon MWS but price not being updatedXML 很好地提交给了亚马逊 MWS,但价格没有更新
【发布时间】:2018-02-17 22:24:28
【问题描述】:

我创建了自己的各种重新定价器,但亚马逊方面没有更新价格。

根据亚马逊提交后的响应,我的代码似乎运行良好。我希望这里的人知道更多关于为什么它实际上没有更新价格。

这是提交的 XML:

<?xml version="1.0" encoding="utf-8" ?>
<AmazonEnvelope
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="amzn-envelope.xsd">
    <Header>
        <DocumentVersion>1.01</DocumentVersion>
        <MerchantIdentifier>MERCHANTID</MerchantIdentifier>
    </Header>
    <MessageType>Price</MessageType>
    <Message>
        <MessageID>1</MessageID>
        <Price>
            <SKU>mysku</SKU>
            <StandardPrice currency="USD">350.50</StandardPrice>
        </Price>
    </Message>
</AmazonEnvelope>

回复如下:

GetFeedSubmissionResultResponse{}(ResponseMetadata: <Element_?/ResponseMetadata_0x7fee61f74248>, GetFeedSubmissionResultResult: <Element_?/GetFeedSubmissionResultResult_0x7fee61f74248>, AmazonEnvelope: 
{'xmlns:xsi': 'http://www.w3.org/2001/XMLSchema-instance', 'xsi:noNamespaceSchemaLocation': 'amzn-envelope.xsd'}, DocumentVersion: '1.02', MerchantIdentifier: 'M_EXAMPLE_1234', Header: '\n\t', MessageType: 'ProcessingReport', MessageID: '1', DocumentTransactionID: '4200000000', StatusCode: 'Complete', MessagesProcessed: '1', MessagesSuccessful: '1', MessagesWithError: '0', MessagesWithWarning: '0', ProcessingSummary: '\n\t\t\t', ProcessingReport: '\n\t\t', Message: '\n\t')

我不知道在这种情况下显示我的代码是否会有所帮助,因为我收到了来自亚马逊的成功回复。不管了:

...

# Provide credentials.
conn = MWSConnection(
    aws_access_key_id=AWS_ACCESS_KEY_ID,
    aws_secret_access_key=AWS_SECRET_ACCESS_KEY,
    Merchant=AMZ_SELLER_ID
)

# Get the service resource
sqs = boto3.resource('sqs')

# Get the queue
queue = sqs.get_queue_by_name(QueueName=SQS_QUEUE_NAME)

for index, message in enumerate(queue.receive_messages(MaxNumberOfMessages=10)):

    ...

    import time
    from jinja2 import Environment, PackageLoader

    env = Environment(loader=PackageLoader('repricer', 'xml_templates'), trim_blocks=True, lstrip_blocks=True)
    template = env.get_template('_POST_PRODUCT_PRICING_DATA_.xml')

    class Message(object):
        def __init__(self, s, price):
            self.SKU = s
            self.PRICE = round(price, 2)
            self.CURRENCY = USD_CURRENCY

    feed_messages = [
        Message(sku.sku, new_price),
    ]

    namespace = dict(MerchantId=AMZ_SELLER_ID, FeedMessages=feed_messages)
    feed_content = template.render(namespace).encode('utf-8')

    print(feed_content)

    feed = conn.submit_feed(
        FeedType='_POST_PRODUCT_PRICING_DATA_',
        PurgeAndReplace=False,
        MarketplaceIdList=[MARKETPLACE_ID],
        content_type='text/xml',
        FeedContent=feed_content
    )

    feed_info = feed.SubmitFeedResult.FeedSubmissionInfo
    print('Submitted product feed: ' + str(feed_info))

    while True:
        submission_list = conn.get_feed_submission_list(
            FeedSubmissionIdList=[feed_info.FeedSubmissionId]
        )
        info = submission_list.GetFeedSubmissionListResult.FeedSubmissionInfo[0]
        submission_id = info.FeedSubmissionId
        status = info.FeedProcessingStatus
        print('Submission Id: {}. Current status: {}'.format(submission_id, status))

        if status in ('_SUBMITTED_', '_IN_PROGRESS_', '_UNCONFIRMED_'):
            print('Sleeping and check again....')
            time.sleep(60)
        elif status == '_DONE_':
            feedResult = conn.get_feed_submission_result(FeedSubmissionId=submission_id)
            print(feedResult)
            break
        else:
            print("Submission processing error. Quit.")
            break

【问题讨论】:

    标签: django python-3.x amazon-mws


    【解决方案1】:

    有几个可能的原因,大致按可能性顺序列出:

    1. 亚马逊更新价值的速度比他们说的要慢。有可能虽然提要成功了,但该更改在亚马逊上反映仍然需要一段时间(即使从 SellerCentral 更改值也会附带一条消息,表明它不是即时的)。
    等待几分钟,看看最终是否会出现更改。


    2. 您可以让备用重新定价服务仍然有效。如果您当前正在为此 SKU 使用另一个重新定价器,它可能会与您的尝试竞争并根据自己的规则集恢复价格。
    可以使用 GetFeedSubmissionList 调用来查看是否在您的之后提交了另一个 _POST_PRODUCT_PRICING_DATA_ 提要(尽管无法查看提交的内容)。


    3. SKU 上的 minmax 价格可能存在冲突(无论您是否设置),并且您尝试设置的价格超出了允许的范围。这是亚马逊的一项政策要求新的和更新的 SKU 设置这些或使用默认标准的结果。

    在我们继续努力降低卖家的价格错误风险并避免潜在的负面客户体验的过程中,自 2015 年 1 月 14 日起,您将无法使用卖家中心偏好设置从所有潜在的低价和高价错误规则。相反,如果您不希望亚马逊的默认潜在定价错误规则应用于该产品,则需要为库存中的每种产品设置允许的最低和最高销售价格。

    我在此找不到公告页面,因此它可能是一封电子邮件,但在 forums

    在这种情况下,Feed 将报告成功(因为它的引用/格式是正确的),但由于设置了价格范围限制,价格更改将静默失败。
    您可以通过查看 SellerCentral 管理库存页面下的 SKU 来验证这是否是您的问题。您可能需要打开最小/最大列才能查看当前值,具体取决于您为该页面设置的首选项。

    不幸的是,没有办法拉动库存商品的最低/最高价格来提前知道这是否会成为问题:

    尊敬的卖家,

    我是来自亚马逊卖家支持的 Sharon,今天我将协助您解决您的问题。
    根据您的电子邮件内容,我了解到您担心是否有可以下载“最低价格”和“最高价格”报告的报告。
    很遗憾地通知您,目前可用的报告仅提供“standard_price”和“list_price”的信息。
    我理解这让您感到失望,但请理解,目前尚未包含在库存报告中包含“最低价格”和“最高价格”的功能,对于由此给您带来的所有不便,我深表歉意看待。

    通过亚马逊 MWS 团队的支持票,2016 年 7 月 3 日


    4. 亚马逊可能不允许 Feed 在有效促销期间更新价格。您应该能够通过查看 SellerCentral 管理库存页面来检查商品是否在打折,其中“价格”列将带有绿色边框。
    似乎不太可能,因为他们要求在“Sale”元素中提供“StandardPrice”元素,但亚马逊自己的“自动定价”工具将其列为possible reason,因为该工具失败了。


    5.您将价格更新应用到错误的市场。
    如果在 MarketplaceIdList=[MARKETPLACE_ID], 下提供给呼叫的 ID 与您正在检查的市场不同,您将不会看到价格变化。
    如果您提交到您无权访问的市场,亚马逊确实会失败提要提交请求,因此如果您只有一个市场,这可能不是问题。


    6. 您在错误的位置寻找新价格。
    如果您在 SellerCentral 管理库存页面下查看,请确保您查看的是“价格”列,而不是“最低价格”列。
    如果您正在查看产品的详细信息或报价页面(在亚马逊的店面),请确保您正在查看您的报价。您可能不是详细信息页面上显示的主要报价或报价列表页面上显示的顶级报价。
    当然,请确保您拥有正确的 SKU/ASIN。


    7.这是针对不同的提要,但user has reported亚马逊有时不会更新信息,需要重新发送提要。


    您可以尝试使用备用提要来更新价格信息_POST_FLAT_FILE_INVLOADER_DATA_,但它是平面文件类型(制表符分隔),因此您的 XML 架构不会转移。仅当您认为问题与您使用的特定提要有关时才值得尝试。

    【讨论】:

      【解决方案2】:

      我不懂 Python,但你的 XML 看起来不错,这是我过去 5 年用来更改价格的 PHP 代码,它运行良好。我不知道这是否对您有帮助,因为它是 PHP。

      $feed = <<< EOD
      <?xml version="1.0" encoding="utf-8"?>
      <AmazonEnvelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="amzn-envelope.xsd">
      <Header>
      <DocumentVersion>1.01</DocumentVersion>
      <MerchantIdentifier>$merchant_token</MerchantIdentifier>
      </Header>
      <MessageType>Price</MessageType>
      <Message>
        <MessageID>1</MessageID>
        <Price>
          <SKU>$sku</SKU>
          <StandardPrice currency="$currency">$new_price</StandardPrice>
        </Price>
      </Message>
      </AmazonEnvelope>
      EOD;
          $feed = trim($feed);
      
          $feedHandle = @fopen('php://temp', 'rw+');
          fwrite($feedHandle, $feed);
          rewind($feedHandle);
          $parameters = array(
              'Merchant' => $MERCHANT_ID,
              'MarketplaceIdList' => $marketplaceIdArray,
              'FeedType' => '_POST_PRODUCT_PRICING_DATA_',
              'FeedContent' => $feedHandle,
              'PurgeAndReplace' => false, //Leave this PurgeAndReplace to false so that it want replace whole product in amazon inventory
              'ContentMd5' => base64_encode(md5(stream_get_contents($feedHandle), true))
          );
          rewind($feedHandle);
      
          $request = new MarketplaceWebService_Model_SubmitFeedRequest($parameters);
          $return_feed = invokeSubmitFeed($service, $request, $price_change_info_log);
      
          fclose($feedHandle);
      

      【讨论】:

      • 你能用它来改变 ListPrice aka MSRP 吗?
      【解决方案3】:

      我最终联系了 Amazon api 支持,他们发现更改价格最多需要 15 分钟。此外,我还有另一个脚本可以上传新产品并更新现有产品的库存和价格……这个脚本正在与我的重新定价脚本竞争。

      我通过更改第二个脚本更新现有产品价格的方式解决了这个问题。

      【讨论】:

      • 请关闭这个问题
      猜你喜欢
      • 2012-07-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-01-15
      相关资源
      最近更新 更多