跳水失误:用 PHP 创建 Amazon 店面,第 1 部分: 用 Amazon ECS 获得内容
来源:百度文库 编辑:九乡新闻网 时间:2024/04/29 21:11:56
用 PHP 创建 Amazon 店面,第 1 部分: 用 Amazon ECS 获得内容
如何构建店面并显示商品
第 1 页, 总 共 12 页文档选项
对本教程的评价
帮助我们改进这些内容
级别: 中级
Tyler Anderson , 自由撰稿人, Stexar 公司
2005 年 12 月 19 日
这是使用 PHP 和 Amazon 电子商务服务(ECS)建设 Amazon 店面的两部分教程的第一部分。建设的店面允许购物者查看列表中显示的商品,或者在商店中搜索特定商品。第 2 部分将介绍购物车、推荐服务以及建设专卖店。
开始之前
这个教程面向的是对于创建店面、自动连接 Amazon Web 服务并显示结果有兴趣的程序员。这个教程假设读者熟悉基本的 PHP 概念,包括 for
和 while
循环,以及表单处理。如果对自己的 PHP 能力没把握,有许多优秀的教程可以帮助您达到要求(请参阅 参考资料)。
您应当熟悉 Amazon Web 服务,在 developerWorks 的 “Boost application development with Amazon Web Service” 系列文章中介绍了它(请参阅 参考资料)。
关于本系列
在这个两部分的系列中,我们要用 PHP 创建一个 Amazon 购物车。第 1 部分将讨论店面的架构,通过商品搜索请求与 Amazon Web 服务通信,显示选项并浏览商品分类。我们还将创建一个搜索框。
第 2 部分将讨论购物车的创建、添加商品和修改,这个购物车将使用叫作购物车请求的技术完全保存在 Amazon 的服务器上。我们将介绍构建藏品商店和向购物者提供浏览类似商品的能力。
回页首
关于本教程
我们将构建一个 Amazon 店面,包含分类链接和搜索框,允许购物者浏览商店中的商品目录。与多数 PHP 应用程序不同,这个程序不需要本地数据库,因为数据库保存在 Amazon 的服务器上。所以,这个教程严重地依赖简单对象访问协议(SOAP),这个 Web 服务协议用 XML 组织信息。Web 服务是应用程序(例如在这个教程中要构建的 PHP 应用程序)与中央服务器通信以获取信息的一种方式。
通过 Amazon 电子商务服务(ECS),可以从购物者选择的分类中获得和显示内容。当选中一个分类时,将创建参数,指明这个分类,收集相关信息,并启动 SOAP 客户。SOAP 客户会接受参数,形成 XML 文档,并把 XML 文档转交给 SOAP 服务器。Amazon 服务器访问自己的数据库,生成 XML 文档,里面包含的商品与参数匹配。最后,服务器把 XML 文档返回给 SOAP 客户,SOAP 客户再把文档解析成数据结构,从数据结构中可以提取出请求的数据。
获得内容
如何构建店面并显示商品
第 2 页, 总 共 12 页文档选项
对本教程的评价
帮助我们改进这些内容
概述
Amazon ECS
Amazon 电子商务服务(ECS)允许任何人连接到它巨大的商品目录,在 Web 站点上显示商品,把购物者引导到 Amazon 进行销售,并得到销售的佣金。任何人都可以做这件事。需要做的只是遵守 Amazon 的应用程序编程接口(API)。就像 Amazon 说的“这就行了”。您的程序将成为一个Web 站点,在一个或多个分类中为 Amazon 的产品做广告、销售它的产品,得到每笔介绍成交的佣金。您不需要屯积商品或处理订单,唯一的责任就是维护好您的代码。
在这篇教程中,除了通过 PHP 使用 Amazon ECS,还将设计店面的架构,并向它添加功能,允许在分类中进行浏览和搜索特定商品。
回页首
与 Amazon ECS 通信
我们将使用 PHP 和 Web 服务,通过 SOAP 与 Amazon 通信。Web 服务(例如 Amazon ECS)允许程序员访问服务。在这个示例中,我们将连接到 Amazon ECS 去获取关于产品的信息。清单 1 显示了一条示例 SOAP 消息。
清单 1. 示例 SOAP 消息
...
SOAP 消息看起来就是这个样子。在 PHP 和 Web 服务 一节中,将学习如何使用 SOAP 消息制作到 SOAP 服务器的请求和接收来自 SOAP 服务器的请求。
回页首
店面
流行的店面拥有干净、简单的布局。在这份教程中,我们将设计一个基本的店面,在样式上比较朴素,这样就可以把精力集中在使店面运行的机械部分了。完成的产品将有一个容纳分类和搜索框的侧面板,在右侧的主内容区显示商品(请参阅图 1)。
图 1. 最后的应用程序
回页首
分类
多数在线商店只有一个或很少的分类。这份教程的店面将包含较少几个分类,但是在构建自己的店面时,可以喜欢多少分类就建立多少。分类被作为向 Amazon ECS 发送的 SOAP 请求中的信息,ECS 会返回与选中的分类匹配的商品。
可用的分类如图 2 所示。
图 2. 可用的分类
上面显示的分类是 SearchIndex
可能的值,我们将用它来搜索商品。
回页首
商品
默认情况下,Amazon 的分类包含充满商品的数百页。购物者需要缩小他们的搜索范围,以便找到他们想要的东西。我们将要设计的商品搜索功能会在分类内搜索商品,并把结果显示给购物者,显示的结果与 Amazon 上显示的商品类似。请参阅图 3 和图 4。
图 3. 最终应用程序在 Baby 分类中显示的商品
图 4. Amazon 上在 Baby 分类中显示的商品
请注意在图 4 中的前三项是相同的。不是所有商品都完全以同样顺序出现。但是,显示的商品是一样的。
获得内容
如何构建店面并显示商品
第 3 页, 总 共 12 页文档选项
对本教程的评价
帮助我们改进这些内容
什么是 Amazon ECS?
Amazon 电子商务服务(ECS)允许得到 Amazon 信息的访问权,所有的信息与浏览 Amazon 时发现的信息一样。这一节将研究从 Amazon 检索信息的方法。
请求类型
搜索商品或其他内容有多种方法。在这里,我们只集中在 ItemSearch
上。第 2 部分还会使用 ItemSearch
,以及 ItemLookup
、CartCreate
、CartAdd
、CartModify
、CartClear
和 CartGet
。
下面是所有可能的请求的列表:
BrowseNodeLookup
—— 返回 Amazon 特定产品区域的信息。CartAdd
—— 向购物车添加商品。CartClear
—— 删除购物车的所有内容。CartCreate
—— 创建时带有一件指定的商品,这个请求创建一辆新购物车。CartGet
—— 检索购物车的内容。CartModify
—— 用来修改购物车中商品的数量。把数量设为 0 会把商品从购物车删除。商品也可以移动到已经保存的购物车或者从中移出。CustomerContentLookup
—— 用来检索特定 Amazon 客户编写的可以公开得到的内容。CustomerContentSearch
—— 允许按照姓名或电子邮件地址搜索 Amazon 客户。Help
—— 用来检索关于使用 Amazon ECS 进行开发的信息。ItemLookup
—— 允许通过使用评论、相似性等信息检索最多 10 件产品。ItemSearch
—— 用来根据分类和关键字来搜索产品。ListLookup
—— 允许从特定列表检索所有商品。ListSearch
—— 允许搜索祝福列表、婴儿库或婚姻库。SellerListingLookup
—— 允许查询 Amazon Shops and Marketplace 的产品。SellerListingSearch
—— 允许搜索 Amazon Shops and Marketplace 的清单。SellerLookup
—— 允许检索关于特定销售人员的信息,包括客户反馈评级、位置等等。SimilarityLookup
—— 允许检索某个产品的类似商品。TransactionLookup
—— 允许检索 Amazon 客户所做交易状态的有限信息。
回页首
理解参数
每个请求都要求有合适的参数,好让 Amazon ECS 正确地处理请求。这个系列中使用的参数和它们的说明是:
Service
—— 这个参数总是AWSECommerceService
。SubscriptionId
—— 来自 Amazon 的开发人员令牌。AssociateTag
—— 来自 Amazon 的合伙人 ID。Operation
—— 要执行的操作或请求的类型。通常,只是把Request
添加到每个请求类型。对于ItemSearch
这个请求类型,操作将是ItemSearchRequest
。对于ItemLookup
,操作将是ItemLookupRequest
,如此类推。ResponseGroup
—— 这是个重要的参数,因为它告诉 Amazon 需要多少信息:从Small
(少量)、Medium
(中量)和Large
(大量)到可用的 XML 元素的特定部分。
下面是一些可用的响应组:
Accessories
—— 对于列表中有附件的产品,返回每件产品的附件商品列表。Cart
—— 返回购物车标识符,以及特定于每件产品的信息。Images
—— 返回某件产品拥有的全部图片的 URL。Offers
—— 返回列表中每件产品的供货信息。Small
—— 为列表中的每件商品提供“少量”信息。Medium
—— 为列表中的每件商品提供“中量”信息。Large
—— 为列表中的每件商品提供“大量”信息。
回页首
SOAP 与 REST
服务器为每个请求类型返回的数据都是相同的。但是,请求的设置和使用都有不同。REST
请求最简单,因为它们只是长长的 URL,URL 中包含每个商品的变量和它们的值 —— 非常像 PHP 中的 GET
请求。
另一方面,SOAP 请求更复杂,因此也就更强大。它们是通过 HTTP 传递给 SOAP 服务器的 XML 文档。SOAP 请求比 GET
请求更强大,因为它们能接受更多参数,而且多个请求也可以绑定在一个 SOAP XML 文档中,这样就支持同时请求。而且,SOAP 请求拥有优先级,这就增强了商店整体的响应性。
在这份教程中将使用 REST
请求来研究服务器返回的数据。在最终应用程序中(在第 2 部分中)使用 SOAP 请求,因为它们允许做的工作比简单的 REST
请求多得多。
回页首
简单 REST 请求
在这里将执行 REST
请求来研究返回的数据是什么。进行 ItemSearch
查询就是在这份教程后面要做的事。首先,需要设置参数。
服务的值是 AWSECommerceService
,操作是 ItemSearchRequest
,ResponseGroup
是 Small
,SubscriptionId
是开发人员令牌,AssociateTag
是 Amazon 合伙人 ID。通过 Sporting Goods 分类进行搜索,所以 SearchIndex
是 SportingGoods,具体的搜索是高尔夫俱乐部,所以 Keywords
是“golf clubs”。下面是使用的 URL,如清单 2 所示。
清单 2. REST 请求的 URL
http://webservices.amazon.com/onca/xml?Service=AWSECommerceService &SubscriptionId=01AJBKQ38K8HM2R33Q82&Operation=ItemSearch &ResponseGroup=Small&AssociateTag=scubanecessit-20 &SearchIndex=SportingGoods&Keywords=golf%20clubs
Amazon ECS 现在会返回包含搜索的商品信息的 XML 文档。
回页首
REST 响应
因为响应太大,所以在这里只能显示一部分。但是,自己可以把浏览器指向清单 2 中的 URL,查看完整的响应。清单 3 显示了 REST
响应的一小段。
这就是商品数组开始的地方。它把搜索商品的内容传回发送者。第一个
元素开始的是 Amazon ECS 发送的响应中第一个商品的信息。它显示了 ASIN、商品 ID、URL(如果是由浏览器指向的),还会显示产品的详细信息。如果请求了小型 ResponseGroup
,它还会显示基本的属性,例如商品的标题。
回页首
理解 Amazon 的 WSDL 文件
Web 服务描述语言(WSDL)文件定义了 Web 服务需要的信息以及它应当返回的信息。这样,不需要去琢磨需要发送什么信息、向哪儿发送信息、从响应中能得到什么,就可以构建自己的应用程序。
Amazon 的 WSDL 文件 描述了可用的命令以及可能的查询和搜索语法。
请考虑上面文件中的 ItemSearch
项,如 清单 4 所示。
对于 REST
请求,清单 5 中显示的元素只是被插入 ItemSearch
元素(清单 3)。AWSECommerceService
服务定义了应当在哪里进行请求,它就是在 REST
响应面板中的 GET
请求的 URL 中发送的内容。
清单 5. ItemSearchRequest 项
...
WSDL 文件定义了 SOAP 请求和响应以及 REST
响应的结构。(REST
请求就是带有编码过的参数的 URL。)请注意,清单 5 中名为 Request
的元素定义了可以产生的请求类型,是 ItemSearchRequest
请求;而且清单 5 中包含的请求结构把 ItemSearch
请求和 ItemSearchRequest
操作连接在一起。在继续阅读本教程时,或者在读完这份教程并准备构建自己的应用程序时,可以参考这个文件。
获得内容
如何构建店面并显示商品
第 4 页, 总 共 12 页文档选项
对本教程的评价
帮助我们改进这些内容
PHP 和 Web 服务
在这一节,将学习如何通过 PHP 发送和接收简单 SOAP 请求,以及如何 PHP 从响应中提取数据。
创建 SOAP 请求
要创建 SOAP 请求,需要设置参数。因为 SOAP 比 REST
复杂,所以将从一个简单示例开始:产品库存检查器。XML 文档如清单 6 所示。
清单 6. 产品库存检查器的 XML 格式的 SOAP 请求
UWHD0023
清单 6 中的代码是 SOAP 请求在 XML 中看起来的样子。它指定了一个带有空 Header
的 Envelope
。Body
包含要发送的参数。PHP 现在可以通过 HTTP 向 SOAP 服务器发送这个请求。
回页首
用 PHP 创建 SOAP 客户
要创建 SOAP 客户,可以利用 PHP 内置的 SOAP 功能:
然后,把请求传递给 SOAP 服务器。
回页首
用 PHP 传递 SOAP 请求
现在已经创建了客户,需要设置 SOAP 参数并调用示例函数 InStockCheck
,如清单 7 所示。
清单 7. 设置参数并发送 SOAP 请求
$params = array( ‘ItemId‘ => UWHD0023);$client->InStockCheck($params);...?>
以上代码把 SOAP 请求发送到 WSDL 文件中指定的服务器,URL 就是 REST
请求中使用的 URL。现在转到 SOAP 响应。
回页首
SOAP 响应
SOAP 响应也是 XML 文档 (请参阅清单 8)。
清单 8. 产品库存检查器的 XML 格式的 SOAP 响应
15
生成的数据结构在 InStockQuantity
中包含对请求的回答。下面,将用 PHP 接收和提取需要的数据。
回页首
用 PHP 从响应中接收和提取数据
用清单 9 中的 PHP 代码捕获响应。
清单 9. 捕获响应
...$client-$result = $client-...?>
只要把变量 $result
设置为 InStockCheck
的 SOAP 调用即可。要提取回答 InStockQuantity
,请使用清单 10 中的代码。
清单 10. 提取答案
...$result = $client->lInStockCheck($params);$answer = $result->lInStockQuantity;?>
现在了解了如何传输和接收简单 SOAP 请求和响应。稍后,将制作带有层次结构的更复杂的 SOAP 请求。
回页首
处理故障
故障可能由于各种原因而发生。要想自行捕捉故障而不使用异常,并把故障显示到屏幕上,请使用以下 PHP 代码。
清单 11. 处理 SOAP 故障
...$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;}?>
如果您这边或服务器端发生了问题,SOAP 响应中就会返回故障,那么使用上面的代码就可以得到通知。故障看起来就像正常的 SOAP 响应一样。但是,变量 faultstring
包含故障发生的原因。
获得内容
如何构建店面并显示商品
第 5 页, 总 共 12 页文档选项
对本教程的评价
帮助我们改进这些内容
设计店面架构
这一节将讨论店面架构的设计。它将指导 Web 站点模板的创建,模板包括:显示的标题,分类使用的侧面板,在分类中进行搜索的搜索框,以及页面底部的页脚。
处理点:storeFront.php
既然已经介绍了 Web 服务,现在就开始设计店面。为店面创建一个根目录,并创建一个文件:storeFront.php
。开始编写它的代码,如清单 12 所示。
清单 12. 处理请求和显示店面
Welcome to TylerCo., where you will find great value and great service!Guaranteed! Please browse the products on our Web site by clicking on one of the categories to the left");...require(‘footer.php‘);?>
上面的代码介绍店面。随后当选择了某个分类时,就会调用方法与 Amazon ECS 连接,并显示返回的分类商品或与搜索条件对应的商品。
回页首
主链接和标题
storeFront.php
这个文件用来转发和接收应用程序的所有请求,这是创建店面要显示的余下内容所需要的。创建名为 header.php
的文件,把它放到 storeFront.php
的同一目录中。开始编写它的代码,如清单 13 所示。
清单 13. 主链接和标题
‘.$title.‘ ‘);if(!isset($_GET[‘keyword‘]) && !isset($_GET[‘category‘])){ print("Home");}else{ print("Home");}...
在这里输出了标题,而且如果需要的话,还会输出主链接。如果 Web 浏览器被指向 storeFront.php
,而不是某个关键字或分类,那么只会显示 Home
这个文本。但是,如果正在浏览分类,那么会显示这个链接,在链接上点击,会清空 GET
字符串中的变量并回到主页。
回页首
侧面板:分类
接下来,需要一些浏览用的分类。我们从五个分类开始:Baby、Computers、Outdoor Living、Software 和 Sporting Goods。继续处理 header.php
,添加如清单 14 所示的代码。
清单 14. 显示分类链接
...print(‘‘.$title.‘
< /center> Categories Baby
Computers
Outdoor Living
Software
Sporting Goods
‘);...
清单 14 创建的侧面板将容纳分类链接。当客户点击其中一个分类时,会在 URL 中设置这个分类和 displayCat
(要求显示当前分类的值)。这样,应用程序就能用 GET
数组处理变量并显示适当的商品和信息。
图 5 显示了具有分类链接的当前店面。
图 5. 显示分类链接
分类链接显示在左侧面板中。现在转到对在分类上点击的处理。
processGETString
将把当前变量放在 GET
数组中,根据店面中的每次点击添加变量的值。这很重要,这样客户每次在店面中点击时,他目前的数据就不会丢失。把这个函数放在 functions.php
中,如清单 15 所示。
清单 15. 处理和返回 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;}
这个函数把当前的所有变量合并成一个变量,用来创建链接,这样就可以把变量的值从一个链接传递到下一个链接。作为参数传递的 $vetoString
变量(值为 cadikepa
)用作指示:如果这个变量存在,它的值就不被传播。这在用户想转换分类时很重要。使用 displayCat
可以显示新的分类。关键字和 pagenum
变量需要一起被丢弃。
请点击 Baby
分类,注意 URL 中的当前分类和 displayCat
值:
http://localhost.localdomain/amazon_ecs_part1/storeFront.php? category=Baby&displayCat=Baby
现在点击 Computers 分类.
http://localhost.localdomain/amazon_ecs_part1/storeFront.php? category=PCHardware&displayCat=Computers
可以看到旧的分类和 displayCat
值没有被传播。这是因为通过传递 ‘ca‘ 取消分类并且传递 ‘di‘ 取消 displayCat
,processGETString()
函数已经取消了它们。
回页首
侧面板:搜索框
现在已经设置了浏览分类的功能。接下来,要添加功能,创建一个搜索框,在当前分类中进行搜索,继续使用 header.php
,如清单 16 所示。
清单 16. 显示搜索框
...
‘);if(isset($_GET[‘category‘])){ print(‘ Search within
this category
‘);...
清单 16 的 HTML 代码会显示一个搜索框。一旦按下了 Search 按钮,就会提交输入的关键字,同时当前 displayCat
和分类变量也会作为隐含输入提交。这将允许应用程序处理数据,并把适当的商品作为结果显示出来。
请点击某个分类链接,查看带有搜索框的当前店面,如图 6 所示。
图 6. 显示搜索框
搜索框在左侧面板中显示,有一个按钮。在 搜索商品 一节中将介绍在分类中搜索商品。现在转入主内容区域。
回页首
主内容区域:设置和内容
到了教程的这一部分,侧面板即将完成。在第 2 部分中还会添加其他一些东西,所以请一定要阅读那一部分。
现在,要设置主内容区域,稍后将在这里显示从 Amazon 返回的商品。这部分代码会结束侧面板并开始主内容区域:
print(‘
‘);
主内容区域的内容是用来显示的。在做这件事之前,需要完成页脚。
回页首
页脚:站点信息
页脚是一个相当简单的文件,如果日后需要,可以做得更复杂。创建 footer.php
文件,并把它放在与 header.php
相同的目录中。把以下示例代码放在这个文件中,如清单 17 所示。
清单 17: 显示站点和版权信息
Copyright 2005, TylerCo.
Product/information and pictures Copyright Amazon