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