retailcrm / aliexpress-top-client
此包已被弃用且不再维护。未建议替代包。
AliExpress TOP API客户端实现。
v1.1.2
2021-07-09 10:44 UTC
Requires
- php: >=7.3.0
- ext-curl: *
- ext-json: *
- cache/array-adapter: ^1.0
- doctrine/annotations: ^1.10
- doctrine/cache: ^1.10
- jms/serializer: ^3.9
- php-http/client-implementation: ^1.0
- php-http/discovery: ^1.12
- php-http/httplug: ^2.2
- php-http/message-factory: ^1.0
- php-http/multipart-stream-builder: ^1.1
- psr/cache: ^1.0
- psr/http-client: ^1.0
- psr/http-message: ^1.0
- psr/log: ^1.1
- symfony/expression-language: ^4.1|^5.1
- symfony/validator: ^4.1|^5.1
Requires (Dev)
- brainmaestro/composer-git-hooks: ^2.8
- dealerdirect/phpcodesniffer-composer-installer: ^0.7.0
- nyholm/psr7: ^1.3
- php-http/curl-client: ^2.1
- php-http/message: ^1.9
- php-http/mock-client: ^1.4
- phpcompatibility/php-compatibility: *
- phpmd/phpmd: ^2.9
- phpunit/phpunit: ^9.3
- squizlabs/php_codesniffer: ^3.5
- vlucas/phpdotenv: ^5.2
README
AliExpress TOP API客户端
AliExpress TOP API客户端实现。
使用方法
- 该库底层使用
php-http/httplug
。如果您不想关心细节,只需通过Composer安装库及其依赖项即可。
composer require php-http/curl-client nyholm/psr7 php-http/message retailcrm/aliexpress-top-client
有关这些第三方库的详细信息以及为什么需要安装它们,请参阅此处。
- 使用
TopClientFactory
实例化客户端
use RetailCrm\Component\AppData; use RetailCrm\Factory\TopClientFactory; $client = TopClientFactory::createClient( AppData::OVERSEAS_ENDPOINT, 'appKey', 'appSecret', 'session token here' );
- 创建并填写请求数据。所有请求和响应使用相同的命名:命名空间的一部分是请求名称中的第一个单词,其余部分在请求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();
- 使用
TopClient::sendRequest
或TopClient::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
在底层工作方式就是这样。