Так что в основном я использую свой сайт Drupal 8 для взаимодействия со сторонним API с помощью OAuth2. Я успешно получаю код, переданный в / oauth / callback, я просто не знаю, как преобразовать этот код в токен доступа.
Мой текущий модуль выглядит примерно так:
AMBE_module.routing.yml:
AMBE_module.token:
path: '/oauth/callback'
defaults:
_controller:'\Drupal\ABME_module\Controller\AccessTokenController::token'
_title: 'Get token'
requirements:
_permission: 'access content'
У меня есть этот контроллер, который, как я думал, брал код авторизации с URL-адреса и использовал его для получения токена доступа, но он не работает:
<?php
namespace Drupal\ABME_module\Controller;
use Drupal\Core\Controller\ControllerBase;
class AccessTokenController extends ControllerBase {
public function token() {
$client_id = 'xxxx';
$client_secret = 'xxxx';
$redirect_uri= "http://my-site/oauth/callback";
$authorization_code = $_GET['code'];
if(!$authorization_code){
die('something went wrong!');
}
$url = 'https://api.com/oauth2/token';
$data = array(
'client_id' => $client_id,
'client_secret' => $client_secret,
'redirect_uri' => $redirect_uri,
'code' => $authorization_code
);
$options = array(
'http' => array(
'header' => "Content-type: application/json\r\n",
'method' => 'POST',
'content' => json_encode($data)
)
);
$context = stream_context_create($options);
$result = file_get_contents($url, false, $context);
var_dump($result);
return $result;
}
}
Я получаю эту ошибку:
Контроллер должен вернуть ответ (дано ложно)
Я нашел код для этого здесь
Если кто-нибудь может мне помочь, я был бы очень благодарен. Я пытался всю ночь! Я не уверен, что я делаю неправильно, но я просмотрел весь интернет, пытаясь решить эту проблему.