Sample code for 30+ languages & platforms
Swift

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.

Important: The Chilkat v9.5.0.75 release accidentally breaks Amazon MWS (not AWS) authentication. If you need MWS with 9.5.0.75, send email to support@chilkatsoft.com for a hotfix, or revert back to v9.5.0.73, or update to a version after 9.5.0.75.

Chilkat Swift Downloads

Swift

func chilkatTest() {
    var success: Bool = false

    // 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
    let xml = CkoXml()!
    xml.tag = "AmazonEnvelope"
    xml.addAttribute(name: "xmlns:xsi", value: "http://www.w3.org/2001/XMLSchema-instance")
    xml.addAttribute(name: "xsi:noNamespaceSchemaLocation", value: "amzn-envelope.xsd")
    xml.updateChildContent(tagPath: "Header|DocumentVersion", value: "1.01")
    xml.updateChildContent(tagPath: "Header|MerchantIdentifier", value: "M_EXAMPLE_123456")
    xml.updateChildContent(tagPath: "MessageType", value: "Product")
    xml.updateChildContent(tagPath: "PurgeAndReplace", value: "false")
    xml.updateChildContent(tagPath: "Message|MessageID", value: "1")
    xml.updateChildContent(tagPath: "Message|OperationType", value: "Update")
    xml.updateChildContent(tagPath: "Message|Product|SKU", value: "56789")
    xml.updateChildContent(tagPath: "Message|Product|StandardProductID|Type", value: "ASIN")
    xml.updateChildContent(tagPath: "Message|Product|StandardProductID|Value", value: "B0EXAMPLEG")
    xml.updateChildContent(tagPath: "Message|Product|ProductTaxCode", value: "A_GEN_NOTAX")
    xml.updateChildContent(tagPath: "Message|Product|DescriptionData|Title", value: "Example Product Title")
    xml.updateChildContent(tagPath: "Message|Product|DescriptionData|Brand", value: "Example Product Brand")
    xml.updateChildContent(tagPath: "Message|Product|DescriptionData|Description", value: "This is an example product description.")
    xml.updateChildContent(tagPath: "Message|Product|DescriptionData|BulletPoint", value: "Example Bullet Point 1")
    xml.updateChildContent(tagPath: "Message|Product|DescriptionData|BulletPoint[1]", value: "Example Bullet Point 2")
    xml.updateAttrAt(tagPath: "Message|Product|DescriptionData|MSRP", autoCreate: true, attrName: "currency", attrValue: "USD")
    xml.updateChildContent(tagPath: "Message|Product|DescriptionData|MSRP", value: "25.19")
    xml.updateChildContent(tagPath: "Message|Product|DescriptionData|Manufacturer", value: "Example Product Manufacturer")
    xml.updateChildContent(tagPath: "Message|Product|DescriptionData|ItemType", value: "example-item-type")
    xml.updateChildContent(tagPath: "Message|Product|ProductData|Health|ProductType|HealthMisc|Ingredients", value: "Example Ingredients")
    xml.updateChildContent(tagPath: "Message|Product|ProductData|Health|ProductType|HealthMisc|Directions", value: "Example Directions")

    // Get the XML in the most compact form for the feed submission.
    let sbXml = CkoStringBuilder()!
    xml.emitCompact = true
    xml.getSb(sb: sbXml)

    // Get the MD5 hash..
    let crypt = CkoCrypt2()!
    crypt.hashAlgorithm = "md5"
    var contentMd5Value: String? = crypt.hashStringENC(str: sbXml.getAsString())

    let rest = CkoRest()!

    // 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 
    // 
    var bTls: Bool = true
    var port: Int = 443
    var bAutoReconnect: Bool = true
    success = rest.connect(hostname: "mws.amazonservices.com", port: port, tls: bTls, autoReconnect: bAutoReconnect)

    rest.host = "mws.amazonservices.com"

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

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

    rest.addHeader(name: "Content-Type", value: "text/xml")
    var responseXml: String? = rest.fullRequestString(httpVerb: "POST", uriPath: "/Feeds/2009-01-01", bodyText: sbXml.getAsString())
    if rest.lastMethodSuccess != true {
        print("\(rest.lastErrorText!)")
        return
    }

    if rest.responseStatusCode.intValue != 200 {
        // Examine the request/response to see what happened.
        print("response status code = \(rest.responseStatusCode.intValue)")
        print("response status text = \(rest.responseStatusText!)")
        print("response header: \(rest.responseHeader!)")
        print("response body: \(responseXml!)")
        print("---")
        print("LastRequestStartLine: \(rest.lastRequestStartLine!)")
        print("LastRequestHeader: \(rest.lastRequestHeader!)")
    }

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

}