retailcrm/api-client-php
Composer 安装命令:
composer require retailcrm/api-client-php
包简介
PHP client for RetailCRM API
关键字:
README 文档
README
RetailCRM API PHP client
This is the PHP RetailCRM API client. This library allows using of the actual API version.
You can find more info in the documentation.
Table of contents
Requirements
- PHP 7.3 and above
- PHP's cURL support
- PHP's JSON support
- Any HTTP client compatible with PSR-18 (covered by the installation instructions).
- Any HTTP factories implementation compatible with PSR-17 (covered by the installation instructions).
- Any HTTP messages implementation compatible with PSR-7 (covered by the installation instructions).
- Other dependencies listed in the
composer.json(covered by the installation instructions)
Installation
Follow those steps to install the library:
- Download and install Composer package manager.
- Install the library from the Packagist by executing this command:
composer require retailcrm/api-client-php:"~6.0"
During the installation you will see this message. Press 'y' when you do:
civicrm/composer-compile-plugin contains a Composer plugin which is currently not in your allow-plugins config. See https://getcomposer.org/allow-plugins Do you trust "civicrm/composer-compile-plugin" to execute code and wish to enable it now? (writes "allow-plugins" to composer.json) [y,n,d,?]
After that, you may see a message which will look like this:
The following packages have new compilation tasks:
- retailcrm/api-client-php has 1 task
Allow these packages to compile? ([y]es, [a]lways, [n]o, [l]ist, [h]elp)
Choose [a]lways by typing a and pressing Enter.
Note: You should choose 'y' and [a]lways if your application is using CI/CD pipeline because the interactive terminal is not available
in that environment which will result in failure during the dependencies installation.
If you chose something else during the installation and API client doesn't work properly - please follow these instructions to fix the problem.
- Include the autoloader if it's not included, or you didn't use Composer before.
require 'path/to/vendor/autoload.php';
Replace path/to/vendor/autoload.php with the correct path to Composer's autoload.php.
Note: API client uses php-http/curl-client and nyholm/psr7 as a PSR-18, PSR-17 and PSR-7 implementation.
You can replace those implementations during installation by installing this library with the implementation of your choice, like this:
composer require symfony/http-client guzzlehttp/psr7 retailcrm/api-client-php:"~6.0"
More information about that can be found in the documentation.
Usage
Firstly, you should initialize the Client. The easiest way to do this is to use the SimpleClientFactory:
$client = \RetailCrm\Api\Factory\SimpleClientFactory::createClient('https://test.retailcrm.pro', 'apiKey');
The client is separated into several resource groups, all of which are accessible through the Client's public properties. You can call API methods from those groups like this:
$client->api->credentials();
For example, you can retrieve the customers list:
$client = \RetailCrm\Api\Factory\SimpleClientFactory::createClient('https://test.retailcrm.pro', 'apiKey'); $response = $client->customers->list();
Or the orders list:
$client = \RetailCrm\Api\Factory\SimpleClientFactory::createClient('https://test.retailcrm.pro', 'apiKey'); $response = $client->orders->list();
To handle errors you must use two types of exceptions:
RetailCrm\Api\Interfaces\ClientExceptionInterfacefor the network or other runtime errors.RetailCrm\Api\Interfaces\ApiExceptionInterfacefor the errors from the API.
An example of error handling can be found in the next section of this document.
Each resource group is responsible for the corresponding API section. For example, costs resource group provide methods
for costs manipulation and loyalty resource group allows interacting with loyalty programs, accounts, bonuses, etc.
Use annotations to determine which DTOs you need for sending the requests. If annotations are not provided by your IDE - you probably should configure them. It'll ease your work with this (and any other) library a lot.
More information about the usage including examples can be found in the documentation.
Examples
Listing orders:
<?php use RetailCrm\Api\Interfaces\ClientExceptionInterface; use RetailCrm\Api\Factory\SimpleClientFactory; use RetailCrm\Api\Interfaces\ApiExceptionInterface; use RetailCrm\Api\Model\Entity\CustomersCorporate\CustomerCorporate; $client = SimpleClientFactory::createClient('https://test.retailcrm.pro', 'apiKey'); try { $response = $client->orders->list(); } catch (ApiExceptionInterface | ClientExceptionInterface $exception) { echo $exception; // Every ApiExceptionInterface and ClientExceptionInterface instance implements __toString() method. exit(-1); } foreach ($response->orders as $order) { printf("Order ID: %d\n", $order->id); printf("First name: %s\n", $order->firstName); printf("Last name: %s\n", $order->lastName); printf("Patronymic: %s\n", $order->patronymic); printf("Phone #1: %s\n", $order->phone); printf("Phone #2: %s\n", $order->additionalPhone); printf("E-Mail: %s\n", $order->email); if ($order->customer instanceof CustomerCorporate) { echo "Customer type: corporate\n"; } else { echo "Customer type: individual\n"; } foreach ($order->items as $item) { echo PHP_EOL; printf("Product name: %s\n", $item->productName); printf("Quantity: %d\n", $item->quantity); printf("Initial price: %f\n", $item->initialPrice); } echo PHP_EOL; printf("Discount: %f\n", $order->discountManualAmount); printf("Total: %f\n", $order->totalSumm); echo PHP_EOL; }
Fetching a specific order by it's ID:
<?php use RetailCrm\Api\Interfaces\ClientExceptionInterface; use RetailCrm\Api\Interfaces\ApiExceptionInterface; use RetailCrm\Api\Enum\ByIdentifier; use RetailCrm\Api\Factory\SimpleClientFactory; use RetailCrm\Api\Model\Request\BySiteRequest; $client = SimpleClientFactory::createClient('https://test.retailcrm.pro', 'apiKey'); try { $response = $client->orders->get(1234, new BySiteRequest(ByIdentifier::ID, 'site')); } catch (ApiExceptionInterface | ClientExceptionInterface $exception) { echo $exception; // Every ApiExceptionInterface instance should implement __toString() method. exit(-1); } echo 'Order: ' . print_r($response->order, true);
Creating a new customer:
<?php use RetailCrm\Api\Interfaces\ClientExceptionInterface; use RetailCrm\Api\Interfaces\ApiExceptionInterface; use RetailCrm\Api\Factory\SimpleClientFactory; use RetailCrm\Api\Model\Entity\Customers\Customer; use RetailCrm\Api\Model\Request\Customers\CustomersCreateRequest; $client = SimpleClientFactory::createClient('https://test.retailcrm.pro', 'apiKey'); $request = new CustomersCreateRequest(); $request->customer = new Customer(); $request->site = 'aliexpress'; $request->customer->email = 'john.doe@example.com'; $request->customer->firstName = 'John'; $request->customer->lastName = 'Doe'; try { $response = $client->customers->create($request); } catch (ApiExceptionInterface | ClientExceptionInterface $exception) { echo $exception; // Every ApiExceptionInterface instance should implement __toString() method. exit(-1); } echo 'Customer ID: ' . $response->id;
Creating a task for the user with a specific email:
<?php use RetailCrm\Api\Interfaces\ClientExceptionInterface; use RetailCrm\Api\Interfaces\ApiExceptionInterface; use RetailCrm\Api\Factory\SimpleClientFactory; use RetailCrm\Api\Model\Entity\Tasks\Task;use RetailCrm\Api\Model\Filter\Users\ApiUserFilter; use RetailCrm\Api\Model\Request\Tasks\TasksCreateRequest; use RetailCrm\Api\Model\Request\Users\UsersRequest; $client = SimpleClientFactory::createClient('https://test.retailcrm.pro', 'apiKey'); $usersRequest = new UsersRequest(); $usersRequest->filter = new ApiUserFilter(); $usersRequest->filter->email = 'john.doe@example.com'; try { $usersResponse = $client->users->list($usersRequest); } catch (ApiExceptionInterface | ClientExceptionInterface $exception) { echo $exception; // Every ApiExceptionInterface instance should implement __toString() method. exit(-1); } if (0 === count($usersResponse->users)) { echo 'User is not found.'; exit(-1); } $tasksRequest = new TasksCreateRequest(); $tasksRequest->task = new Task(); $tasksRequest->task->performerId = $usersResponse->users[0]->id; $tasksRequest->task->text = 'Do something!'; $tasksRequest->site = 'site'; try { $tasksResponse = $client->tasks->create($tasksRequest); } catch (ApiExceptionInterface | ClientExceptionInterface $exception) { echo $exception; // Every ApiExceptionInterface instance should implement __toString() method. exit(-1); } echo 'Created task with ID: ' . $tasksResponse->id;
The error handling in the examples above is good enough for real production usage.
You can safely assume that ApiExceptionInterface is an error from the API, and ClientExceptionInterface is a client error
(e.g. network error or any runtime error, use HttpClientException to catch only PSR-18 client errors).
However, you can implement more complex error handling if you want.
Also, both ApiExceptionInterface and ClientExceptionInterface implements __toString(). This means that you can just
convert those exceptions to string and put the results into logs without any special treatment for the exception data.
More examples can be found in the documentation.
You can use a PSR-14 compatible event dispatcher to receive events from the client. See documentation for details.
Notes
This library uses HTTPlug abstractions. Visit official documentation to learn more about it.
retailcrm/api-client-php 适用场景与选型建议
retailcrm/api-client-php 是一款 基于 PHP 开发的 Composer 扩展包,目前已累计 1.09M 次下载、GitHub Stars 达 66, 最近一次更新时间为 2014 年 11 月 06 日, 在 PHP 生态内属于活跃度较高的组件。
它主要适用于以下技术方向: 「rest」 「api」 「retailCRM」 等业务场景。在实际项目中,围绕这些方向常见需要落地的问题包括:接口对接、性能调优、并发安全、与既有框架(Laravel / ThinkPHP / Yii / Webman 等)的兼容适配,以及生产环境的日志埋点与稳定性保障。
我们在过去多个企业项目中使用过 retailcrm/api-client-php 或与其功能相近的方案,如果你在选型或落地过程中遇到问题,例如 版本兼容、二次改造、私有化封装、与内部系统对接、生产 BUG 排查,欢迎联系我们协助评估。
基于 retailcrm/api-client-php 在你已有业务上做功能扩展、字段裁剪、UI 适配、与内部账号 / 权限 / 日志系统的深度对接。
线上偶发问题、内存泄漏、慢查询、并发异常等排查修复;针对高流量场景做缓存、队列、索引层面的调优。
承接完整的项目从需求 → 设计 → 开发 → 上线 → 长期运维;也可按月提供技术保姆服务。
与 retailcrm/api-client-php 相关的其它包
同方向 / 同关键字的高下载量 PHP Composer 包推荐,方便对比选型:
URL validator for RetailCRM
PHP client for MG Bot API
A PSR-7 compatible library for making CRUD API endpoints
Api bundle
PHP client for RetailCRM API
A Flickr wrapper to allow you to call the Flickr api with Guzzle as the backend.Goal is to have 100% Flickr api coverage rather than just upload/display photos (currently at 23%).
统计信息
- 总下载量: 1.09M
- 月度下载量: 0
- 日度下载量: 0
- 收藏数: 68
- 点击次数: 12
- 依赖项目数: 3
- 推荐数: 0
其他信息
- 授权协议: MIT
- 更新时间: 2014-11-06