From 4e88355a30ea5c3096a095a8476e6b34a7109cd7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=9C=D0=B8=D1=85=D0=B0=D0=B8=D0=BB=20=D0=A1=D0=B5=D0=BB?= =?UTF-8?q?=D0=B8=D0=B2=D0=B0=D0=BD=D0=BE=D0=B2?= Date: Fri, 26 Sep 2025 17:01:58 +0300 Subject: [PATCH] =?UTF-8?q?MBM-788=20=D0=BE=D0=B1=D0=BD=D0=BE=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=D0=B8=D0=B5=20=D0=B4=D0=BE=D0=BA=D1=83=D0=BC=D0=B5?= =?UTF-8?q?=D0=BD=D1=82=D0=B0=D1=86=D0=B8=D0=B8=20=D0=B4=D0=BB=D1=8F=20?= =?UTF-8?q?=D0=B7=D0=B0=D0=BF=D1=80=D0=BE=D1=81=D0=BE=D0=B2=20v3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/examples/send_request_to_v3.md | 39 ++++++++++++- docs/getting_started.md | 55 +++++++++++++++++++ .../Mindbox-Clients-MindboxClientV3.md | 38 ++++++++++++- tests/Clients/AbstractMindboxClientTest.php | 2 +- 4 files changed, 130 insertions(+), 4 deletions(-) diff --git a/docs/examples/send_request_to_v3.md b/docs/examples/send_request_to_v3.md index e801f2c..ae38b08 100644 --- a/docs/examples/send_request_to_v3.md +++ b/docs/examples/send_request_to_v3.md @@ -5,7 +5,7 @@ * method - HTTP метод запроса: 'POST', 'GET'; * operationName - название операции в Mindbox; * body - тело запроса в виде DTO, необязательный параметр; -* additionalUrl - дополнительный URL, конкатенируется с базовым URL: https://api.mindbox.ru/v3/operations/{additionalUrl}, необязательный параметр; +* additionalUrl - дополнительный URL, конкатенируется с базовым URL: https://{domain}.{domainZone}/v3/operations/{additionalUrl}, необязательный параметр; * queryParams - массив дополнительных GET параметров, необязательный параметр; * isSync - флаг, синхронный или асинхронный запрос, по умолчанию true (синхронный), необязательный параметр; * addDeviceUUID - флаг, добавлять ли DeviceUUID в запрос, по умолчанию true (добавляет DeviceUUID из куки mindboxDeviceUUID в query-параметры запроса и IP-адрес потребителя в заголовок X-Customer-IP), необязательный параметр. @@ -46,4 +46,41 @@ try { } catch (\Mindbox\Exceptions\MindboxClientException $e) { echo $e->getMessage(); } +``` +Для указания запроса на произвольный url mindbox следует следует использовать \Mindbox\Clients\MindboxClientV3 вместо фабрики + +## Пример отправки запроса на произвольны URL к API v3 +``` php +$logger = new \Mindbox\Loggers\MindboxFileLogger('{logsDir}'); +$httpClient = (new \Mindbox\HttpClients\HttpClientFactory())->createHttpClient('{timeout}', '{handlerName}'); + +$client = new \Mindbox\Clients\MindboxClientV3( + '{endpointId}', + '{secretKey}', + $httpClient, + $logger, + '{domainZone}' + '{domain}' +); + +$customer = new \Mindbox\DTO\V3\Requests\CustomerRequestDTO(); +$customer->setEmail('test@test.ru'); +$customer->setMobilePhone('79374134389'); +$customer->setId('bitrixId', '123456'); +$customer->setId('mindboxId', '1028'); + +$operation = new \Mindbox\DTO\V3\OperationDTO(); +$operation->setCustomer($customer); + +/* Формирование состава операции */ +try { + $response = $client + ->prepareRequest('POST', 'Website.AuthorizeCustomer', $operation, '', [], false, false) + ->sendRequest(); + + $requestBody = $response->getRequest()->getBody(); + $responseBody = $response->getBody(); +} catch (\Mindbox\Exceptions\MindboxClientException $e) { + echo $e->getMessage(); +} ``` \ No newline at end of file diff --git a/docs/getting_started.md b/docs/getting_started.md index a0955a7..6920174 100644 --- a/docs/getting_started.md +++ b/docs/getting_started.md @@ -56,6 +56,7 @@ require_once __DIR__ . '/path/to/mindboxSDK/vendor/autoload.php'; * endpointId - уникальный идентификатор сайта/мобильного приложения/и т.п. Значение нужно уточнить у менеджера Mindbox. * secretKey - секретный ключ, соответствующий endpointId. Значение нужно уточнить у менеджера Mindbox. * domain - домен, на который будут отправляться запросы к v2.1 API Mindbox: https://{domain}/v2.1/orders/. +* domainZone - доменная зона, на которую будут отправляться запросы к v3 API Mindbox: https://api.mindbox.{{domainZone}}/v3/operations/. Опциональные параметры: * timeout - таймаут соединения при выполнении HTTP запроса (в секундах). По умолчанию равен 5 секундам. @@ -71,6 +72,7 @@ $logger = new \Mindbox\Loggers\MindboxFileLogger('{logsDir}'); $mindbox = new \Mindbox\Mindbox([ 'endpointId' => '{endpointId}', 'secretKey' => '{secretKey}', + 'domain' => '{domain}', 'domainZone' => '{domainZone}', //'timeout' => '{timeout}', //'httpClient' => '{httpClient}', @@ -158,4 +160,57 @@ try { } catch (\Mindbox\Exceptions\MindboxClientException $e) { echo $e->getMessage(); } +``` + +## Пример отправки запроса на произвольны URL к API v3 +Обязательные параметры конфигурации SDK: +* endpointId - уникальный идентификатор сайта/мобильного приложения/и т.п. Значение нужно уточнить у менеджера Mindbox. +* secretKey - секретный ключ, соответствующий endpointId. Значение нужно уточнить у менеджера Mindbox. +* timeout - таймаут соединения при выполнении HTTP запроса (в секундах). По умолчанию равен 5 секундам. +* httpClient - назвавние клиента для отправки запроса ("curl", "stream"). По умолчанию curl, если установлено расширение ext-curl, иначе stream. +* logger - объект логгера, реализующий интерфейс \Psr\Log\LoggerInterface. +* domainZone - доменная зона ("ru", "api-ru", "cloud", "io") + + +Опциональные параметры: +* $domain - Домен API URL ("api.mindbox", "api.s.mindbox", "api.maestra") + +При передача домена, URL запроса формируется следующим образом: + +https://{domain}.{domainZone}/v3/operations/ + + +``` php +$logger = new \Mindbox\Loggers\MindboxFileLogger('{logsDir}'); +$httpClient = (new \Mindbox\HttpClients\HttpClientFactory())->createHttpClient('{timeout}', '{handlerName}'); + +$client = new \Mindbox\Clients\MindboxClientV3( + '{endpointId}', + '{secretKey}', + $httpClient, + $logger, + '{domainZone}' + '{domain}' +); + +$customer = new \Mindbox\DTO\V3\Requests\CustomerRequestDTO(); +$customer->setEmail('test@test.ru'); +$customer->setMobilePhone('79374134389'); +$customer->setId('bitrixId', '123456'); +$customer->setId('mindboxId', '1028'); + +$operation = new \Mindbox\DTO\V3\OperationDTO(); +$operation->setCustomer($customer); + +/* Формирование состава операции */ +try { + $response = $client + ->prepareRequest('POST', 'Website.AuthorizeCustomer', $operation, '', [], false, false) + ->sendRequest(); + + $requestBody = $response->getRequest()->getBody(); + $responseBody = $response->getBody(); +} catch (\Mindbox\Exceptions\MindboxClientException $e) { + echo $e->getMessage(); +} ``` \ No newline at end of file diff --git a/docs/structure/Mindbox-Clients-MindboxClientV3.md b/docs/structure/Mindbox-Clients-MindboxClientV3.md index 347a095..d590e4e 100644 --- a/docs/structure/Mindbox-Clients-MindboxClientV3.md +++ b/docs/structure/Mindbox-Clients-MindboxClientV3.md @@ -26,7 +26,7 @@ Constants ### BASE_V3_URL - const BASE_V3_URL = 'https://api.mindbox.ru/v3/operations/' + const BASE_V3_URL = 'https://{{url}}/v3/operations/' @@ -43,6 +43,13 @@ Constants Properties ---------- +### $url + + private string $url + + +* Visibility: **private** + ### $endpointId @@ -121,13 +128,23 @@ Properties * Visibility: **protected** +### $headers + + protected array $headers + + + + + +* Visibility: **protected** + Methods ------- ### __construct - mixed Mindbox\Clients\AbstractMindboxClient::__construct(string $secretKey, \Mindbox\HttpClients\IHttpClient $httpClient, \Psr\Log\LoggerInterface $logger) + mixed Mindbox\Clients\AbstractMindboxClient::__construct(string $secretKey, \Mindbox\HttpClients\IHttpClient $httpClient, \Psr\Log\LoggerInterface $logger, string $domainZone, string $domain) Конструктор AbstractMindboxClient. @@ -141,6 +158,8 @@ Methods * $secretKey **string** - <p>Секретный ключ.</p> * $httpClient **[Mindbox\HttpClients\IHttpClient](Mindbox-HttpClients-IHttpClient.md)** - <p>Экземпляр HTTP клиента.</p> * $logger **Psr\Log\LoggerInterface** - <p>Экземпляр логгера.</p> +* $domainZone **string** - <p>Доменная зона URL.</p> +* $domain **string** - <p>API url.</p> @@ -277,6 +296,21 @@ Methods * $rawBody **string** - <p>Сырое тело ответа.</p> +### getApiUrl + + string Mindbox\Clients\AbstractMindboxClient::getApiUrl(string $domain, string $domainZone) + +Преобразование API URL. + + + +* Visibility: **protected** +* + +#### Arguments +* $rawBody **string** - <p>Сырое тело ответа.</p> + + ### prepareRequest diff --git a/tests/Clients/AbstractMindboxClientTest.php b/tests/Clients/AbstractMindboxClientTest.php index f6f338b..4ab9348 100644 --- a/tests/Clients/AbstractMindboxClientTest.php +++ b/tests/Clients/AbstractMindboxClientTest.php @@ -67,7 +67,7 @@ public function setUp(): void $this->domainZone = $this->domainZone; $this->httpClientStub = $this->getHttpClientStub(); $this->loggerStub = $this->getLoggerStub(); - $this->client = $this->getClient($this->secret, $this->httpClientStub, $this->loggerStub, $this->domain); + $this->client = $this->getClient($this->secret, $this->httpClientStub, $this->loggerStub); $this->dtoStub = $this->getDTOStub(); }