• 0
Sign in to follow this  
cleyder

Autentificacion guardar

Question

Hola buen dia a todos. tengo una duda tengo 15 días tratando de buscar la forma de usar todo lo que me entrega  al momento de loguearme, mi problema radica que quiero subir algunos productos pero al actulizar pierdo el access token y tengo que darle retroceder para poder acceder otra ves al token estoy usando las librerías de php ya que todavía no entiendo como dejar el access token por lo menos 5 horas  y como hacer que pueda publicar algo por si solo. sin tanto rollo de access token y que tenga que actualizar cada 3 min. espero que si puedan ayudarme.

<?php


session_start();
require 'Meli/meli.php';
require 'configApp.php';
?>

    <!DOCTYPE html>
    <html lang="en" class="no-js">

    <head>
        <meta charset="utf-8">
        <meta http-equiv="X-UA-Compatible" content="IE=edge">
        <meta name="viewport" content="width=device-width,initial-scale=1">
        <meta name="description" content="Official PHP SDK for Mercado Libre's API.">
        <meta name="keywords" content="API, PHP, Mercado Libre, SDK, meli, integration, e-commerce">
        <title>Mercado Libre PHP SDK</title>
        <link rel="stylesheet" href="/getting-started/style.css" />
        <script src="script.js"></script>
    </head>

    <body>
        <form method="POST" action="https://iptvrenew.xyz">
            <input type="submit" name="Fenviar" value"REgresar"><br>
            </form>

        

        <main class="container">


            <hr>
            <div class="row">
                <div class="col-sm-6 col-md-6">
                    <h3>oAuth</h3>


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

                    if($_GET['code'] || $_SESSION['access_token']) {
                        
                        
                        // If code exist and session is empty
                        if($_GET['code']) {
                        
                            $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()) {
                                echo 'expires_in';
                                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>
            <hr>
            <div class="row">
                        <?php
        $enviado=false;
        $Vtitulo=null;
        $Vcategoria=null;
        $Vprecio=null;
        $Vcantidad=null;
        $Vdescription=null;
        $Vpictures=NULL;
        $Vpictures2=NULL;
        if(isset($_POST['Fenviar'])){
            $enviado=true;
            $Vtitulo=$_POST["Ftitulo"];
            $Vcategoria=$_POST['FCATEGORIA'];
            $Vprecio=$_POST['FPRECIO'];
            $Vcantidad=$_POST['Fcantidad'];
            $Vdescription=$_POST['Fdescription'];
            $Vpictures=$_POST['Fpictures'];
            $Vpictures2=$_POST['Fpictures2'];
            $Vprecio2 =sprintf('%02.2f',$Vprecio );
            echo $Vprecio2;
        }

        ?>
            
                    <form class="pre-item" method="post">
              
     ID
     </label>
     <input type="Titulo" name="FCATEGORIA" value='<?php echo $Vcategoria ?>'><br/>          
     TITLE
     <input type="Titulo" name="Ftitulo" value='<?php echo $Vtitulo ?>'><br/>

     <label>
    <label>
     PRECIO:
     </label>
     <input type="Titulo" name="FPRECIO" value='<?php echo $Vprecio ?>'><br/>
     <label>
     <label>
     Cantidad
     </label>
     <input type="Titulo" name="Fcantidad" value='<?php echo $Vcantidad ?>'><br/>
     <label>
              pictures:
     </label>
     <input type="text" name="Fpictures"/ value='<?php echo $Vpictures ?>'><br></br>
     <label>
    <label>
                      pictures2:
     </label>
     <input type="text" name="Fpictures2"/ value='<?php echo $Vpictures2 ?>'><br></br>
     <label>
    <label>
     description:
     </label>
     <textarea name="Fdescription" rows="10" cols="40" value='<?php echo $Vdescription ?>' ></textarea><br/>

         <button type="submit" name='Fenviar' >envio</button>
        

                   </form>
                    <?php
                    
                    $meli = new Meli($appId, $secretKey);
                    #Imprime el json
                    #var_dump($_POST);

                    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" => $Vtitulo,
        "category_id" => $Vcategoria,
        "price" => $Vprecio2,
        "currency_id" => "MXN",
        "available_quantity" => $Vcantidad,
        "buying_mode" => "buy_it_now",
        "listing_type_id" => "gold_special",
        "condition" => "new",
        "description" => array ("plain_text" => $Vdescription),
        "warranty" => "12 month",
        "pictures" => array(
            array(
                "source" =>$Vpictures
            ),
            array(
                "source" =>$Vpictures2
            )


        )
    );
    
                        
                        $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']) { print_r($item);
                    #echo '<p><input type="submit" value="Enviar" /></p>';
                        echo '<p><a href="/?code='.$_GET['code'].'&publish_item=ok">Publish Item</a></p>';
                        
                    } else {
                        echo '<p><a alt="" class="btn disable" href="#">Publish Item</a></p> </p>';
                    }
                    
                    ?>

                </div>


            </div>
        </main>
    </body>

    </html>

 

