meraproject/vendor/amocrm/oauth2-amocrm/README.md
keboss-m 5c21d25d45 Initial commit: Merakomis portal, Docker stack and user-reader API.
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-24 11:04:05 +03:00

102 lines
4.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# amoCRM Provider для OAuth 2.0 Client
В данном пакете представлена поддержка протокола OAuth 2.0 в amoCRM для библитеки PHP League [OAuth 2.0 Client](https://github.com/thephpleague/oauth2-client).
## Установка
Установить можно с помощью composer:
```
composer require amocrm/oauth2-amocrm
```
## Использование
Использование идентично использованию The League's OAuth client, используя `AmoCRM\OAuth2\Client\Provider\AmoCRM` в качестве провайдера.
### Обработка кода авторизации (Authorization Code)
```php
$provider = new AmoCRM([
'clientId' => 'YOUR_CLIENT_ID',
'clientSecret' => 'YOUR_CLIENT_SECRET',
'redirectUri' => 'http://your-redirect-uri',
]);
if (isset($_GET['code']) && $_GET['code']) {
//Вызов функции setBaseDomain требуется для установки контектс аккаунта.
if (isset($_GET['referer'])) {
$provider->setBaseDomain($_GET['referer']);
}
$token = $provider->getAccessToken('authorization_code', [
'code' => $_GET['code']
]);
//todo сохраняем access, refresh токены и привязку к аккаунту и возможно пользователю
/** @var \AmoCRM\OAuth2\Client\Provider\AmoCRMResourceOwner $ownerDetails */
$ownerDetails = $provider->getResourceOwner($token);
printf('Hello, %s!', $ownerDetails->getName());
}
```
### Обновление access токена
```php
$provider = new AmoCRM([
'clientId' => 'YOUR_CLIENT_ID',
'clientSecret' => 'YOUR_CLIENT_SECRET',
'redirectUri' => 'http://your-redirect-uri',
]);
//todo получение токена из хранилища
$provider->setBaseDomain($token['baseDomain']);
/**
* Проверяем активен ли токен и делаем запрос или обновляем токен
*/
if (time() >= $token['expires']) {
/**
* Получаем токен по рефрешу
*/
try {
$accessToken = $provider->getAccessToken(new League\OAuth2\Client\Grant\RefreshToken(), [
'refresh_token' => $token['refreshToken'],
]);
//todo сохраняем новые access, refresh токены и привязку к аккаунту и возможно пользователю
} catch (Exception $e) {
die((string)$e);
}
}
//todo повторяем исходный запрос
```
### Кнопка на сайт ###
Для удобства можно разместить кнопку на сайт для простой установки созданной интеграции.
```
<div class="button"></div>
<script
id="amocrm_oauth"
charset="utf-8"
data-client-id="xxxxxx-client-id-xxxxxx"
data-title="Добавить в amoCRM"
data-compact="false"
data-class-name="className"
data-color="red"
data-state="random string"
src="https://www.amocrm.ru/auth/button.js"
></script>
```
### Пример
В рамках данного репозитория имеется файл **example.php**, который реализует простейшую логику авторизации, сохранения токена, а также совершения запросов.
Для использования нужно указать корректные значения при создании провайдера в файле, а также Redirect URI в интеграции ведущий на вызов этого файла на вашем сервере.
Дальше для теста можно перейти на страницу example.php, после чего будет отображена кнопка для открытия модального окна автооризации приложения в amoCRM.
После получения доступов вы увидете имя пользователя на экране.
Если добавить GET параметр - request=1, то будет совершен запрос за информацией об аккаунте с сохраненным ранее токеном.