Enviar datos a la API de terceros con wp_remote_post en wp_login

4

¿Es posible usar wp_remote_post para enviar solicitudes de publicación http a las API de terceros? No pude guardar con éxito el objeto de usuario como una variable de javascript, así que esperaba poder hacer una solicitud http con php y manejar la manipulación de javascript en mi aplicación node express.

Intento actual:

function identify_user() {
    echo "made it into identify user";
    if( is_user_logged_in()):
        $current_user = wp_get_current_user();
        $user = [];
        $user['id'] =  $current_user->ID;
        $user['user_login'] = $current_user->user_login;
        $user['user_email'] = $current_user->user_email;
        $user['user_firstname'] = $current_user->user_firstname;
        $user['user_lastname'] = $current_user->user_lastname;
        $user['display_name'] = $current_user->display_name;
        $response = wp_remote_post( 'myapp.com/endpoint', array(
           'method' => 'POST',
           'headers' => array('Content-Type' => 'application/json; charset=utf-8'),
           'body' => json_encode($user)
        )
    );

    if ( is_wp_error( $response ) ) {
       $error_message = $response->get_error_message();
       echo "Something went wrong: $error_message";
    } else {
       print_r( $response );
    }
    endif;
}

add_action( 'wp_login', 'identify_user' );

Tengo problemas para solucionar este código porque ninguna de mis llamadas de eco se está registrando en la consola. He visto que puedes ejecutar error_log (algo) pero tampoco he podido hacer que funcione.

    
pregunta Yale Newman 31.03.2018 - 04:36

3 respuestas

4

El 'cuerpo' debe ser una matriz, sin incluir la pieza 'json_encode ($ usuario)'.

$response = wp_remote_post( 'myapp.com/endpoint', array(
  'method' => 'POST',
  'headers' => array('Content-Type' => 'application/json; charset=utf-8'),
  'body' => $user
  )
);

Tengo esto en mi función ya que también tuve problemas con el cuerpo como un objeto:

if (is_object($user) && !is_array($user))
  $user = json_decode(json_encode($user), true);
$body = $user;

Con respecto al 'ejecutar error_log (algo) ...' con el que está teniendo problemas, intente #La función de envoltorio de David Lee

Básicamente puedes llamar

write_log('THIS IS THE START OF MY CUSTOM DEBUG');
  // or log data like objects
write_log($object_you_want_to_log);

No sé qué haría sin él.

    
respondido por el patman 16.10.2018 - 00:41
1

Por favor intente a continuación el código podría serle de ayuda.

function identify_user() { 
if( is_user_logged_in()): 
$current_user = wp_get_current_user(); 
$_id = $current_user->ID; 
$_email = $current_user->user_email; 
$user = json_encode(array("user_id"=>$_id,"user_email"=>$_email)); 
$curl = curl_init("myeNDPOINT"); 
curl_setopt( $curl, CURLOPT_POST, true ); 
curl_setopt( $curl, CURLOPT_POSTFIELDS,$user); 
curl_setopt($ch, CURLOPT_HTTPHEADER,array('Content-Type:application/json')); 
curl_exec( $curl ); 
curl_close( $curl ); 
endif; 
} 

add_action( 'wp_enqueue_scripts', 'identify_user');
    
respondido por el Somin 31.03.2018 - 05:51
0

Puedes probar el código de abajo para wp_remote_post.might si te falta el parámetro de la URL de la publicación remota.

También me he dado cuenta de que estás convirtiendo la variable de usuario en formato json 2, lo que no es correcto.

$response = wp_remote_post($url, array(
        'method' => 'POST',
        'headers' => array('Content-Type' => 'application/json; charset=utf-8'),
        'httpversion' => '1.0',
        'sslverify' => false,
        'body' => json_encode($user)
    );
    
respondido por el Somin 31.03.2018 - 04:54

Lea otras preguntas en las etiquetas