Envie dados para a API de terceiros com wp_remote_post no wp_login

4

É possível usar wp_remote_post para enviar solicitações de post http para APIs de terceiros? Eu não era capaz de salvar o objeto de usuário como uma variável javascript, então eu estava esperando que eu pudesse fazer um pedido de http com php e manipular a manipulação de javascript no meu aplicativo expresso nó.

Tentativa atual:

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' );

Estou tendo problemas para solucionar esse código porque nenhuma das minhas chamadas de eco está sendo registrada no console. Eu vi que você pode executar o error_log (algo), mas também não conseguiu fazer isso funcionar.

    
por Yale Newman 31.03.2018 / 04:36

3 respostas

4

O 'corpo' precisa ser uma matriz, não incluindo a peça 'json_encode ($ user)'.

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

Eu tenho isso em minha função, pois também tive problemas com o corpo sendo um objeto:

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

Em relação ao 'run error_log (algo) ...' com o qual você está tendo problemas, tente A função de wrapper de #David Lee

Basicamente, você pode ligar

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

Eu não sei o que faria sem isso.

    
por patman 16.10.2018 / 00:41
1

Por favor, tente abaixo código pode ser de ajuda para você.

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');
    
por Somin 31.03.2018 / 05:51
0

Você pode tentar o código abaixo para wp_remote_post.might esteja faltando o parâmetro url de post remoto.

Também notei que você está convertendo a variável de usuário no formato json 2, o que está errado.

$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)
    );
    
por Somin 31.03.2018 / 04:54