-
Notifications
You must be signed in to change notification settings - Fork 17
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Проблема с получением refresh_token #5
Comments
Проблема, судя по описанию, в другом |
Это неудачно скрыл данные. Руками я могу получить токен, могу сделать refresh, если собрать запрос как в документации. А вот с библиотекой беда :-( |
Думаю к концу недели посмотрю подробно Issue и PR |
Мне кажется в запросе передается неверный идентификатор клиента. У меня проблем с получением нового |
Кстати, вроде такой ответ может прийти, если повторно используешь |
"У меня такая же нога и не болит" (с). Как минимум сейчас библиотека не соотвествует документации. И поддерка ничего не может сделать и подсказать что не так. Есть догадки, что проблема в экранировании. Взяв запрос генерируемый бибилиотекой и засунув curl и поигравшись с экранированием, мне удалось пропихнуть запрос. Но это чертова магия и нет документации. Добавив простой провайдер для формирования запроса проблема уходит |
Документация и правда местами расстраивает, но покажи код работы с библиотекой |
Сомневаюсь в такой процедуре <?php
namespace UnitPay\PartnerBundle\Manager\OAuth2\Provider;
use AmoCRM\OAuth2\Client\Provider\AmoCRM;
use Exception;
use League\OAuth2\Client\Grant\AuthorizationCode;
use League\OAuth2\Client\Grant\RefreshToken;
use Psr\Log\LoggerInterface;
use UnitPay\PartnerBundle\Exception\OAuth2Exception;
class OAuth2AmoCRM extends OAuth2Abstract
{
public const SERVICE = 3;
private const REQUEST_TIMEOUT = 15;
private const BASE_DOMAIN = 'salesunitpayru.amocrm.ru';
/**
* @var AmoCRM
*/
private $provider;
/**
* @var LoggerInterface
*/
private $logger;
private $params = [];
public function __construct(array $params, LoggerInterface $logger)
{
$this->logger = $logger;
$this->params = $params;
$this->provider = new AmoCRM(
[
'clientId' => $params['id'],
'clientSecret' => $params['secret'],
'redirectUri' => 'https://unitpay.ru',
'timeout' => self::REQUEST_TIMEOUT,
]
);
$this->provider->setBaseDomain(self::BASE_DOMAIN);
parent::__construct($params);
}
public function getAuthUrl(string $hash): string
{
return $this->provider->getAuthorizationUrl();
}
public function getAuthToken(string $code): array
{
try {
$accessToken = $this->provider->getAccessToken(
new AuthorizationCode(),
['code' => $this->params['code']]
);
return $accessToken->getValues();
} catch (Exception $exception) {
$this->logger->error(__METHOD__ . ' exception request token error:' . $exception->getMessage());
throw new OAuth2Exception('exception request token', OAuth2Exception::CODE_MANAGER_INVALID_ARGUMENT);
}
}
public function refreshToken(array $token): array
{
try {
$accessToken = $this->provider->getAccessToken(
new RefreshToken(),
['refresh_token' => $token['refresh_token']]
);
return [
'access_token' => $accessToken->getToken(),
'refresh_token' => $accessToken->getRefreshToken(),
'expires_in' => $accessToken->getExpires(),
];
} catch (Exception $exception) {
$this->logger->error(
__METHOD__ . ' exception request token error: ' . $exception->getCode() . $exception->getMessage()
);
throw new OAuth2Exception('exception request token', OAuth2Exception::CODE_MANAGER_INVALID_ARGUMENT);
}
}
} |
Проверил следующим простым скриптом: $provider = new \AmoCRM\OAuth2\Client\Provider\AmoCRM(
[
'clientId' => '0ef011a7-xxx,
'clientSecret' => 'xxxx',
'redirectUri' => 'https://xxxx.ru',
'timeout' => 5,
]
);
$provider->setBaseDomain('shard151.amocrm.ru');
$refreshToken = 'xxxx';
$accessToken = $provider->getAccessToken(
new \League\OAuth2\Client\Grant\RefreshToken(),
['refresh_token' => $refreshToken]
);
var_dump([
'access_token' => $accessToken->getToken(),
'refresh_token' => $accessToken->getRefreshToken(),
'expires_in' => $accessToken->getExpires(),
]); Всё отработало корректно. Данное API вообще принимает и application/x-www-form-urlencoded и application/json Сделал запрос cURL, тоже всё корректно:
Нужно больше информации, чтобы разобрать кейс Вообще ошибка Client authentication failed выбрасывается в следующих случаях:
|
Скорей всего в этом и проблема. Добавь к url вконце / и будет та же ошибка
Осталось понять почему через json и application/x-www-form-urlencode разное поведение. Первый токен запрашивался с /, а теперь без / вконце работает. p.s. Спасибо, так уже можно работать, url исправить не проблема. |
еще бы добавить библиотеки на других языках, кроме php - вот тогда будет красота! |
тут победить php и синхронизировать его с документацией не могут. Какие другие языки? |
Помог первый пункт, спасибо! Отличался URI при получении первичных токенов и при запросе рефреша. |
Столкнулся с проблемой что API запросы бибилиотеки не соотвествуют документации https://www.amocrm.ru/developers/content/oauth/step-by-step
Требуется такой запрос с посылкой JSON и он работает
Но библиотека формирует запрос и он не работает
И сервер отвечает ошибкой
The text was updated successfully, but these errors were encountered: