Sample code for 30+ languages & platforms
Lua

MWS SubmitFeed (Amazon Marketplace Web Service)

See more HTTP Misc Examples

Uploads a feed for processing by Amazon MWS.

See Amazon MWS SubmitFeed for the Amazon MWS SubmitFeed reference documentation.

Chilkat Lua Downloads

Lua
local chilkat = require("chilkat")

-- This example requires the Chilkat API to have been previously unlocked.
-- See Global Unlock Sample for sample code.

-- This example will send an XML file in the HTTP request body.
-- First we'll construct the XML, then we'll compute the MD5 digest which needs to be added as a query param..

-- Construct the following XML.   (This is just a sample XML body..)

-- <AmazonEnvelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
--     xsi:noNamespaceSchemaLocation="amzn-envelope.xsd">
--   <Header>
--     <DocumentVersion>1.01</DocumentVersion>
--     <MerchantIdentifier>M_EXAMPLE_123456</MerchantIdentifier>
--   </Header>
--   <MessageType>Product</MessageType>
--   <PurgeAndReplace>false</PurgeAndReplace>
--   <Message>
--     <MessageID>1</MessageID>
--     <OperationType>Update</OperationType>
--     <Product>
--       <SKU>56789</SKU>
--       <StandardProductID>
--         <Type>ASIN</Type>
--         <Value>B0EXAMPLEG</Value>
--       </StandardProductID>
--       <ProductTaxCode>A_GEN_NOTAX</ProductTaxCode>
--       <DescriptionData>
--         <Title>Example Product Title</Title>
--         <Brand>Example Product Brand</Brand>
--         <Description>This is an example product description.</Description>
--         <BulletPoint>Example Bullet Point 1</BulletPoint>
--         <BulletPoint>Example Bullet Point 2</BulletPoint>
--         <MSRP currency="USD">25.19</MSRP>
--         <Manufacturer>Example Product Manufacturer</Manufacturer>
--         <ItemType>example-item-type</ItemType>
--       </DescriptionData>
--       <ProductData>
--         <Health>
--           <ProductType>
--             <HealthMisc>
--               <Ingredients>Example Ingredients</Ingredients>
--               <Directions>Example Directions</Directions>
--             </HealthMisc>
--           </ProductType>
--         </Health>
--       </ProductData>
--     </Product>
--   </Message>
-- </AmazonEnvelope>

-- This code was generated by pasting the above XML into the online tool at http://tools.chilkat.io/xmlCreate.cshtml
local xml = chilkat.Xml.new()
xml.tag = "AmazonEnvelope"
xml:add_attribute("xmlns:xsi", "http://www.w3.org/2001/XMLSchema-instance")
xml:add_attribute("xsi:noNamespaceSchemaLocation", "amzn-envelope.xsd")
xml:update_child_content("Header|DocumentVersion", "1.01")
xml:update_child_content("Header|MerchantIdentifier", "M_EXAMPLE_123456")
xml:update_child_content("MessageType", "Product")
xml:update_child_content("PurgeAndReplace", "false")
xml:update_child_content("Message|MessageID", "1")
xml:update_child_content("Message|OperationType", "Update")
xml:update_child_content("Message|Product|SKU", "56789")
xml:update_child_content("Message|Product|StandardProductID|Type", "ASIN")
xml:update_child_content("Message|Product|StandardProductID|Value", "B0EXAMPLEG")
xml:update_child_content("Message|Product|ProductTaxCode", "A_GEN_NOTAX")
xml:update_child_content("Message|Product|DescriptionData|Title", "Example Product Title")
xml:update_child_content("Message|Product|DescriptionData|Brand", "Example Product Brand")
xml:update_child_content("Message|Product|DescriptionData|Description", "This is an example product description.")
xml:update_child_content("Message|Product|DescriptionData|BulletPoint", "Example Bullet Point 1")
xml:update_child_content("Message|Product|DescriptionData|BulletPoint[1]", "Example Bullet Point 2")
xml:update_attr_at("Message|Product|DescriptionData|MSRP", true, "currency", "USD")
xml:update_child_content("Message|Product|DescriptionData|MSRP", "25.19")
xml:update_child_content("Message|Product|DescriptionData|Manufacturer", "Example Product Manufacturer")
xml:update_child_content("Message|Product|DescriptionData|ItemType", "example-item-type")
xml:update_child_content("Message|Product|ProductData|Health|ProductType|HealthMisc|Ingredients", "Example Ingredients")
xml:update_child_content("Message|Product|ProductData|Health|ProductType|HealthMisc|Directions", "Example Directions")

-- Get the XML in the most compact form for the feed submission.
local sbXml = chilkat.StringBuilder.new()
xml.emit_compact = true
xml:get_xml_sb(sbXml)

-- Get the MD5 hash..
local crypt = chilkat.Crypt2.new()
crypt.hash_algorithm = "md5"
local contentMd5Value = crypt:hash_string_enc(sbXml:get_as_string())

local rest = chilkat.Rest.new()

-- Connect to the Amazon MWS REST server.
--
-- Make sure to connect to the correct Amazon MWS Endpoing, otherwise
-- you'll get an HTTP 401 response code.
--
-- The possible servers are:
--
-- North America (NA)     https://mws.amazonservices.com
-- Europe (EU)     https://mws-eu.amazonservices.com
-- India (IN)     https://mws.amazonservices.in
-- China (CN)     https://mws.amazonservices.com.cn
-- Japan (JP)     https://mws.amazonservices.jp
--
local bTls = true
local port = 443
local bAutoReconnect = true
local success = rest:connect("mws.amazonservices.com", port, bTls, bAutoReconnect)

rest.host = "mws.amazonservices.com"

rest:add_query_param("AWSAccessKeyId", "0PB842ExampleN4ZTR2")
rest:add_query_param("Action", "SubmitFeed")
rest:add_query_param("FeedType", "_POST_PRODUCT_DATA_")
rest:add_query_param("MWSAuthToken", "amzn.mws.4ea38b7b-f563-7709-4bae-87aeaEXAMPLE")
rest:add_query_param("MarketplaceId.Id.1", "ATVExampleDER")
rest:add_query_param("SellerId", "A1XExample5E6")
rest:add_query_param("ContentMD5Value", contentMd5Value)
rest:add_query_param("SignatureMethod", "HmacSHA256")
rest:add_query_param("SignatureVersion", "2")
rest:add_query_param("Version", "2009-01-01")

-- Add the MWS Signature param.  (Also adds the Timestamp parameter using the curent system date/time.)
rest:add_mws_signature("POST", "/Feeds/2009-01-01", "mws.amazonservices.com", "MWS_SECRET_ACCESS_KEY_ID")

rest:add_header("Content-Type", "text/xml")
local responseXml = rest:full_request_string("POST", "/Feeds/2009-01-01", sbXml:get_as_string())
if not rest.last_method_success then
    print(rest.last_error_text)
    return
end

if rest.response_status_code ~= 200 then
    -- Examine the request/response to see what happened.
    print("response status code = " .. rest.response_status_code)
    print("response status text = " .. rest.response_status_text)
    print("response header: " .. rest.response_header)
    print("response body: " .. responseXml)
    print("---")
    print("LastRequestStartLine: " .. rest.last_request_start_line)
    print("LastRequestHeader: " .. rest.last_request_header)
end

-- Examine the XML returned in the response body.
print(responseXml)
print("----")
print("Success.")