TwitterOAuth: excepción no detectada “Esta característica no está disponible temporalmente”

4 minutos de lectura

avatar de usuario
Manas Chaturvedi

Estoy trabajando en una aplicación en WordPress que permite a los usuarios iniciar sesión con sus cuentas de Twitter y luego los redirige a un formulario. Al enviar ese formulario, se envía un tweet al identificador de Twitter del usuario. estoy usando el de abraham twitteroauth para implementar Twitter OAuth.

El código fuente de la plantilla redirigida después de un inicio de sesión exitoso en Twitter:

<pre>
<?php
/*
 *Template Name: Callback 
*/

?>  
<?php

    session_start();
    require "twitteroauth/autoload.php";
    use Abraham\TwitterOAuth\TwitterOAuth;

    define('CONSUMER_KEY', "XXXXXXXXXXXXXXX");
    define('CONSUMER_SECRET', "XXXXXXXXXXXXXX");
    define('OAUTH_CALLBACK', " http://localhost/wordpress/index.php/callback/");

    $request_token = [];
    $request_token['oauth_token'] = $_SESSION['oauth_token'];
    $request_token['oauth_token_secret'] = $_SESSION['oauth_token_secret'];

    if (isset($_REQUEST['oauth_token']) && $request_token['oauth_token'] !== $_REQUEST['oauth_token'])
    {
        echo "Opps! Something went wrong!";
    }

    else
    {
        $connection = new TwitterOAuth(CONSUMER_KEY, CONSUMER_SECRET, $request_token['oauth_token'], $request_token['oauth_token_secret']);
        $access_token = $connection->oauth("oauth/access_token", array("oauth_verifier" => $_REQUEST['oauth_verifier']));

        //print_r($access_token);

        $_SESSION['access_token'] = $access_token;
    }

    $access_token = $_SESSION['access_token'];

    $connection = new TwitterOAuth(CONSUMER_KEY, CONSUMER_SECRET, $access_token['oauth_token'], $access_token['oauth_token_secret']);

    //$user = $connection->get("account/verify_credentials");

    //$response = $connection->post("statuses/update", array('status' => 'fsociety'))





    //$response = $tmhOAuth->request('POST', $tmhOAuth->url('1.1/statuses/update'), array(
                                                                        //'status' => 'Conceit to fall on parasol.'


?>


<script>

    var count = 0

    function addNewMessage(count)
        {       
                if(count > 5)
                {
                    window.alert("NO MORE THAN 5!");
                }
                else
                {
                    var celeb = document.createElement("input");
                    celeb.type = "text";
                    celeb.name = "tweet" + count;
                    celeb.placeholder = "Tweet" + " " + count;
                    celebrity.appendChild(celeb);

                    var date = document.createElement("input");
                    date.type = "datetime-local";
                    date.name = "date" + count;
                    date.placeholder = "message-date" + " " + count;
                    celebrity.appendChild(date);

                    celebrity.appendChild(document.createElement("br"));
                    celebrity.appendChild(document.createElement("br"));
                }
        }        

</script>

<form method = "POST" action = "">

    <fieldset>
        <a style = "color:red" onclick = "addNewMessage(++count)">Schedule a tweet</a>
        <div id = "celebrity"/>
    </fieldset>

    <br>
    <fieldset>
        <input type="hidden" name="submitted" id="submitted" value="true" />
        <?php wp_nonce_field( 'post_nonce', 'post_nonce_field' ); ?>
        <button type="submit"><?php _e('Add Campaign', 'framework') ?></button>
    </fieldset>


</form>


<?php



if ( isset( $_POST['submitted'] ))
{
    $response = $connection->post("statuses/update", array('status' => 'fsociety'));
}

?>

</pre>

Al enviar el formulario, utilizo el de Abraham twitteroauth para publicar un tweet en la línea de tiempo de Twitter del usuario, que he intentado implementar de la siguiente manera:

<?php



if ( isset( $_POST['submitted'] ))
{
    $response = $connection->post("statuses/update", array('status' => 'fsociety'));
}

?>

Sin embargo, este es el error que estoy encontrando:

Fatal error:  Uncaught exception 'Abraham\TwitterOAuth\TwitterOAuthException' with message 'This feature is temporarily unavailable' in /opt/lampp/htdocs/wordpress/wp-content/themes/twentyfifteen/tuto/twitteroauth/src/TwitterOAuth.php:137
Stack trace:
#0 /opt/lampp/htdocs/wordpress/wp-content/themes/twentyfifteen/tuto/callback.php(30): Abraham\TwitterOAuth\TwitterOAuth->oauth('oauth/access_to...', Array)
#1 /opt/lampp/htdocs/wordpress/wp-includes/template-loader.php(74): include('/opt/lampp/htdo...')
#2 /opt/lampp/htdocs/wordpress/wp-blog-header.php(16): require_once('/opt/lampp/htdo...')
#3 /opt/lampp/htdocs/wordpress/index.php(17): require('/opt/lampp/htdo...')
#4 {main}
  thrown in /opt/lampp/htdocs/wordpress/wp-content/themes/twentyfifteen/tuto/twitteroauth/src/TwitterOAuth.php on line 137

Intenté depurar imprimiendo el $access_tokeny de hecho obtengo un token único del proveedor de OAuth como se esperaba.

¿Qué parece estar mal con mi código y cómo podría evitar generar esa excepción?

Acabo de encontrar esto cuando estaba aprendiendo la API y haciendo llamadas a través de Postman. Parece que solo puede realizar una única llamada al punto final access_token con un token de solicitud en particular. Si esta llamada falla (o de hecho tiene éxito), todas las llamadas posteriores le darán el error “Esta función no está disponible temporalmente”.

Deberá regenerar los tokens de acceso a través de request_token y autorizar/autenticar los puntos finales después de la primera llamada.

  • trabajando para mi

    – zinsat

    4 de noviembre de 2021 a las 8:33

avatar de usuario
L. Dia

La excepción se lanza cuando la función oauth verifica si el código devuelto es 200. Acabo de encontrar el mismo problema y ahora funciona perfectamente: ¿Agregó una URL de devolución de llamada en la configuración de su aplicación? Twitter usa esta configuración> trabajando con localhost: 127.0.0.1/callback.php (luego use geteven (OAUTH_CALLBACK) en su definición OAUTH_CALLBACK) Luego use verificar_credenciales 🙂

Tuve el mismo problema porque la URL de autenticación no se renovó, por lo que cada dos veces que hice clic en la URL de autenticación, el token de acceso no era válido.

Agregué una función que renueva la URL de autenticación en cada clic en conectarse con tweeter.

esto resolvió el problema para mí, espero que ayude a otros.

¿Ha sido útil esta solución?

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Configurar y más información
Privacidad