Neur0toxine
5f69051859
* New module structure (refactoring) * Simple serializer and deserializer with models, new architecture * Move logic to strategies * Partial api client facade implementation (full implementation is not necessary for now) * Loyalty feature installer * Sms verification order (#167) * Make updater self-sufficient * Fix for order submit & fix for incorrect component rendering in the constructor * Fix for loyalty personal area error handling * Fix for cart component identity * Fix for softlock when customer cannot be registered in loyalty Co-authored-by: Сергей Чазов <45812598+Chazovs@users.noreply.github.com> Co-authored-by: Sergey Chazov <oitv18@gmail.com>
187 lines
6.9 KiB
PHP
187 lines
6.9 KiB
PHP
<?php
|
|
|
|
/**
|
|
* PHP version 7.1
|
|
*
|
|
* @category Integration
|
|
* @package Intaro\RetailCrm\Component\ApiClient
|
|
* @author RetailCRM <integration@retailcrm.ru>
|
|
* @license MIT
|
|
* @link http://retailcrm.ru
|
|
* @see http://retailcrm.ru/docs
|
|
*/
|
|
|
|
namespace Intaro\RetailCrm\Component\ApiClient\Traits;
|
|
|
|
use Intaro\RetailCrm\Component\Json\Deserializer;
|
|
use Intaro\RetailCrm\Component\Json\Serializer;
|
|
use Intaro\RetailCrm\Model\Api\Request\Customers\CustomersCreateRequest;
|
|
use Intaro\RetailCrm\Model\Api\Request\Customers\CustomersEditRequest;
|
|
use Intaro\RetailCrm\Model\Api\Request\Customers\CustomersFixExternalIdsRequest;
|
|
use Intaro\RetailCrm\Model\Api\Request\Customers\CustomersGetRequest;
|
|
use Intaro\RetailCrm\Model\Api\Request\Customers\CustomersHistoryRequest;
|
|
use Intaro\RetailCrm\Model\Api\Request\Customers\CustomersListRequest;
|
|
use Intaro\RetailCrm\Model\Api\Request\Customers\CustomersNotesCreateRequest;
|
|
use Intaro\RetailCrm\Model\Api\Request\Customers\CustomersNotesRequest;
|
|
use Intaro\RetailCrm\Model\Api\Request\Customers\CustomersUploadRequest;
|
|
use Intaro\RetailCrm\Model\Api\Response\CreateResponse;
|
|
use Intaro\RetailCrm\Model\Api\Response\CustomerChangeResponse;
|
|
use Intaro\RetailCrm\Model\Api\Response\CustomerResponse;
|
|
use Intaro\RetailCrm\Model\Api\Response\CustomersNotesResponse;
|
|
use Intaro\RetailCrm\Model\Api\Response\CustomersResponse;
|
|
use Intaro\RetailCrm\Model\Api\Response\CustomersUploadResponse;
|
|
use Intaro\RetailCrm\Model\Api\Response\HistoryResponse;
|
|
use Intaro\RetailCrm\Model\Api\Response\OperationResponse;
|
|
|
|
trait CustomersTrait
|
|
{
|
|
/**
|
|
* Returns filtered customers list
|
|
*
|
|
* @param \Intaro\RetailCrm\Model\Api\Request\Customers\CustomersListRequest $request
|
|
*
|
|
* @return CustomersResponse|null
|
|
*/
|
|
public function customersList(CustomersListRequest $request): ?CustomersResponse
|
|
{
|
|
$serialized = Serializer::serializeArray($request);
|
|
$response = $this->client->customersList(
|
|
Serializer::serializeArray($serialized['filter'] ?? []),
|
|
$request->page,
|
|
$request->limit
|
|
);
|
|
|
|
return Deserializer::deserializeArray($response->getResponseBody(), CustomersResponse::class);
|
|
}
|
|
|
|
/**
|
|
* Returns filtered corporate customers notes list
|
|
*
|
|
* @param \Intaro\RetailCrm\Model\Api\Request\Customers\CustomersNotesRequest $request
|
|
*
|
|
* @return \Intaro\RetailCrm\Model\Api\Response\CustomersNotesResponse|null
|
|
*/
|
|
public function customersNotesList(CustomersNotesRequest $request): ?CustomersNotesResponse
|
|
{
|
|
$response = $this->client->customersNotesList(
|
|
Serializer::serializeArray($request->filter),
|
|
$request->page,
|
|
$request->limit
|
|
);
|
|
|
|
return Deserializer::deserializeArray($response->getResponseBody(), CustomersNotesResponse::class);
|
|
}
|
|
|
|
/**
|
|
* Create customer note
|
|
*
|
|
* @param \Intaro\RetailCrm\Model\Api\Request\Customers\CustomersNotesCreateRequest $request
|
|
*
|
|
* @return \Intaro\RetailCrm\Model\Api\Response\CreateResponse|null
|
|
*/
|
|
public function customersNotesCreate(CustomersNotesCreateRequest $request): ?CreateResponse
|
|
{
|
|
$response = $this->client->customersNotesCreate(
|
|
Serializer::serializeArray($request->note),
|
|
$request->site
|
|
);
|
|
|
|
return Deserializer::deserializeArray($response->getResponseBody(), CreateResponse::class);
|
|
}
|
|
|
|
/**
|
|
* Create customer
|
|
*
|
|
* @param \Intaro\RetailCrm\Model\Api\Request\Customers\CustomersCreateRequest $request
|
|
*
|
|
* @return \Intaro\RetailCrm\Model\Api\Response\CustomerChangeResponse|null
|
|
*/
|
|
public function customersCreate(CustomersCreateRequest $request): ?CustomerChangeResponse
|
|
{
|
|
$serialized = Serializer::serializeArray($request);
|
|
$response = $this->client->customersCreate($serialized['customer'] ?? [], $request->site);
|
|
|
|
return Deserializer::deserializeArray($response->getResponseBody(), CustomerChangeResponse::class);
|
|
}
|
|
|
|
/**
|
|
* Save customer IDs' (id and externalId) association in the CRM
|
|
*
|
|
* @param CustomersFixExternalIdsRequest $ids ids mapping
|
|
*
|
|
* @throws \InvalidArgumentException
|
|
* @throws \RetailCrm\Exception\CurlException
|
|
* @throws \RetailCrm\Exception\InvalidJsonException
|
|
*
|
|
* @return OperationResponse|null
|
|
*/
|
|
public function customersFixExternalIds(CustomersFixExternalIdsRequest $ids): ?OperationResponse
|
|
{
|
|
$request = $this->client->customersFixExternalIds(Serializer::serializeArray($ids)['customers']);
|
|
|
|
return Deserializer::deserializeArray($request->getResponseBody(), OperationResponse::class);
|
|
}
|
|
|
|
/**
|
|
* Upload array of the customers
|
|
*
|
|
* @param \Intaro\RetailCrm\Model\Api\Request\Customers\CustomersUploadRequest $request
|
|
*
|
|
* @return \Intaro\RetailCrm\Model\Api\Response\CustomersUploadResponse|null
|
|
*/
|
|
public function customersUpload(CustomersUploadRequest $request): ?CustomersUploadResponse
|
|
{
|
|
$serialized = Serializer::serializeArray($request);
|
|
$response = $this->client->customersUpload($serialized['customers'] ?? [], $request->site);
|
|
|
|
return Deserializer::deserializeArray($response->getResponseBody(), CustomersUploadResponse::class);
|
|
}
|
|
|
|
/**
|
|
* Get customer by id or externalId
|
|
*
|
|
* @param \Intaro\RetailCrm\Model\Api\Request\Customers\CustomersGetRequest $request
|
|
*
|
|
* @return \Intaro\RetailCrm\Model\Api\Response\CustomerResponse|null
|
|
*/
|
|
public function customersGet(CustomersGetRequest $request): ?CustomerResponse
|
|
{
|
|
$response = $this->client->customersGet((string) $request->id, $request->by, $request->site);
|
|
|
|
return Deserializer::deserializeArray($response->getResponseBody(), CustomerResponse::class);
|
|
}
|
|
|
|
/**
|
|
* Edit customer
|
|
*
|
|
* @param \Intaro\RetailCrm\Model\Api\Request\Customers\CustomersEditRequest $request
|
|
*
|
|
* @return CustomerChangeResponse|null
|
|
*/
|
|
public function customersEdit(CustomersEditRequest $request): ?CustomerChangeResponse
|
|
{
|
|
$serialized = Serializer::serializeArray($request);
|
|
$response = $this->client->customersEdit($serialized['customer'], $request->by, $request->site);
|
|
|
|
return Deserializer::deserializeArray($response->getResponseBody(), CustomerChangeResponse::class);
|
|
}
|
|
|
|
/**
|
|
* Get customers history
|
|
*
|
|
* @param \Intaro\RetailCrm\Model\Api\Request\Customers\CustomersHistoryRequest $request
|
|
*
|
|
* @return HistoryResponse|null
|
|
*/
|
|
public function customersHistory(CustomersHistoryRequest $request): ?HistoryResponse
|
|
{
|
|
$response = $this->client->customersHistory(
|
|
Serializer::serializeArray($request->filter),
|
|
$request->page,
|
|
$request->limit
|
|
);
|
|
|
|
return Deserializer::deserializeArray($response->getResponseBody(), HistoryResponse::class);
|
|
}
|
|
}
|