Es ente sale el error le pongo try catch se desabilita  el boton de publish

image.thumb.png.d107ce8f2a5eca2b8df48d03bf23ba52.png

 

image.thumb.png.8250900c7425007f24a3bf49f35430f1.pngimage.thumb.png.d107ce8f2a5eca2b8df48d03bf23ba52.pngimage.thumb.png.f89ccd9f85ab955470dea3a4f174e265.png

 

En esta imagen podemos ver que ni 5 min ha pasado y ya tengo que refrescar el token entonces no se como guardarlo y almenarlo en un txt o en una base de datos y como regreso eso datos y siempre pueda tener el publish item image.thumb.png.e6a61813959167f4afd6e117faffbdd7.png

Share this post


Link to post
Share on other sites

3 answers to this question

Recommended Posts

  • 1

Cleyder, como estas? 

Yo apostaría a que no tiene habilitado el "offline_access" en tu aplicacion de Mercadolibre. (http://applications.mercadolibre.com/)

No te lo tomes a mal: El código está un poco confuso, quizás te convenga buscar estrategias de desarrollo que hagan mas simple de mantenerlo.

Van algunos tips:

1_ Intenta no realizar lo mismo 2 veces! como Refrescar token,  o crear el objeto $meli

2_ Manten identado el codigo

3_ No uses directamente posiciones dentro de un vector sin antes asegurarte que exista la posicion: $_GET['code']  (fijate que PHP te devuelve Notices por esto)

4_ De  ser posible modulariza el código, ponlo dentro de funciones u objetos de no mas de 20-30 lineas de código. Esto las hará mas reutilizables y hace los problemas mas chicos.

5_ Tambien tiene algunas cosas  que entiendo que están demás, por ejemplo este caso que resuelve un refresco de access token apenas lo acabas de generar :

 // 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";
                            }
                        }

o esto que no coincide la descripción con lo que hace:

         // If code exist and session is empty
                        if($_GET['code']) {

 

Espero que te sirva!, si lo del offline_access no funciona intenta emprolijar un poco el código y muestranoslo devuelta.

 

Share this post


Link to post
Share on other sites
  • 1

Hola.

Te recomiendo este tutorial para que puedas guardar y actualizar tu token cada 5 horas.

Necesitas trabajar en conjunto con una base de datos para que todo pueda funcionar mas rapido y facilmente, tambien tener un servidor que te permita hacer cronjobs.

Edited by Fernando Aguirre

Share this post


Link to post
Share on other sites
  • 0
On 4/2/2018 at 2:00 AM, Fernando Aguirre said:

Hola.

Te recomiendo este tutorial para que puedas guardar y actualizar tu token cada 5 horas.

Necesitas trabajar en conjunto con una base de datos para que todo pueda funcionar mas rapido y facilmente, tambien tener un servidor que te permita hacer cronjobs.

Fernando, disculpa la ignorancia. Yo obtengo un nuevo refresh_token, sin embargo, cuando lo sustituyo por el anterior me da un error diciendo que ese refresh ya fue usado. ¿Cómo puedo usarlo para no tener que autentificarme a cada rato?

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
Sign in to follow this