注意: zendservice-amazon 附带的演示不能按原样工作。请求必须包含您的 App ID、密钥和关联标签,演示脚本默认情况下不这样做。我花了一段时间才弄明白,如果没有这些,所有查询都会抛出一个异常,说 HTTP 响应状态为 400。不幸的是,该异常没有说明缺少哪些参数的响应正文。
这里有一些代码可以帮助您开始使用 ZF2 和ZendService\Amazon
.
首先,让我概述一下我将在此示例中放置文件的目录结构:
testing
|-Zend
|---Crypt
|---Escaper
|---Http
|---I18n
|---Loader
|----+AutoloaderFactory.php
|----+... more files
|----+StandardAutoloader.php
|-----Exception
|---Stdlib
|---Uri
|---Validator
|-ZendRest
|-ZendService
|---Amazon
|-----Authentication
|-------Exception
|-----Ec2
|-------Exception
|-----Exception
|-----S3
|-------Exception
|-----SimpleDb
|-------Exception
|-----Sqs
|-------Exception
|----+AbstractAmazon.php
|----+...more files
|----+SimilarProduct.php
|-+test.php
要点是我创建了一个名为的目录testing
,我们将在其中放置 ZF2 自动加载器以及 Amazon 类及其依赖项。正在测试的是一个Zend
包含自动加载器的文件夹(在 中Loader
)以及服务ZendService
所在的文件夹Amazon
。
首先,我们需要从 ZF2 获取自动加载器的副本。您遇到问题的部分原因是因为您使用的是与 ZF2 不兼容的 ZF1 自动装载机。要从 ZF2 获取 Autoloader,您可以下载最新的 ZF2 包并将Loader
目录从目录复制ZendFramework-2.0.x/library/Zend/
到Zend
我们在testing
目录中创建的文件夹中。
现在我们有了自动加载器文件,让我们获取 Amazon 服务文件。关于如何使用 Composer 获取最新包我会写一个详细的答案,但现在我将解释如何手动获取它。要获取可用 ZF2 包的完整列表,请在http://packages.zendframework.com/packages.json加载 JSON 文件, 在其中找到 ,zendframework/zendservice-amazon
确定列表中可用的最高版本,并获取相应的 dist。编辑截至 2013 年 7 月 11 日,这是最新的zendservice-amazon包。
从 中的library
目录ZendService_Amazon-2.0.2.zip
,将整个ZendService
目录复制到testing
目录中。您现在拥有 ZF2 Amazon 服务文件。
接下来,照顾依赖关系。从 ZF2 库中,将目录、、Crypt
、Escaper
、Http
、I18n
、Json
和复制到.Stdlib
Uri
Validator
Zend
testing
您还需要ZendRest包。将ZendRest
文件夹从library
ZendRest 包复制到testing/ZendRest
.
现在来看一些代码。使用以下内容test.php
在文件夹内创建:testing
<?php
require_once './Zend/Loader/StandardAutoloader.php';
$autoloader = new Zend\Loader\StandardAutoloader(array(
'namespaces' => array(
'Zend' => dirname(__FILE__) . '/Zend',
'ZendRest' => dirname(__FILE__) . '/ZendRest',
'ZendService' => dirname(__FILE__) . '/ZendService',
),
'fallback_autoloader' => true));
$autoloader->register();
$tag = 'prdesign-20'; // replace with your Amazon app ID
$appId = '1JT2V3QNEHDAMKYR5F02'; // replace w/ your access key from https://portal.aws.amazon.com/gp/aws/securityCredentials
$secretKey = 'Qgjeiw39f8UNzjJgeerrgDs1a193du/v7djDAtn/x';
$query = new ZendService\Amazon\Query($appId, 'US', $secretKey);
$query->Category('Books')->Keywords('PHP')->AssociateTag($tag);
$result = $query->search();
foreach($result as $item): ?>
<div class="item">
<a href="<?php echo $item->DetailPageURL ?>" target="_blank"><?php echo $item->Title ?></a>
by <?php if (is_array($item->Author)): ?>
<?php echo implode(', ', $item->Author) ?>
<?php else: ?>
<?php echo $item->Author ?>
<?php endif; ?>
</div>
<?php endforeach; ?>
首先,我们来自ZF2require_once
的类。StandardAutoloader
一旦注册了自动加载器,这是您必须手动包含的唯一类。
接下来,我们创建一个新的自动加载器并传递一些选项。这告诉自动加载器在命名空间中的类Zend
和ZendService
所在的位置。我们告诉自动加载器它们位于当前目录的相应文件夹中。根据需要更改dirname(__FILE__)
为正确的路径。该fallback_autoloader
选项告诉自动加载器在include_path
.
然后调用$autoloader->register();
实际上注册了我们在 PHP 中设置的自动加载器。自动装载机的设置现已完成。
接下来的 3 行定义了 API 的一些必需参数。
接下来的 3 行很简单,我们现在创建一个新实例ZendService\Amazon\Query
并传递我们的 Amazon 应用 ID 和密钥。然后,我们通过指定在 Books 中搜索Category
并将 设置Keywords
为 PHP 来构建查询。我们还添加了所需的 AssociateTag。最后,我们执行搜索。
我还没有使用过ZendService\Amazon
,所以我无法提供有关使用该类的详细说明,但包含的演示脚本应该可以帮助您开始向 Amazon 发送基本查询并处理结果。
希望有帮助。