【问题标题】:MWS Feeds Update Quantities in php - Amazonphp 中的 MWS 源更新数量 - 亚马逊
【发布时间】:2017-04-30 21:36:56
【问题描述】:

这几天我试图通过 php 和 php 中的亚马逊 MWS 更新亚马逊上的库存数量(不使用 MWS API,因为在我看来已经过时了)

这是我的代码:

$param = array();
    $param['AWSAccessKeyId']     = $this->CHIAVE_ACCESSO;
    $param['Action']             = 'SubmitFeed';
    $param['Merchant']           = $this->SELLER_ID;
    $param['FeedType']       = '_POST_INVENTORY_AVAILABILITY_DATA_';
    $param['SignatureMethod']    = 'HmacSHA256';
    $param['SignatureVersion']   = '2';
    $param['Timestamp']          = gmdate("Y-m-d\TH:i:s.\\0\\0\\0\\Z", time());
    $param['Version']            = '2009-01-01';
    $params['MarketplaceId.Id.1'] = $this->MARCKETPLACE_IT;
    $params['MarketplaceId.Id.2'] = $this->MARCKETPLACE_UK;
    $params['MarketplaceId.Id.3'] = $this->MARCKETPLACE_ES;
    $params['MarketplaceId.Id.4'] = $this->MARCKETPLACE_DE;
    $params['MarketplaceId.Id.5'] = $this->MARCKETPLACE_FR;
    $param['PurgeAndReplace']    = 'false';


    foreach ($param as $key => $val) {

        $key = str_replace("%7E", "~", rawurlencode($key));
        $val = str_replace("%7E", "~", rawurlencode($val));
        $url[] = "{$key}={$val}";
    }

    $amazon_feed = '<?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>' .$this->SELLER_ID. '</MerchantIdentifier>
                    </Header>

                    <MessageType>Inventory</MessageType>
                    <Message>
                    <MessageID>1</MessageID>
                    <OperationType>Update</OperationType>
                    <Inventory>
                    <SKU>'.$sku.'</SKU>
                    <Quantity>'.$qty.'</Quantity>
                    </Inventory>
                    </Message>
                    </AmazonEnvelope>';

    sort($url);

    $arr   = implode('&', $url);

    $sign  = 'POST' . "\n";
    $sign .= 'mws.amazonservices.it' . "\n";
    $sign .= '/Feeds/'.$param['Version'].'' . "\n";
    $sign .= $arr;

    $signature      = hash_hmac("sha256", $sign, $this->secretKey, true);
    $httpHeader     =   array();
    $httpHeader[]   =   'Transfer-Encoding: chunked';
    $httpHeader[]   =   'Content-Type: application/xml';
    $httpHeader[]   =   'Content-MD5: ' . base64_encode(md5($amazon_feed, true));
    //$httpHeader[]   =   'x-amazon-user-agent: MyScriptName/1.0';
    $httpHeader[]   =   'Expect:';
    $httpHeader[]   =   'Accept:';

    $signature      = urlencode(base64_encode($signature));

    $link  = "https://mws.amazonservices.it/Feeds/".$param['Version']."?";
    $link .= $arr . "&Signature=" . $signature;

    echo $link;

    $ch = curl_init($link);
    curl_setopt($ch, CURLOPT_HTTPHEADER, $httpHeader);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
    curl_setopt($ch, CURLOPT_POST, 1);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $amazon_feed);
    $response = curl_exec($ch);
    $info = curl_getinfo($ch);
    $errors=curl_error($ch);
    curl_close($ch);

    echo '<pre>';
    print_r($response); //xml response

回复是

50691017150_POST_INVENTORY_AVAILABILITY_DATA_2016-12-15T10:00:09+00:00_SUBMITTED_47843855-c5fb-4db9-bc3c-1ccd0aff4169

但是当我查看亚马逊库存时,我看不到任何变化。我也试过等几天,但没有任何改变。 我做错了什么?

提前感谢您的帮助!

使用 MWS Scratchpad 我遇到的错误如下

<?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.02</DocumentVersion>
    <MerchantIdentifier>A2PDC8GCZHAL2D</MerchantIdentifier>
</Header>
<MessageType>ProcessingReport</MessageType>
<Message>
    <MessageID>1</MessageID>
    <ProcessingReport>
        <DocumentTransactionID>50691017150</DocumentTransactionID>
        <StatusCode>Complete</StatusCode>
        <ProcessingSummary>
            <MessagesProcessed>1</MessagesProcessed>
            <MessagesSuccessful>0</MessagesSuccessful>
            <MessagesWithError>1</MessagesWithError>
            <MessagesWithWarning>0</MessagesWithWarning>
        </ProcessingSummary>
        <Result>
            <MessageID>1</MessageID>
            <ResultCode>Error</ResultCode>
            <ResultMessageCode>13013</ResultMessageCode>
            <ResultDescription>This SKU does not exist in the Amazon.com catalog. Your inventory data was not processed. For reasons why, and help fixing this, see http://sellercentral.amazon.it/gp/errorcode/13013</ResultDescription>
            <AdditionalInfo>
                <SKU>887235757035</SKU>
            </AdditionalInfo>
        </Result>
    </ProcessingReport>
</Message>

但是这个 sku 存在于我的目录中

【问题讨论】:

    标签: php amazon-web-services amazon-mws


    【解决方案1】:

    实际响应始终是来自 MWS 的 XML,您可以在其中看到 50691017150 实际上是您的 FeedSubmissionId

    当您提交 Feed 时,MWS 会返回一个 FeedSubmissionId,您可以通过它跟踪您的 Feed 发生的情况。

    如果你去MWS Scratchpad,你可以得到feed结果。
    Authentication 表单中输入所需的凭据,然后选择 feed 作为 Sezione AP,选择 GetFeedSubmissionResult 作为 Operation。

    您将被要求提供您已经拥有的 FeedSubmissionId。 看看那个提要发生了什么以及为什么它失败了?

    您正在传递 Marketplace Ids ,这意味着 sku 在那里可用。但在您的情况下,它可能不适用于其中任何一种。而MarketplaceId是可选的,可以去掉

    $params['MarketplaceId.Id.1'] = $this->MARCKETPLACE_IT;
    $params['MarketplaceId.Id.2'] = $this->MARCKETPLACE_UK;
    $params['MarketplaceId.Id.3'] = $this->MARCKETPLACE_ES;
    $params['MarketplaceId.Id.4'] = $this->MARCKETPLACE_DE;
    $params['MarketplaceId.Id.5'] = $this->MARCKETPLACE_FR;
    

    【讨论】:

    • 非常感谢,现在我遇到了错误...您能再帮我一下吗?错误告诉我“此 SKU 在 Amazon.com 目录中不存在。您的库存数据未处理。原因并帮助解决此问题,请参阅 sellercentral.amazon.it/gp/errorcode/13013”但在我的目录库存中,我曾经发送请求存在。另外,如果我在库存数据表中进行搜索并输入这个 sku,我就会得到结果......
    • 好的,今晚我会试试的。如果有错误我会问另一个问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多