meraproject/vendor/amocrm/amocrm-api-library/examples/get_token.php
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

61 lines
1.7 KiB
PHP

<?php
include_once __DIR__ . '/bootstrap.php';
session_start();
if (isset($_GET['referer'])) {
$apiClient->setAccountBaseDomain($_GET['referer']);
}
if (!isset($_GET['code'])) {
$state = bin2hex(random_bytes(16));
$_SESSION['oauth2state'] = $state;
if (isset($_GET['button'])) {
echo $apiClient->getOAuthClient()->getOAuthButton(
[
'title' => 'Установить интеграцию',
'compact' => true,
'class_name' => 'className',
'color' => 'default',
'error_callback' => 'handleOauthError',
'state' => $state,
]
);
die;
} else {
$authorizationUrl = $apiClient->getOAuthClient()->getAuthorizeUrl([
'state' => $state,
'mode' => 'post_message',
]);
header('Location: ' . $authorizationUrl);
die;
}
} elseif (empty($_GET['state']) || empty($_SESSION['oauth2state']) || ($_GET['state'] !== $_SESSION['oauth2state'])) {
unset($_SESSION['oauth2state']);
exit('Invalid state');
}
/**
* Ловим обратный код
*/
try {
$accessToken = $apiClient->getOAuthClient()->getAccessTokenByCode($_GET['code']);
if (!$accessToken->hasExpired()) {
saveToken([
'accessToken' => $accessToken->getToken(),
'refreshToken' => $accessToken->getRefreshToken(),
'expires' => $accessToken->getExpires(),
'baseDomain' => $apiClient->getAccountBaseDomain(),
]);
}
} catch (Exception $e) {
die((string)$e);
}
$ownerDetails = $apiClient->getOAuthClient()->getResourceOwner($accessToken);
printf('Hello, %s!', $ownerDetails->getName());