102 lines
4.2 KiB
Markdown
102 lines
4.2 KiB
Markdown
# 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, то будет совершен запрос за информацией об аккаунте с сохраненным ранее токеном.
|