Skip to content

Commit

Permalink
Merge pull request #566 from Zhenya-Trainee/feature/AC-903
Browse files Browse the repository at this point in the history
Add custom checker status
  • Loading branch information
bessudnov authored May 28, 2024
2 parents 5f42040 + 27bdc0e commit b9ffea2
Show file tree
Hide file tree
Showing 3 changed files with 66 additions and 1 deletion.
22 changes: 22 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -123,6 +123,28 @@ $apiClient = new \AmoCRM\Client\AmoCRMApiClient($clientId, $clientSecret, $redir
$apiClient = $apiClient->setUserAgnet('App Name');
```

### Установка кастомного callback-обработчика ответа от сервера
Начиная с версии 1.9.0 появилась возможность устанавливать callback-обработчик ответа от сервера.

Вы можете установить функцию-callback на событие обработки ответа, если есть необходимость в дополнительной логике (например логировать ответ от сервера или же переопределить обработку 204 кода ответа).

Если нет необходимости в отработке стандартной логики обработки ответа, то callback должен возвращать true

```php
$apiClient = new \AmoCRM\Client\AmoCRMApiClient($clientId, $clientSecret, $redirectUri);

$this->apiClient
->setCheckHttpStatusCallback(
function (ResponseInterface $response, $decodedBody) {
if ($response->getStatusCode() === 204) {
return true;
}

$this->logger->info('Response: ', $decodedBody);
}
);
```


## Авторизация с долгоживущим токеном
Не так давно в amoCRM появилась возможность создавать долгоживущие токены. Их можно легко использовать с этой библиотекой.
Expand Down
23 changes: 23 additions & 0 deletions src/AmoCRM/Client/AmoCRMApiClient.php
Original file line number Diff line number Diff line change
Expand Up @@ -91,6 +91,11 @@ class AmoCRMApiClient
*/
private $refreshAccessTokenCallback;

/**
* @var callable|null
*/
private $checkHttpStatusCallback;

/**
* AmoCRMApiClient constructor.
*
Expand Down Expand Up @@ -199,6 +204,20 @@ public function setRefreshAccessTokenCallback(callable $callable): self
return $this;
}

/**
* Устанавливаем callback, который будет вызван при обработке ответа от сервера.
* Если нет необходимости в отработке стандартной логики обработки ответа, то callback должен возвращать true
*
* @param callable $callable
* @return $this
*/
public function setCheckHttpStatusCallback(callable $callable): self
{
$this->checkHttpStatusCallback = $callable;

return $this;
}

/**
* Метод строит объект для совершения запросов для сервисов сущностей
*
Expand Down Expand Up @@ -235,6 +254,10 @@ function (AccessToken $accessToken, string $baseAccountDomain) use ($oAuthClient
$request->setRefreshAccessTokenCallback($this->refreshAccessTokenCallback);
}

if ($this->checkHttpStatusCallback !== null) {
$request->setCustomCheckStatusCallback($this->checkHttpStatusCallback);
}

return $request;
}

Expand Down
22 changes: 21 additions & 1 deletion src/AmoCRM/Client/AmoCRMApiRequest.php
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ class AmoCRMApiRequest
public const CONNECT_TIMEOUT = 5;
public const REQUEST_TIMEOUT = 20;
//TODO Do not forget to change this on each release
public const LIBRARY_VERSION = '1.8.1';
public const LIBRARY_VERSION = '1.9.0';
public const USER_AGENT = 'amoCRM-API-Library/' . self::LIBRARY_VERSION;

public const SUCCESS_STATUSES = [
Expand Down Expand Up @@ -112,6 +112,11 @@ class AmoCRMApiRequest
*/
private $refreshAccessTokenCallback;

/**
* @var callable|null
*/
private $customCheckHttpStatusCallback;

/**
* AmoCRMApiRequest constructor.
*
Expand Down Expand Up @@ -141,6 +146,12 @@ public function setRefreshAccessTokenCallback(callable $callback): void
$this->refreshAccessTokenCallback = $callback;
}

public function setCustomCheckStatusCallback(callable $callback): void
{
$this->customCheckHttpStatusCallback = $callback;
}


/**
* Обновляем в библиотеке oAuth access токен по refresh
* @throws AmoCRMoAuthApiException
Expand Down Expand Up @@ -569,6 +580,15 @@ public function get(
protected function checkHttpStatus(ResponseInterface $response, $decodedBody = []): void
{
$this->lastResponseCode = $response->getStatusCode();

if (
$this->customCheckHttpStatusCallback !== null
&& is_callable($this->customCheckHttpStatusCallback)
&& ($this->customCheckHttpStatusCallback)($response, $decodedBody) === true
) {
return;
}

if ((int)$response->getStatusCode() === StatusCodeInterface::STATUS_UNAUTHORIZED) {
throw new AmoCRMoAuthApiException(
"Unauthorized",
Expand Down

0 comments on commit b9ffea2

Please sign in to comment.