亚马逊 sp-api更新库存 feed 方式,xsd 验证xml

博客讲述了更新库存时遇到的问题,因输出的测试xml后添加字符串致格式不对,耽误了几天时间。还介绍了feed更新方式,包括createFeedDocument返回、uploadxml、createfeed等,以及检测方式,最后说明根据xsd判断xml格式并给出演示代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

更新库存遇到的坑,  xml格式不对,因为输出的测试xml ,后面又加了点字符串,因为这个错误,耽误我好几天。。。下次测试结果时候,一定要等变量完全停止定义的后面 输出


        if($debug) echo htmlentities($xml);
        $feedContents = $xml;

        // 原来这个多了一行,导致了错误
        //$xml .= '</AmazonEnvelope>';

feed 更新方式

1,createFeedDocument 返回 

feedDocumentId

(

POST_INVENTORY_AVAILABILITY_DATA

)

2. uploadxml

3 createfeed

检测方式

1 getFeed

getFeedDocument

3 根据返回的url ,打开这个网址 看feed的执行结果

说明1 。inventory 的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>A。。。。。。X</MerchantIdentifier>
  </Header>
  <MessageType>Inventory</MessageType>
  <Message>
    <MessageID>1</MessageID>
    <OperationType>Update</OperationType>
    <Inventory>
      <SKU>SY...</SKU>
      <FulfillmentCenterID>DEFAULT</FulfillmentCenterID>
      <Quantity>3</Quantity>
    </Inventory>
  </Message>
</AmazonEnvelope>

2 xsd的位置

https://images-na.ssl-images-amazon.com/images/G/01/rainier/help/xsd/release_4_1/Inventory.xsd



https://images-na.ssl-images-amazon.com/images/G/01/rainier/help/xsd/release_4_1/amzn-envelope.xsd

3 根据xsd 判断xml是否符合格式

https://www.freeformatter.com/xml-validator-xsd.html

最后演示代码

use SellingPartnerApi\Api\FeedsV20210630Api as FeedsApi;
use SellingPartnerApi\FeedType;
use SellingPartnerApi\Model\FeedsV20210630 as Feeds;
。。。。。




    //POST_INVENTORY_AVAILABILITY_DATA 原来用POST_PRODUCT_DATA 无效
        $feedType = FeedType::POST_INVENTORY_AVAILABILITY_DATA;
        $feedsApi = new FeedsApi($config);


         // Create feed document
         $createFeedDocSpec = new Feeds\CreateFeedDocumentSpecification(['content_type' => $feedType['contentType']]);
         $feedDocumentInfo = $feedsApi->createFeedDocument($createFeedDocSpec);
         $feedDocumentId = $feedDocumentInfo->getFeedDocumentId();
、。。。。。




        $xml = '<?xml version="1.0" encoding="UTF-8"?>';
        $xml .= '<AmazonEnvelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="amzn-envelope.xsd">';
        $xml .= '<Header>';
        $xml .= '<DocumentVersion>1.01</DocumentVersion>';
        $xml .= '<MerchantIdentifier>' . $merchant_id . '</MerchantIdentifier>';
        $xml .= '</Header>';
        $xml .= '<MessageType>Inventory</MessageType>';
        $xml .= '<Message>';
        $xml .= '<MessageID>1</MessageID>';
        //?是否需要 价格更新需要加这个
        $xml .= '<OperationType>Update</OperationType>';
        $xml .= '<Inventory>';
        // SELLER SKU
        $xml .= '<SKU>' . $seller_sku . '</SKU>';// 售价
        //  发货中心 ,卖家自发货 用  DEFAULT
        $xml .= '<FulfillmentCenterID>DEFAULT</FulfillmentCenterID>';
        //choice  ,三选一
        //$xml .= 			'<Available>true</Available>';
        $xml .= '<Quantity>' . $qty . '</Quantity>';
        //$xml .= 			'<Lookup>FulfillmentNetwork</Lookup>';

        //gmdate("Y-m-dTH:i:s.00:00:00Z")
        //2022-10-27GMT10:39:16.00:00:000
        // $created_after , $created_before两个参数不能同时用

        //minOccurs="0"
        //$xml .= 			'<RestockDate>' . date('Y-m-d',time()) . '</RestockDate>';
        //几天内发货 minOccurs="0"
        //$xml .= 			'<FulfillmentLatency>2</FulfillmentLatency>';
        //切换货运方式 minOccurs="0"
        //$xml .= 			'<SwitchFulfillmentTo></SwitchFulfillmentTo>';
        $xml .= '</Inventory>';
        $xml .= '</Message>';
        $xml .= '</AmazonEnvelope>';


        // 同时修改多个时
        //$xml .= 	'<Message>';
        //$xml .= 		'<MessageID>2</MessageID>';


        // 原来这个多了一行,导致了错误
        //$xml .= '</AmazonEnvelope>';

        if ($debug) echo htmlentities($xml);
        $feedContents = $xml;


        // The Document constructor accepts a custom \GuzzleHttp\Client object as an optional 3rd parameter. If that
        // parameter is passed, your custom Guzzle client will be used when uploading the feed document contents to Amazon.
        $docToUpload = new \SellingPartnerApi\Document($feedDocumentInfo, $feedType);
        $docToUpload->upload($feedContents);
        // This is not present in the example
        $body = new Feeds\CreateFeedSpecification();
        $body->setMarketplaceIds(['ATVPDKIKX0DER']);
        $body->setInputFeedDocumentId($feedDocumentId);
        $body->setFeedType($feedType['name']);

        $result = $feedsApi->createFeed($body);
        $feed_id = $result->getFeedId();





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值