cURL - Cómo enviar y obtener datos en WordPress

7 feb 2018, 19:08:16
Vistas: 40.4K
Votos: 1

ANTECEDENTES

Después de que el usuario en dominio1 hace clic en un enlace hacia dominio2, necesito enviar también los datos del usuario (nombre de usuario, correo electrónico,..) desde servidor1/dominio1 a servidor2/dominio2 y guardarlo temporalmente en el servidor2/base de datos.

Ambos son sitios web WordPress.

TRABAJO ACTUAL

Digamos que, $url = 'http://mi-dominio2.com'; Hasta ahora descubrí que cURL puede hacer este trabajo:

function curlTest($url, $fields){

  try{

      $ch = curl_init($url);

      if (!$ch)
        throw new Exception('Falló la inicialización');

      curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'PUT');
      curl_setopt($ch, CURLOPT_CONNECTTIMEOUT , 10);
      curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
      curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Length: ' . strlen($fields)));
      curl_setopt($ch, CURLOPT_POSTFIELDS, $fields);
      $response = curl_exec($ch);

      $status = curl_getinfo($ch, CURLINFO_HTTP_CODE);

      if (!$response)
        throw new Exception(curl_error($ch), curl_errno($ch));


      curl_close( $ch );
      return (int) $status; //estado 200 = éxito


      } catch(Exception $e) {

          trigger_error(sprintf(
              'Curl falló con el error #%d: %s',
              $e->getCode(), $e->getMessage()),
              E_USER_ERROR);

      }
}

o orientado a objetos como se describe aquí.

Más tarde encontré una solución de WordPress como esta:

$response = wp_remote_post( &url, array( 'data' => $fields) );

explicado aquí.

La llamada cURL parece ser exitosa, pero no tengo idea de cómo obtener los datos en el otro servidor. Hasta ahora puse los datos del usuario en el servidor1 en un array ($fields) y uso POST para enviarlo al servidor2. Pero ¿cómo puedo obtener los datos en el servidor2?

Según el ejemplo de Ed Cradock debajo de la documentación oficial parece ser posible capturar la solicitud en el otro lado con este código:

if($_SERVER['REQUEST_METHOD'] == 'PUT') 
{ 
   parse_str(file_get_contents('php://input'), $requestData); 

   print_r($requestData); 

   // Guardar los datos solicitados en la base de datos aquí
}

Pero no funciona para mí porque supongo que la URL está mal: http://mi-dominio2.com/<que-va-aqui?>

PREGUNTA

¿Cómo obtener los datos de una solicitud POST cURL con WordPress de forma segura?

3
Comentarios

¿Cómo está relacionada tu pregunta con WordPress? Y, por favor, haz una sola pregunta a la vez.

Max Yudin Max Yudin
7 feb 2018 19:12:38

Ok, hice una sola pregunta. Y no conozco la forma de hacer cURL en WordPress.

murcoder murcoder
7 feb 2018 19:35:37

¿Hay alguna razón particular por la que estés usando curl directamente en lugar de las APIs HTTP de WP?

Tom J Nowell Tom J Nowell
7 feb 2018 19:44:29
Todas las respuestas a la pregunta 2
0

wp_remote_get(), wp_remote_post() y wp_remote_request() deberían resolver tus dudas. Esta es la mejor práctica para WordPress.

7 feb 2018 19:27:45
1

wp_remote_post, que es mejor usar que llamar directamente a curl, envía una solicitud POST al otro lado, lo que significa que puedes recuperarla con la variable global $_POST. No hay razón ni necesidad de usar solicitudes PUT para lo que estás haciendo.

7 feb 2018 20:02:01
Comentarios

¡Gracias! Ya he investigado bastante, pero no encuentro un ejemplo de cómo obtener los datos en el otro servidor. ¿Cómo puedo escuchar en el server2 los datos provenientes del server1? Supongo que tendré que escribir mi propia API, ¿no? ¿Existe alguna documentación? Un simple if($_POST['username']){ //hacer algo} no funcionará, ¿verdad?

murcoder murcoder
8 feb 2018 19:10:38