Professional Documents
Culture Documents
25 Oct 2005 This is the first of a two-part tutorial titled "Create an Amazon storefront using PHP" that constructs an Amazon storefront using PHP and the Amazon E-Commerce Service (ECS). The storefront constructed will allow shoppers to view items displayed in lists or search for specific items in the store. Part 2 will cover the shopping cart, recommendation service, and constructing a collectibles shop.
Getting content with Amazon ECS Copyright IBM Corporation 1994, 2008. All rights reserved.
Page 1 of 39
developerWorks
ibm.com/developerWorks
In this two-part series, we create an Amazon shopping cart with PHP. Part 1 will cover the storefront architecture, displaying selections and browsing categories by communicating to Amazon Web Services through item search requests. We will also create a search box. Part 2 will cover creating, adding to, and modifying a shopping cart that will be stored entirely on Amazon servers using a technique called cart requests. We will cover building a collectibles shop and giving shoppers the ability to browse for similar items.
Prerequisites
To follow along with this tutorial, you will need to install and test the following tools, and retrieve two identifiers from Amazon: Web server Pick any Web server and operating system. Feel free to use Apache V2.X, or the IBM HTTP Server. PHP You can follow along in this tutorial without PHP, but if you are interested in interacting with the sample application, download PHP V5. Make sure to build PHP with --enable-soap to enable the PHP SOAP extensions. Amazon
ibm.com/developerWorks
developerWorks
You need two things from Amazon: a developer token and an Amazon Associates ID (see Resources). Web Browser You need a Web browser. These include Mozilla, Firefox, Opera, and Microsoft Internet Explorer.
Section 2. Overview
Amazon ECS
Amazon E-Commerce Service (ECS) allows anyone to connect to its vast inventory, display items on a Web site, tout the items, refer shoppers to Amazon for the sale, and get commission for it. Anyone can do it. All you need do is follow the application programming interface (API) from Amazon. "And you're done," as Amazon says. Your program will become a Web site, advertising and selling Amazon's products in one or more categories, earning you a commission for each referral. You do not need to stock items or process orders. Your only obligation is to maintain your code. In addition to using Amazon ECS with PHP in this tutorial, you will also design the storefront architecture and add functionality to it to allow searching within categories and for specific items.
Getting content with Amazon ECS Copyright IBM Corporation 1994, 2008. All rights reserved.
Page 3 of 39
developerWorks
ibm.com/developerWorks
This is what a SOAP message looks like. In the PHP and Web services section, you will learn about how to use SOAP messages to make and receive requests from SOAP servers.
The storefront
Popular storefronts have clean, simple layouts. In this tutorial, we will design a basic storefront that's light on style so that we can focus on the mechanical parts that make it go. The finished product will have a side panel holding categories and a search box, displaying the items in the main content section on the right (see Figure 1). Figure 1. The final application
ibm.com/developerWorks
developerWorks
Categories
Most online stores have one or a small handful of categories. The storefront in this tutorial will contain a few categories, although when you build your own, you may choose as many categories as you'd like. The categories will be used as information in the SOAP request sent to Amazon ECS, which will return items that match the chosen category. Available categories are shown in Figure 2. Figure 2. Available categories
Getting content with Amazon ECS Copyright IBM Corporation 1994, 2008. All rights reserved.
Page 5 of 39
developerWorks
ibm.com/developerWorks
The categories shown are possible SearchIndex values, which we will use to
ibm.com/developerWorks
developerWorks
Items
By default, Amazon categories contain hundreds of pages full of items. Shoppers need to narrow their searches to find what they want. The item search you will design will search within categories for products and display the results to your shopper, showing similar results to the items displayed on Amazon. See figures 3 and 4. Figure 3. Items shown in the Baby category in the final application
Getting content with Amazon ECS Copyright IBM Corporation 1994, 2008. All rights reserved.
Page 7 of 39
developerWorks
ibm.com/developerWorks
Notice that the first three items in Figure 4 are the same. Not all items appear in the exact same order. However, the items displayed are the same.
ibm.com/developerWorks
developerWorks
Request types
There are several methods for searching for items or other content. Here, we will focus solely on ItemSearch. Part 2 will also use ItemSearch, as well as ItemLookup, CartCreate, CartAdd, CartModify, CartClear, and CartGet. Here's a list of all possible requests: BrowseNodeLookup -- Returns information about a specific Amazon product area CartAdd -- Adds an item to the cart. CartClear -- Removes all the contents of a cart. CartCreate -- Created with one item specified, this request creates a new cart. CartGet -- Retrieves the contents of a shopping cart. CartModify -- Used to modify quantity of items in a shopping cart. Setting a quantity to zero removes that item from the cart. Items may also be moved to and from the saved cart. CustomerContentLookup -- Used to retrieve publicly available content written by specific Amazon customers. CustomerContentSearch -- Allows you to search for Amazon customers by name or e-mail address. Help -- Used to retrieve information about developing with Amazon ECS. ItemLookup -- Allows you to retrieve information for up to 10 products by accessing reviews, similarities, etc. ItemSearch -- Used to search for products based on category and keywords. ListLookup -- Allows you to retrieve all items from a specific list. ListSearch -- Allows you to search for a wish list, baby registry, or wedding registry. SellerListingLookup -- Allows you to look up Amazon Shops and Marketplace products. SellerListingSearch -- Allows you to search for Amazon Shops and Marketplace listings. SellerLookup -- Allows you to retrieve information about specific
Getting content with Amazon ECS Copyright IBM Corporation 1994, 2008. All rights reserved.
Page 9 of 39
developerWorks
ibm.com/developerWorks
sellers, including customer feedback ratings, location, etc. SimilarityLookup -- Allows you to retrieve similar items of a product. TransactionLookup -- Allows you to retrieve limited information on the status of transactions made by Amazon customers.
ibm.com/developerWorks
developerWorks
Amazon ECS will now return an XML document containing information about the searched items.
REST response
Getting content with Amazon ECS Copyright IBM Corporation 1994, 2008. All rights reserved.
Page 11 of 39
developerWorks
ibm.com/developerWorks
Because the response is so large, only a portion of it will be shown here. However, you can see the full response by pointing your browser to the URL in Listing 2. Listing 3 shows a snippet of the REST response. Here is where the items array begins. It plays back to the sender what the search terms were. The first <item> element begins the information for the first item in the response sent from Amazon ECS. It shows the ASIN, the item ID, a URL that -- if pointed to by the browser -- would display detailed information about the product. It also shows basic attributes, as we requested a small ResponseGroup, like the item's title.
The WSDL file defines the structure of SOAP requests and responses, and REST responses. (REST requests are just URLs with encoded parameters.) Notice that the element named Request in Listing 5 defines the type of request that can be made, an ItemSearchRequest; and Listing 5 contains the structure of such a request, which makes the connection between the ItemSearch request and the ItemSearchRequest operation. You can refer to this file as you follow along, and again when you finish this tutorial and make plans to build your own application.
ibm.com/developerWorks
developerWorks
The code in Listing 6 is how the SOAP request would look in XML. It specifies an Envelope with an empty Header. The Body contains the parameters being sent. PHP can now send this request to the SOAP server via HTTP.
Getting content with Amazon ECS Copyright IBM Corporation 1994, 2008. All rights reserved.
Page 13 of 39
developerWorks
ibm.com/developerWorks
The above code sends the SOAP request to the server specified in the WSDL file, the URL you used in your REST request. Now you will move onto the SOAP response.
The resultant data structure holds the answer to your request in InStockQuantity. Next, you will receive and extract the needed data in PHP.
ibm.com/developerWorks
developerWorks
Simply set the variable, $result, to your SOAP call to InStockCheck. To extract the answer, InStockQuantity, use the code in Listing 10. Listing 10. Extract the answer
... $result = $client->lInStockCheck($params); $answer = $result->lInStockQuantity; ?>
You now know how to transmit and receive a simple SOAP request and response. Later, you will make more complex SOAP requests with hierarchy.
Handling faults
A fault can occur for a variety of reasons. To catch faults on your own, without exceptions, and display them to the screen, use the following PHP code. Listing 11. Handle a SOAP fault
... $result = $client->InStockCheck($params); $client = new SoapClient("http://webservices.example.com/services/example.wsdl"); $result = $client->InStockCheck($params); if(is_soap_fault($result)){ print("A fault occurred: " . $result->faultstring); } else{ $answer = $result->InStockQuantity; } ?>
If a problem occurs on your side or the server's, a fault will be returned in the SOAP response, and you will be notified with the above code. A fault looks just like a regular SOAP response. However, the variable faultstring contains the reason why a fault occurred.
Getting content with Amazon ECS Copyright IBM Corporation 1994, 2008. All rights reserved.
Page 15 of 39
developerWorks
ibm.com/developerWorks
The above will introduce your storefront. When a category is selected later, it will call a method that will connect to Amazon ECS and display returned category items or items corresponding to search terms.
ibm.com/developerWorks
developerWorks
<?php print(' <html> <title>'.$title.'</title> <body> <table width="750px" align="center" valign="top"> <tr><td colspan="2"> '); if(!isset($_GET['keyword']) && !isset($_GET['category'])){ print("Home"); } else{ print("<a href='storeFront.php"); print("'>Home</a>"); } ...
Here you print out the title, and, if needed, the home link. If the Web browser is pointed to storeFront.php, not to any keyword or category, then only the text Home will appear. However, if you're browsing categories, the link will appear, and clicking on it will clear the variables in the GET string and take you back to the main page.
Getting content with Amazon ECS Copyright IBM Corporation 1994, 2008. All rights reserved.
Page 17 of 39
developerWorks
ibm.com/developerWorks
Listing 14 starts by creating the side panel that will house the category links. When a customer clicks on one of the categories, the category and displayCat, the value to display for the current category, will be set in the URL. This way, your application can process the variables and display the appropriate items and information using the GET array. Figure 5 shows the current storefront with category links. Figure 5. Display the category links
The category links are shown in the left-side panel. Now you will move on to clicking from category to category. The processGETString will place the current variables in the GET array, propagating their values with each click in your storefront. This is important so that each time a customer clicks through your storefront, his current data is not lost. Place this function in functions.php, as shown in Listing 15.
ibm.com/developerWorks
developerWorks
Listing 15. Process and return the variables encoded in the URL
function processGETString($vetoString=''){ $string = ''; if($_GET['pagenum'] != '' && strstr($vetoString, 'pa') == '') $string .= "&pagenum=".$_GET['pagenum']; if($_GET['keyword'] != '' && strstr($vetoString, 'ke') == '') $string .= "&keyword=".$_GET['keyword']; if($_GET['category'] != '' && strstr($vetoString, 'ca') == '') $string .= "&category=".$_GET['category']; if($_GET['displayCat'] != '' && strstr($vetoString, 'di') == '') $string .= "&displayCat=".$_GET['displayCat']; return $string; }
This function concatenates all current variables to a single variable used for creating links, thus propagating the variable's values from one click to the next. The $vetoString variable that gets passed in as a parameter, with value cadikepa is used to signify that if that variable exists, its value will not be propagated. This is important when a customer wants to switch categories. Use displayCat to show the new category. The keyword and pagenum variables will need to be dropped altogether. Click on the Baby category, and notice the current category and displayCat values in the URL:
http://localhost.localdomain/amazon_ecs_part1/storeFront.php? category=Baby&displayCat=Baby
See how the old category and displayCat values didn't get propagated? It's because they were vetoed by the processGETString() function by passing in 'ca' to veto category, and 'di' to veto displayCat.
Getting content with Amazon ECS Copyright IBM Corporation 1994, 2008. All rights reserved.
Page 19 of 39
developerWorks
ibm.com/developerWorks
... </table> '); if(isset($_GET['category'])){ print(' <table width="135px"> <tr> <td><b>Search within<br>this category</b></td> </tr> <tr> <td> <form name="search" action="storeFront.php" method="GET"> ... <input type="hidden" name="displayCat" value="'.$_GET['displayCat'].'" /> <input type="hidden" name="category" value="'.$_GET['category'].'" />'); print(' <input type="text" name="keyword" size="10" /> <input type="submit" value="Search" /> </form> </td> </tr> <tr> <td> </td> </tr> </table> '); ...
The HTML code in Listing 16 will display a search box. Once the Search button is pressed, it will submit the entered keyword, as well as the current displayCat and category variables as hidden inputs. This will allow your application to process the data and display the appropriate items as results. See the current storefront with the search box by clicking one of the category links, as shown in Figure 6. Figure 6. Display the search box
ibm.com/developerWorks
developerWorks
The search box is displayed in the left-side panel with a button. You will cover searching through items within categories in the Searching for items section. Now you will move on to the main content area.
Getting content with Amazon ECS Copyright IBM Corporation 1994, 2008. All rights reserved.
Page 21 of 39
developerWorks
ibm.com/developerWorks
The contents of the main content area are ready to be displayed. Before you do that, you need to finish it off with a footer.
You can tailor your site and copyright information for your own application. This completes the storefront. Sample output shown by the browser after pointing to storeFront.php is shown in Figure 7. Figure 7. The completed storefront
ibm.com/developerWorks
developerWorks
Your storefront should include a title, a side panel with category links, an empty main content area to the right, and a footer displaying site and copyright information. The search box isn't shown here because a category hasn't yet been chosen. Now you will move onto the fun stuff and begin retrieving content from Amazon.
Getting content with Amazon ECS Copyright IBM Corporation 1994, 2008. All rights reserved.
Page 23 of 39
developerWorks
ibm.com/developerWorks
Listing 18. Process the category variable out of the GET array
... require('header.php'); if($_GET['category'] != ''){ printCategoryItems(); } else{ print(" <p>Welcome to TylerCo., where you will find great value and great service! Guaranteed!<p> Please browse the products on our Web site by clicking on one of the categories to the left"); }
This time, instead of introducing your storefront, the category variable in the GET array will exist, indicating to your application that a category has been selected, which will call printCategoryItems(). To see what the code in Listing 18 does, you can create an empty function, printCategoryItems() and place it in the functions.php file.
ibm.com/developerWorks
developerWorks
Include this file at the top of storeFront.php. The first two lines define your developer token and Amazon Associates ID. You will need to replace these values with the ones you get from Amazon. If the category isn't valid, the method will return, notifying the customer. If it is valid, however, the title of the main content area will become the value used to display the category, which is more readable than using the code passed to Amazon as the category. The $pagenum variable indicates which page of the results Amazon will return for displaying to your customer.
The operation indicates to Amazon that you will perform an ItemSearchRequest, and the first page is 1, as indicated by ItemPage. SearchIndex specifies which category to search, and ResponseGroup tells Amazon how much info you want. You will use $displayCat as Keywords, indicating that you are going to ask for the entire category. The Keywords parameter is required and cannot be empty, so the $displayCat variable, containing the category display name, will be used as the keywords.
Getting content with Amazon ECS Copyright IBM Corporation 1994, 2008. All rights reserved.
Page 25 of 39
developerWorks
ibm.com/developerWorks
function callSOAPFunction($function, $array){ $params = array('Service' => 'AWSECommerceService', 'AssociateTag' => ASSOCID, 'SubscriptionId' => TOKEN, 'Request' => array($array)); $client = new SoapClient("http://webservices.amazon.com/AWSECommerceService /AWSECommerceService.wsdl", array('exceptions' => 0)); return $client->__soapCall($function, array($params)); }
This function takes a function name (as determined in the WSDL file), and the array of parameters you created in the previous panel. A new SOAP client is then created, pointing to the Amazon ECS WSDL file. The parameter 'exceptions' => 0 indicates that you will handle exceptions manually. Finally, you send the request to Amazon, indicating the function of the WSDL file you desire to use, $function, and the array of parameters, $params. If valid, the function will return a data structure containing items that match your search request.
ibm.com/developerWorks
developerWorks
... $result = callSOAPFunction("ItemSearch", $array); $items = $result->Items->Item; if($items){ printItemsSection($innerTitle, $items); printPrevNextPage($result->Items->TotalPages, $pagenum); } } <><>>>>>>>>>
First, you need to retrieve the array of items from the returned SOAP construct, $items = $result->Items->Item. Next, if $items exist, printItemsSection() prints out all the items, and printPrevNextPage() will print out the page navigation links. Now you will need to loop through all the items in the $items array if it's an array, or print out the single item in $items if it isn't an array. See Listing 24 for the code and place this function in functions.php. Listing 24. Print the item's sections title and loop through all the items
function printItemsSection($title, $items){ print("<center><h3>$title</h3></center>"); print(" <table width='100%' border='0' cellspacing='5' cellpadding='0'>"); if(is_array($items)){ foreach($items as $i){ printItem($i); } } else{ printItem($items); } print("</table>"); }
The function printItem() gets called on every item element. This is where the actual HTML for each item will be sent to the Web browser. Add the function shown in Listing 25 to functions.php. Listing 25. Print an item by retrieving item data from the $i variable
function printItem($i){ print("<tr><td align='center' valign='top' rowspan='3'>"); print("<img border='0' src='".$i->SmallImage->URL."'>"); print("</td><td><font size='-1'> "); print("<b>".$i->ItemAttributes->Title."</b>< /font></td> </tr> "); $price = $i->OfferSummary->LowestNewPrice->FormattedPrice; print("<tr> <td align='left' valign='top'>"); print("<font size='-1'>Price: $price</font></td> </tr>"); print("<tr><td colspan=2> </td> </tr> "); }
Getting content with Amazon ECS Copyright IBM Corporation 1994, 2008. All rights reserved.
Page 27 of 39
developerWorks
ibm.com/developerWorks
First, the image is displayed with the URL, $i->SmallImage->URL. Then, the name of the item, $i->ItemAttributes->Title, followed by the price, $i->OfferSummary->LowestNewPrice->FormattedPrice. Each item displayed is actually an object with various attributes that match the XML file returned in the SOAP response. Figure 8 shows the sample browser output of your application thus far. Figure 8. Display the first page of the Sporting Goods category
Next, you need navigation links to navigate between the pages of the category.
ibm.com/developerWorks
developerWorks
In Listing 23, there was a reference to the printPrevNextPage() function. Add this function, as shown in Listing 26, to functions.php. Listing 26. Retrieve the data for the previous and next page links, and display them
function printPrevNextPage($totalPages, $pagenum){ $previousPage = processPrevPage(); $nextPage = processNextPage($totalPages); print("<table width='100%'><tr><td width='33%' align='left'>"); print("$previousPage</td>"); print("<td width='33%' align='center'>Page ".$pagenum); print(" of $totalPages</td>"); print("<td width='33%' align='right'>$nextPage </td></tr></table>"); print("<font size='0'><br><center>The above information came from "); print("Amazon.com. We make no guarantees to the accuracy of the above "); print("information.</center></font>"); }
The function in Listing 26 calls two subfunctions: processPrevPage() and processNextPage(). The function takes the returned links and displays them, which allows customers to traverse pages. It also displays a disclaimer, noting that the author of the Web site isn't responsible for the information provided by Amazon. Add the code for functions, processPrevPage() and processNextPage(), to functions.php, as shown in listings 27 and 28. Listing 27. Calculate the previous page link
function processPrevPage($pagenum){ if($pagenum > 1){ $previousPage = "<a href='storeFront.php?pagenum=". ($pagenum-1). processGETString("pa"); $previousPage .= "'>Previous Page</a>"; } else{ $previousPage = "Previous Page"; } return $previousPage; }
Getting content with Amazon ECS Copyright IBM Corporation 1994, 2008. All rights reserved.
Page 29 of 39
developerWorks
ibm.com/developerWorks
The code in these listings processes the link for the previous and next pages. Notice that the veto string for the processGETString() will be sent as pa, ensuring that the current pagenum variable isn't propagated. The code for displaying navigation links is now in place. See Figure 9 for sample browser output showing the navigation links. Figure 9. Display the navigation links at the bottom of the first page of the Sporting Goods category
ibm.com/developerWorks
developerWorks
Exception handling
Now that you have made the request, it is important to verify that no errors occurred. First, create a function, error(), as shown in Listing 29. Listing 29. Display error information
function error($msg, $err, $result){ print($msg); if(is_array($err)){ $msg2 = $err[0]->Message; } else{ $msg2 = $err->Message; } print($msg2); print_r($result->faultstring); print("<br><br>"); print_r($result); }
This function will display error information, providing that an error has occurred. Modify the printCategoryItems(), as shown in Listing 30. This code tests for errors and uses the new error() function. Listing 30. Test $result for errors and display error information, if true
... $result = callSOAPFunction("ItemSearch", $array); if($result->faultstring || $result->Items->Request->Errors){ error("Your search return 0 results, or perhaps there was an error processing your request. The returned XML file with additional error information is as follows:<br><br>", $result->Items->Request->Errors->Error, $result); } else{ $items = $result->Items->Item; if($items){ printItemsSection($innerTitle, $items); printPrevNextPage($result->Items->TotalPages, $pagenum); } } ...
There are two parts to look for in the returned SOAP construct. One is to check for $result->faultstring, and if a fault didn't occur, you need to check for errors in your request by reviewing $result->Items->Request->Errors. If either condition exists, error information will be displayed; otherwise, code execution will resume. Your application is coming together nicely! Now you will move onto the search box so your customers can better narrow down their searches.
Getting content with Amazon ECS Copyright IBM Corporation 1994, 2008. All rights reserved.
Page 31 of 39
developerWorks
ibm.com/developerWorks
ibm.com/developerWorks
developerWorks
Now hit Enter or click the Search button. Now you will add to and parameterize the printCategoryItems() function using the keywords variable submitted via GET (see Listing 31). Listing 31. Retrieving the keyword variable from the GET array
function printCategoryItems(){ if(isset($_GET['keyword'])){ $keyword = $_GET['keyword']; $innerTitle = "Results for '$keyword' "; } $category = $_GET['category']; ...
Getting content with Amazon ECS Copyright IBM Corporation 1994, 2008. All rights reserved.
Page 33 of 39
developerWorks
ibm.com/developerWorks
Through getKeyword(), you can dynamically change the keywords passed to the item search request. Create a function, getKeyword(), and place it in the functions.php file (see Listing 33). Listing 33. Return the needed keyword, depending whether $keyword is set
function getKeyword(){ if($_GET['keyword'] == ''){ return $_GET['displayCat']; } else{ return $_GET['keyword']; } }
Thus, if keyword is set, meaning that a customer searched using the search box, the keyword will be returned from the function in Listing 33 and used as the Keywords input to the request, allowing you to change the input to the request dynamically. This is all you need to do to change the input parameters dynamically to the item search request. See the sample output for golf clubs in the Sporting Goods category in Figure 11. Figure 11. Search results for golf clubs in the Sporting Goods category
ibm.com/developerWorks
developerWorks
Notice that the results of your search terms match what you entered into the search box! You now have a functioning Web site, where users can browse items in specific categories of Amazon, as well as search for items within these categories.
Section 8. Summary
You have created an Amazon storefront in PHP that allows customers to browse categories and search for specific items within those categories. Your application successfully submits and receives requests to and from Amazon ECS, allowing you to display products on your Web site. In Part 2 of this series, you will create a shopping cart for your application, allowing customers to purchase items securely at
Getting content with Amazon ECS Copyright IBM Corporation 1994, 2008. All rights reserved.
Page 35 of 39
developerWorks
ibm.com/developerWorks
ibm.com/developerWorks
developerWorks
Downloads
Description
Source code for the Amazon store, Part 1 Information about download methods
Name
Size
Download method
HTTP
os-amazonphpstore1.zip 4KB
Getting content with Amazon ECS Copyright IBM Corporation 1994, 2008. All rights reserved.
Page 37 of 39
developerWorks
ibm.com/developerWorks
Resources
Learn For a series of tutorials designed to broaden your PHP skills, see "Learning PHP," Part 1, Part 2, and Part 3. "Boost application development with Amazon Web Services, Part 1" provides an overview of Amazon Web Services (AWS). AWS exposes raw product information and key parts of Amazon technology to third-party developers for use in their applications. "Boost application development with Amazon Web Services, Part 2: Introduction to the Amazon Simple Queue Service" is the second in a series on creating applications with Amazon Web Services and, in this installment, you can learn how to implement a Web service by using the Amazon Simple Queue Service. Learn how to configure Apache and PHP together. The default installation is PHP V4. Install PHP V5, and you shouldn't run into trouble. For more information about PHP SOAP, see the PHP manual: SOAP Functions. Back parameters for Amazon Web Services are available at General Parameters to all Operation Requests. The golden handbook on the Amazon E-Commerce Service (ECS) is Amazon Web Services WSDL File. Learn more about using WSDL with SOAP by reading "Using WSDL in SOAP applications." For more Web services information, including IBM's Web services tools, see New to SOA and Web services. For an excellent developerWorks article on PHP, Web services, and SOAP, read "Access an enterprise application from a PHP script." Visit the developerWorks Open source zone for extensive how-to information, tools, and project updates to help you develop with open source technologies and use them with IBM's products. Visit the developerWorks SOA and Web services zone for extensive information. Get products and technologies Before you begin to develop your Amazon storefront, you need an Amazon Web Services developer token. You also need an Amazon Associates ID. Innovate your next open source development project with IBM trial software,
Getting content with Amazon ECS Page 38 of 39
ibm.com/developerWorks
developerWorks
available for download or on DVD. Discuss Get involved in the developerWorks community by participating in developerWorks blogs.
Getting content with Amazon ECS Copyright IBM Corporation 1994, 2008. All rights reserved.
Page 39 of 39