• 0
Sign in to follow this  
Hernandez Carlos David

problema 403 token

Question

Array
(
    [body] => stdClass Object
        (
            [message] => access_token.invalid
            [error] => Invalid OAuth access token.
            [status] => 403
            [cause] => Array
                (
 Muy buenos dias,tengo un problema con la SDK de mercado libre,la utilizo todo bien me autentifica pero a la hora de publicar (listar) un producto me sale este error, 

me dice que el token es invalido , lose pero cuando me autentifico me genera mi token mi refres token , utilizo la sdk y con heroku , se que ustedes con sus años de experiencia podria darme una solución a mi problema .

posd: Utilizo el  example login.php  y utilizo la sdk de mercado libre en php .

Share this post


Link to post
Share on other sites

11 answers to this question

Recommended Posts

  • 0

Hola tuve el mismo problema, en mi caso el error era que al mandar el parámetro access_token escribo acces_token con una sola s y eso genero todo el conflicto. no se capaz te sirve. saludos y éxitos.

 

Edited by DIGITALMENTE.COM.AR

Share this post


Link to post
Share on other sites
  • 0

<div class="row">
                <div class="col-sm-6 col-md-6">
                    <h3>oAuth</h3>
                    <p>First authenticate yourself. Authentication is the key to get the most ouf Mercado Libre's API.</p>

                    <?php
                    $meli = new Meli($appId, $secretKey);

                    if($_GET['code'] || $_SESSION['access_token']) {

                        // If code exist and session is empty
                        if($_GET['code'] && !($_SESSION['access_token'])) {
                            // If the code was in get parameter we authorize
                            $user = $meli->authorize($_GET['code'], $redirectURI);

                            // Now we create the sessions with the authenticated user
                            $_SESSION['access_token'] = $user['body']->access_token;
                            $_SESSION['expires_in'] = time() + $user['body']->expires_in;
                            $_SESSION['refresh_token'] = $user['body']->refresh_token;
                        } else {
                            // We can check if the access token in invalid checking the time
                            if($_SESSION['expires_in'] < time()) {
                                try {
                                    // Make the refresh proccess
                                    $refresh = $meli->refreshAccessToken();

                                    // Now we create the sessions with the new parameters
                                    $_SESSION['access_token'] = $refresh['body']->access_token;
                                    $_SESSION['expires_in'] = time() + $refresh['body']->expires_in;
                                    $_SESSION['refresh_token'] = $refresh['body']->refresh_token;
                                } catch (Exception $e) {
                                    echo "Exception: ",  $e->getMessage(), "\n";
                                }
                            }
                        }

                        echo '<pre>';
                            print_r($_SESSION);
                        echo '</pre>';

                    } else {
                        echo '<p><a alt="Login using MercadoLibre oAuth 2.0" class="btn" href="' . $meli->getAuthUrl($redirectURI, Meli::$AUTH_URL[$siteId]) . '">Authenticate</a></p>';
                    }
                    ?>

                </div>
                <div class="col-sm-6 col-md-6">
                    <h3>Get site</h3>
                    <p>Make a simple GET to <a href="https://api.mercadolibre.com/sites">sites resource</a> with your <b>$site_id</b> to obtain information about a a site. Like id, name, currencies, categories, and other settings.</p>
                    <p><a class="btn" href="../examples/example_get.php">GET</a></p>
                </div>
            </div>
            <hr>
            <div class="row">
                <div class="col-md-6">
                    <h3>Publish an Item</h3>
                    <p>
                        This is a example of how to list an item in <b>MLB</b> (Brasil).
                       <br /> <b>You need to be authenticated to make it work.</b>
                       <br /> To be able to list an item in another country, <a href="https://github.com/mercadolibre/php-sdk/blob/master/examples/example_list_item.php">please update this file</a>, with values according to the site Id where your app works, like <b>category_id</b> and <b>currency</b>.
                     <br />
                    </p>
                    <pre class="pre-item">
                        "title" => "Celular PHONE 7 ",
                        "category_id" => "MPE1648",
                        "price" => 10,
                        "currency_id" => "PEN",
                        "available_quantity" => 1,
                        "buying_mode" => "buy_it_now",
                        "listing_type_id" => "free",
                        "condition" => "new",
                        "description" => "Item de Teste. Mercado Libre's PHP SDK.",
                        "video_id" => "Q6dsRpVyyWs",
                        "warranty" => "12 month",
                        "pictures" => array(
                            array(
                                "source" => "https://upload.wikimedia.org/wikipedia/commons/thumb/6/64/IPhone_7_Plus_Jet_Black.svg/440px-IPhone_7_Plus_Jet_Black.svg.png"
                            ),
                            array(
                                "source" => "https://upload.wikimedia.org/wikipedia/commons/thumb/b/bc/IPhone7.jpg/440px-IPhone7.jpg"
                            )
                          )
                        )
                    </pre>

                    <?php
                    $meli = new Meli($appId, $secretKey);

                    if($_GET['code'] && $_GET['publish_item']) {

                        // If the code was in get parameter we authorize
                        $user = $meli->authorize($_GET['code'], $redirectURI);

                        // Now we create the sessions with the authenticated user
                        $_SESSION['access_token'] = $user['body']->access_token;
                        $_SESSION['expires_in'] = $user['body']->expires_in;
                        $_SESSION['refresh_token'] = $user['body']->refresh_token;

                        // We can check if the access token in invalid checking the time
                        if($_SESSION['expires_in'] + time() + 1 < time()) {
                            try {
                                print_r($meli->refreshAccessToken());
                            } catch (Exception $e) {
                                echo "Exception: ",  $e->getMessage(), "\n";
                            }
                        }

                        // We construct the item to POST
                        $item = array(
                            "title" => "Computación ",
                            "category_id" => "MPE1648",
                            "price" => 8,
                            "currency_id" => "PEN",
                            "available_quantity" => 1,
                            "buying_mode" => "buy_it_now",
                            "listing_type_id" => "free",
                            "condition" => "new",
                            "description" => "Item de Teste. Mercado Libre's PHP SDK.",
                            "video_id" => "",
                            "warranty" => "12 month",
                            "pictures" => array(
                                array(
                                    "source" => "https://upload.wikimedia.org/wikipedia/commons/thumb/6/64/IPhone_7_Plus_Jet_Black.svg/440px-IPhone_7_Plus_Jet_Black.svg.png"
                                ),
                                array(
                                    "source" => "https://upload.wikimedia.org/wikipedia/commons/thumb/b/bc/IPhone7.jpg/440px-IPhone7.jpg"
                                )
                              )
                            );
                        
                        $response = $meli->post('/items', $item, array('access_token' => $_SESSION['access_token']));

                        // We call the post request to list a item
                        echo "<h4>Response</h4>";
                        echo '<pre class="pre-item">';
                        print_r ($response);
                        echo '</pre>';

                        echo "<h4>Success! Your test item was listed!</h4>";
                        echo "<p>Go to the permalink to see how it's looking in our site.</p>";
                        echo '<a target="_blank" href="'.$response["body"]->permalink.'">'.$response["body"]->permalink.'</a><br />';

                    } else if($_GET['code']) {
                        echo '<p><a alt="Publish Item" class="btn" href="/?code='.$_GET['code'].'&publish_item=ok">Publish Item</a></p>';
                    } else {
                        echo '<p><a alt="Publish Item" class="btn disable" href="#">Publish Item</a> </p>';
                    }
                    ?>

                </div>

                <div class="col-md-6">
                    <h3>Get started!</h3>
                    <p>Now you know how easy it is to get information from our API. Check the rest of the examples on the SDK, and modify them as you like in order to List an item, update it, and other actions.</p>
                    <p><a class="btn" href="https://github.com/mercadolibre/php-sdk/tree/master/examples">More examples</a></p>
                </div>
            </div>

            <hr>

Share this post


Link to post
Share on other sites
  • 0

tengo el mismo problema ese es mi codigo de mi sdk php alguien podria ayudarme necesito presentar mi trabajo es como una tesis para mi instituto :(

Share this post


Link to post
Share on other sites
  • 0

Has intentado usar postman para hacerlo manualmente antes? Descargalo y haces un post a api.mercadolibre.com/items/

Y de echo creo que tu error esta en el post del sdk

$response = $meli->post('/items', $item, array('access_token' => $_SESSION['access_token']));

Y debe de ir asi:

$response = $meli->post('/items/', $item, array('access_token' => $_SESSION['access_token']));

El SDK ni Mercadolibre son los del problema, nosotros somos los que tenemos mal el codigo.

Por favor revisen su codigo, una coma o una barrita no amerita abrir un hilo en el foro.

 

Saludos

 

Share this post


Link to post
Share on other sites
  • 0
23 hours ago, Fernando Aguirre said:

Has intentado usar postman para hacerlo manualmente antes? Descargalo y haces un post a api.mercadolibre.com/items/

Y de echo creo que tu error esta en el post del sdk


$response = $meli->post('/items', $item, array('access_token' => $_SESSION['access_token']));

Y debe de ir asi:

$response = $meli->post('/items/', $item, array('access_token' => $_SESSION['access_token']));

El SDK ni Mercadolibre son los del problema, nosotros somos los que tenemos mal el codigo.

Por favor revisen su codigo, una coma o una barrita no amerita abrir un hilo en el foro.

 

Saludos

amigo realice lo que dijiste tienes  razon me sale el mismo error cuando coloco api.mercadolibre.com/items/ en postman pero por otra parte lo del 

$response = $meli->post('/items/', $item, array('access_token' => $_SESSION['access_token']));

el error persiste el error no es un ; o , como mencionas claro que para eso si no es necesario armar un hilo en el foro .

{
    "message": "access_token.invalid",
    "error": "Invalid OAuth access token.",
    "status": 403,
    "cause": []
}

en otra cosa  que te doy la razón es que si el error esta en la post 

 

Share this post


Link to post
Share on other sites
  • 0

Has intentado hacerlo directamente en Postman?

O es mas, has la prueba insertando el token directamente, es decir, obten el token y lo pones directamente en el post.

Si estas seguro que estas obteniendo el token?

Share this post


Link to post
Share on other sites
  • 0

el token si me cambia varia cada vez que quiero colgar un producto ??

Ahora me e confundido mas el problema es en la post  api.mercadolibre.com/items/

Share this post


Link to post
Share on other sites
  • 0

No, el token sera el mismo por 6 horas, mira has un print_r a la $_SESSION y ahi va a salirte el token.

Ahora solo te vas a la documentacion de la API y lees un poco en el apartado de publicar un articulo.

Saludos

Share this post


Link to post
Share on other sites
  • 0
10 hours ago, anthony said:

el token si me cambia varia cada vez que quiero colgar un producto ??

Ahora me e confundido mas el problema es en la post  api.mercadolibre.com/items/

recomendo que estude sobre oAuth 2.0 para comprender el fluxo

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this