Actualmente estoy programando un proyecto PHP que quiere iniciar sesión en WordPress vía OAuth 1.0 y luego realizar solicitudes a una API.
El flujo de trabajo es el siguiente:
- Obtenga un token de solicitud.
- Con el token de solicitud, inicie sesión en WordPress. (El problema está aquí)
- Después de iniciar sesión, autorice las credenciales y obtenga el token verificador.
- Obtenga un token de acceso.
- Finalmente, realice llamadas a la API con AT y AT Secret.
Mis pruebas en localhost bajo XAMPP funcionan bien, pero cuando subo el código al servidor (UNIX) tengo un problema con WordPress Login con las cookies.
Hago la llamada de inicio de sesión a través de cURL, configuro las cookies y luego analizo la respuesta a HTML (necesito el campo “_wpnonce” para enviar a la página de autorización).
El problema es que siempre recibo el error Habilitar cookies. Probé todas las combinaciones de parámetros de cURL, usé todas las configuraciones y ejemplos, pero no pude trabajar 🙁
El código actual es:
//Llamamos al login
$data = array();
$data['log'] = $login;
$data['pwd'] = $password;
$data['redirect_to']="/wp-login.php?action=oauth1_authorize&oauth_token=" . $req_token;
$data['testcookie']="1";
$data['oauth_token']=$req_token;
$cookiefile1 = dirname(__FILE__)."/cookie1.txt" ;
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url . "/wp-login.php");
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_COOKIESESSION, 1);
curl_setopt($ch, CURLOPT_COOKIEJAR, $cookiefile1);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
$output = curl_exec($ch);
curl_close($ch);
//Una vez logueado tenemos que autorizar
//Obtenemos los datos del formulario
$dom = new DOMDocument();
$dom->loadHTML($output);
$fichero = fopen("test.html","w");
fwrite($fichero,$output);
fclose($fichero);
//$wpnonce = $dom->getElementById("_wpnonce");
¿Qué me estoy perdiendo?
¡Gracias por adelantado!
Como no puedo comentar directamente, pero me gustaría ofrecer mi observación, parece que está tratando de configurar el oauth_token
dos veces, una vez en la URL de redireccionamiento y otra vez como una clave/valor de datos independiente. Intente:
$data = array();
$data['log'] = $login;
$data['pwd'] = $password;
$data['redirect_to']="/wp-login.php?action=oauth1_authorize&oauth_token=" . $req_token;
$data['testcookie']="1";
o
$data = array();
$data['log'] = $login;
$data['pwd'] = $password;
$data['redirect_to']="/wp-login.php?action=oauth1_authorize";
$data['testcookie']="1";
$data['oauth_token']=$req_token;
Pero realmente no puedes tener ambos.
¿Estás seguro de tu
$url
está configurado correctamente?– jameshwart lópez
3 de febrero de 2016 a las 10:28
Sí, lo revisé muchas veces y es la URL correcta. Como dije, en localhost funciona.
– Rubén Córdoba
03/02/2016 a las 10:40