php - Intento llamar a un método indefinido llamado "validateAccessToken" cuando se usa la api-library de Mautic en Symfony
oauth (1)
Estoy intentando usar mautic / api-library dentro de mi proyecto Symfony. Estoy usando Symfony 2.8.9 con PHP 5.6.14.
Incluí el proyecto api-library en el compositor y en el archivo autoload.php. En mi controlador, he declarado api-library classes:
use Mautic/Auth/ApiAuth;
use Mautic/Auth/OAuth;
Y traté de obtener un token de mi instalación de mautic:
$settings = array(
''baseUrl'' => ''http://mymauticinstallation.com'',
''version'' => ''OAuth1a'',
''clientKey'' => ''myCLientKey'',
''clientSecret'' => ''mySecretClient'',
''callback'' => ''https://api.mysymfonyapp.com/''
);
$auth = new ApiAuth();
$auth->newAuth($settings);
if ($auth->validateAccessToken()) {
if ($auth->accessTokenUpdated()) {
$accessTokenData = $auth->getAccessTokenData();
}
}
Pero cuando trato de ejecutar este código, obtengo este error en mi consola:
request.CRITICAL: Uncaught PHP Exception Symfony/Component/Debug/Exception/UndefinedMethodException: "Attempted to call an undefined method named "validateAccessToken" of class "Mautic/Auth/ApiAuth"
Mirando dentro de la clase ApiAuth de ApiAuth
, el método newAuth
usa una instanciación por reflexión:
public function newAuth($parameters = array(), $authMethod = ''OAuth'')
{
$class = ''Mautic//Auth//'.$authMethod;
$authObject = new $class();
...
return $authObject;
}
De acuerdo con el mensaje de excepción, la reflexión no devuelve una instancia de clase OAuth. ¿Alguien sabe lo que está causando esto? Lo he verificado y estoy cumpliendo con los requisitos mínimos para PHP y Symfony. ¿Hay algo relacionado con la versión y la reflexión de PHP?
Gracias por adelantado.
request.CRITICAL: Uncaught PHP Exception Symfony/Component/Debug/Exception/UndefinedMethodException: "Attempted to call an undefined method named "validateAccessToken" of class "Mautic/Auth/ApiAuth"
Significa que el método validateAccessToken
no existe en Mautic/Auth/ApiAuth
, de hecho no está definido allí, sino en Mautic/Auth/OAuth
.
// Mautic/Auth/ApiAuth
public function newAuth($parameters = array(), $authMethod = ''OAuth'')
{
$class = ''Mautic//Auth//'.$authMethod;
$authObject = new $class();
...
return $authObject; // <-- it returns an object, use it!
}
Entonces, lo que te perdiste es almacenar el objeto devuelto en una variable para usarlo
$apiAuth = new ApiAuth();
$auth = $apiAuth->newAuth($settings);
if ($auth->validateAccessToken()) {
if ($auth->accessTokenUpdated()) {
$accessTokenData = $auth->getAccessTokenData();
}
}