Viendo 11 respuestas - de la 1 a la 11 (de un total de 11)
  • Obtengo un json como si todo hubiera ido perfectamente pero no.

    Está bien explicado lo que haces pero no el problema que tienes. ¿Qué significa «pero no»? ¿Qué respuesta recibes en tu Ajax? ¿Has intentado algún debug?

    Iniciador del debate miguel3348

    (@miguel3348)

    Hola Cybmeta, muchas gracias por el interés, paso a explicarme

    El problema es que no funciona, es decir, que no puedo hacer que un Post se marque como favorito o se desmarque de favoritos. En la web, por supuesto si que funciona el Botón, ya que al pulsar sobre el, se queda la «estrellita» activa o inactiva, y por supuesto guarda en la base de datos que el usuario Miguel(3) le gusta el Post(286). Por ejemplo asi: a:1:{i:0;a:2:{s:7:»site_id»;i:1;s:5:»posts»;a:3:{i:1;i:194;i:2;i:208;i:3;i:286;}}} . Esto lo hace en la tabla wp_usermeta

    Para depurar solo uso Chrome que es donde vi la llamada http://web.domine.com/wp-admin/admin-ajax.php?action=simplefavorites_favorite&nonce=a1f73g9cr1&postid=273&siteid=1&status=active

    Yo lo que hago actualmente es a través de un archivo llamado get_favorito.php lo siguiente:

    <?php
    
    // LLamada
    // http://www.web.com/wsjson/get_favorito.php?estado=active
    
    $ruta = 'http://' . $_SERVER['HTTP_HOST'];
    $json = file_get_contents($ruta . '/wp-admin/admin-ajax.php?action=simplefavorites_nonce');
    
    $estado = $key = $_GET["estado"];
    
    $arr = json_decode($json, true);
    $nonce = $arr['nonce'];
    $param = http_build_query(
        array(
            'action' => 'simplefavorites_favorite',
            'nonce' => $nonce,
        	'postid' =>'286',
        	'siteid' => '1',
        	'status' => $estado
        )
     );
    
    //action=simplefavorites_favorite&nonce=d6f74c4cd8&postid=273&siteid=1&status=inactive
    
    //"action=simplefavorites_favorite&nonce='.$nonce.'&postid=273&siteid=1&status=active";
    
    $opts = array(
      'http'=>array(
      	'method'=>'POST',
      	'header'=> 'POST /wp-admin/admin-ajax.php HTTP/1.1\r\n' .
    		'Host: '.$ruta.'\r\n' .
    		'Connection: keep-alive\r\n' .
    		'Content-Length: 84\r\n' .
    		'Accept: */*\r\n' .
    		'Origin: http://www.web.com\r\n' .
    		'X-Requested-With: XMLHttpRequest\r\n' .
    		'User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2564.116 Safari/537.36\r\n' .
    		'Content-Type: application/x-www-form-urlencoded; charset=UTF-8\r\n' .
    		'Referer: '.$ruta.'/hola-mundo-2/\r\n' .
    		'Accept-Encoding: gzip, deflate\r\n' .
    		'Accept-Language: es-ES,es;q=0.8\r\n' .
    		'Cookie: wordpress_dddd222f37127bf3816f4455971ce5aa=migueladmin%7C1457085836%7CxWJrk7EQVEYRpZY9Jzev4fH6jx3cq97wx6LPaMd9C4v%7Cd232ca14edca535e653dd37607b754d78926410e317d34315cbcb5533cda08c8; PHPSESSID=9eda0049e17a67becb1c8fddd18c6c51;wordpress_logged_in_dddd222f27127bf3816f4455971ce5aa=migueladmin%7C1457085836%7CxWJrk7EQVEYRpZY9Jzev4fH6jx3cq97wx6LPaMd9C4v%7C63a7b53cfbb2c5a3b86e59c65e9977077e352ad8fe00228dee9b04a7a1e36ad9;wp-settings-1=libraryContent%3Dbrowse%26editor%3Dtinymce%26mfold%3Do;wp-settings-time-1=1456991866;wordpress_test_cookie=WP+Cookie+check;simplefavorites=%5B%7B%22site_id%22%3A1%2C%22posts%22%3A%7B%221%22%3A194%2C%222%22%3A208%2C%223%22%3A273%7D%7D%5D',
    	'content' => $param
    )
    );
    
    $context = stream_context_create($opts);
    
    //
    //
    
    $json = file_get_contents($ruta . '/wp-admin/admin-ajax.php', false, $context);
    echo $json;
    
    ?>

    Y obtengo esto … pero no deja el Post con Favorito

    {
    status: "success",
    favorite_data: {
        id: 286,
        siteid: 1,
        status: "active"
    },
    favorites: [
    {
        posts: {
            286: {
                post_id: 286,
                post_type: "post",
                title: "Ejemplo Post",
                permalink: "http://www.web.com/ejemplo-post/",
                total: 0,
                button: false
            }
        },
        site_id: 1
    }
    ]
    }

    Cualquier cosa, que no quede clara, me dices.
    Gracias de nuevo por intentar ayudarme.

    Parece que el problema lo tienes en que intentas utilizar el plugin desde fuera de WordPress y con usuarios anónimos. En una vista rápida, no parece que el plugin esté preparado para este contexto ya que para usuarios anónimos almacena los favoritos utilizando cookies y sesiones PHP, y las cookies NO son válidas cross-domain NI las sesiones PHP son válidas entre diferentes conexiones.

    Intentar utilizar un valor fijo de cookies y sesión, como intentas hacer, no se va saltar esas restricciones, por suerte, ¿imaginas que fuera tan fácil saltárselo?

    Pero aunque funcionara, al utilizar una cookie con valor fijo no podrías distinguir los favoritos de un usuario con los favoritos de otro usuario, por lo que tampoco creo que sea adecuado.

    No se me ocurre ningún rodeo, yo contactaría con el desarrollador del plugin con esta situación de usuarios anónimos desde fuera de WordPress a ver que dice.

    Iniciador del debate miguel3348

    (@miguel3348)

    Me surge una duda (o varias) 🙂

    Yo como decía antes, estoy tratando de usar WP como back para mi App Movil.

    El registro dentro de la App lo estoy haciendo directamente con el usuario de WP y a través del plugin JSON API User Plus

    Por lo tanto me encuentro logeado desde mi App.

    Lo que no se que son las Cookies de Sesión ni de PHP … me puedes indicar donde y como realizar estas peticiones. Quizá desde la App y tras logearme pueda enviar las cookies correctas en el header de la petición. ¿Crees que puede ser esto posible?

    Con el desarrollador ya he intentado contactar por todos los medios pero no obtengo respuesta alguna, lamentablemente.

    Gracias Mil

    Ahhh, esa informacion te las saltaste, ¿como lo iba a saber? 😉

    De todas formas, sigo pensando que tu problema está con el tema de los usuarios anónimos. La petición que haces desde get_favorito.php, como decía antes, no autentifica correctamente al usuario, así que no hay ningún usuario a cuya lista de favoritos añadir el post. Fíjate que aunque estés logeado en tu app, en tu script get_favorito.php no hay de información sobre ese usuario del app.

    Nuca he utilizado JSON API User, así que no puedo ayudarte. De todas formas, como utilizas la versión Pro, deberían darte soporte por lo que pagas. Pregúntales como autentificar al usuario en una solicitud Ajax.

    Iniciador del debate miguel3348

    (@miguel3348)

    Para que la solución que te dieron sigue siendo para usuarios no legeados utilizando cookies (nota como la solución propuesta ya no utiliza un cookie con valor fijo, como te avisé antes, sino que la lee de la solicitud desde la aplicación). ¿Has encontrado alguna solución para usuarios logeados?

    Iniciador del debate miguel3348

    (@miguel3348)

    primero la app hace login del usuario en el servidor. Recibe una cookie de autenticación

    llamo a la página con el código. Hago un post, añado a las cabeceras la cookie de autenticación, los parámetros de id de post y el id de site

    api/userplus/generate_auth_cookie/?username=<usuario>&password=<contrasena>&key=<WPAPIKey>’,

    No necesito pasar ninguna cookie mas. 😉

    Si eso lo entiendo, lo que no entiendo es que se utilicen cookies para autenticación remota de usuarios (app -WordPress). Me suena muy muy muy raro. Y aunque técnicamente sea posible me surgen muchas dudas sobre seguridad, aunque realmente no tengo ni idea, sólo son suposiciones de lo que leo. Imagino que será algo que el plugin que utilizas haya tenido en cuenta.

    En cualquier caso, si ya te funciona, pues ya está.

    Jejeje. Me picó la curiosidad y no soy el único que ha tenido dudas de seguridad con este plugin. Aunque ya parecen que lo solucionaron, eso explican en ese post.

Viendo 11 respuestas - de la 1 a la 11 (de un total de 11)
  • El debate ‘Hacer petición POST a un plugin FAVORITOS’ está cerrado a nuevas respuestas.