retailcrm/aliexpress-top-client

此包已被弃用且不再维护。未建议替代包。

AliExpress TOP API客户端实现。

v1.1.2 2021-07-09 10:44 UTC

This package is auto-updated.

Last update: 2023-04-09 14:27:35 UTC


README

Build Status Coverage Latest stable PHP from Packagist

AliExpress TOP API客户端

AliExpress TOP API客户端实现。

使用方法

  1. 该库底层使用php-http/httplug。如果您不想关心细节,只需通过Composer安装库及其依赖项即可。
composer require php-http/curl-client nyholm/psr7 php-http/message retailcrm/aliexpress-top-client

有关这些第三方库的详细信息以及为什么需要安装它们,请参阅此处

  1. 使用TopClientFactory实例化客户端
use RetailCrm\Component\AppData;
use RetailCrm\Factory\TopClientFactory;

$client = TopClientFactory::createClient(
    AppData::OVERSEAS_ENDPOINT,
    'appKey',
    'appSecret',
    'session token here'
);
  1. 创建并填写请求数据。所有请求和响应使用相同的命名:命名空间的一部分是请求名称中的第一个单词,其余部分在请求DTO类名称中。请求位于RetailCrm\Model\Request命名空间下,响应可以在RetailCrm\Model\Response命名空间中找到。以下以taobao.httpdns.get请求为例。其第一个单词是taobao,因此,此请求可以在RetailCrm\Model\Request\Taobao命名空间下找到,其类名为HttpDnsGetRequest。您可以使用此代码实例化它
use RetailCrm\Model\Request\Taobao\HttpDnsGetRequest;

$request = new HttpDnsGetRequest();
  1. 使用TopClient::sendRequestTopClient::sendAuthenticatedRequest(您不能在不使用认证器的情况下通过客户端发送认证请求)发送请求。taobao.httpdns.get可以发送如下
/** @var \RetailCrm\Model\Response\Taobao\HttpDnsGetResponse $response */
$response = $client->sendRequest(new HttpDnsGetRequest());

此特定请求不需要授权,因此,可以通过TopClient::sendRequest方法发送。对于需要授权的任何其他请求,您必须使用TopClient::sendAuthenticatedRequest方法(此类请求的示例为aliexpress.solution.seller.category.tree.query,其全限定类名为\RetailCrm\Model\Request\AliExpress\SolutionSellerCategoryTreeQuery)。

友好提示。使用响应类型注解。返回响应的实际客户端方法实际上返回的是ResponseInterface(不是PSR的)。实际响应类型将由请求模型确定。除非您为响应变量放置适当的类型注解,否则您的IDE将无法识别任何响应选项。

自定义

该库底层使用容器模式。您可以使用ContainerBuilder传递额外的依赖项。例如

use Http\Client\Curl\Client;
use RetailCrm\Component\AppData;
use RetailCrm\Component\Environment;
use Nyholm\Psr7\Factory\Psr17Factory;
use RetailCrm\Builder\TopClientBuilder;
use RetailCrm\Builder\ContainerBuilder;
use RetailCrm\Component\Logger\StdoutLogger;
use RetailCrm\Component\Authenticator\TokenAuthenticator;

$client = new Client();
$logger = new StdoutLogger();
$factory = new Psr17Factory();
$authenticator = new TokenAuthenticator('token');
$appData = new AppData(AppData::OVERSEAS_ENDPOINT, 'appKey', 'appSecret');
$container = ContainerBuilder::create()
            ->setEnv(Environment::TEST)
            ->setClient($client)
            ->setLogger($logger)
            ->setStreamFactory($factory)
            ->setRequestFactory($factory)
            ->setUriFactory($factory)
            ->build();
$client = TopClientBuilder::create()
            ->setContainer($container)
            ->setAppData($appData)
            ->build();

记录器应实现Psr\Log\LoggerInterface(PSR-3),HTTP客户端应实现Psr\Http\TopClient\TopClientInterface(PSR-18),HTTP对象必须符合PSR-7。如果您想使用自己的容器,则它必须符合PSR-11。强烈建议不要这样做,因为它将使与您自己的应用程序和DI系统的集成更加容易。

不使用TopClientFactory的客户端初始化的最简单示例如下

use RetailCrm\Component\AppData;
use RetailCrm\Builder\TopClientBuilder;
use RetailCrm\Builder\ContainerBuilder;
use RetailCrm\Component\Authenticator\TokenAuthenticator;

$appData = new AppData(AppData::OVERSEAS_ENDPOINT, 'appKey', 'appSecret');
$client = TopClientBuilder::create()
            ->setContainer(ContainerBuilder::create()->build())
            ->setAppData($appData)
            ->setAuthenticator(new TokenAuthenticator('session token here'))
            ->build();

实际上,TopClientFactory在底层工作方式就是这样。