web-dev-qa-db-fra.com

Envoyer des données à une API tierce avec wp_remote_post sur wp_login

Est-il possible d'utiliser wp_remote_post pour envoyer des demandes de publication http à des API tierces? Je ne pouvais pas enregistrer correctement l'objet utilisateur en tant que variable javascript. J'espérais donc pouvoir faire une requête http avec php et gérer la manipulation de javascript dans mon application de nœud express.

Tentative en cours:

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

Je ne parviens pas à résoudre ce code car aucun de mes appels d'écho ne se connecte à la console. J'ai vu que vous pouvez exécuter error_log (quelque chose), mais vous n'avez pas réussi à le faire fonctionner non plus.

4
Yale Newman

Le "corps" doit être un tableau, n'incluant pas la pièce "json_encode ($ user)".

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

J'ai cela dans ma fonction car j'ai également eu des problèmes avec le corps étant un objet:

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

En ce qui concerne 'run error_log (quelque chose) ...' avec lequel vous rencontrez des problèmes, essayez La fonction wrapper de #David Lee

Fondamentalement, vous pouvez appeler

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

Je ne sais pas ce que je ferais sans ça.

4
patman

Veuillez essayer ci-dessous le code pourrait être une aide pour vous.

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

Vous pouvez essayer le code ci-dessous pour wp_remote_post.might, il vous manque le paramètre de post url distant.

Aussi, j'ai remarqué que vous convertissez une variable utilisateur au format json 2 fois, ce qui est faux.

$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)
    );
0
Somin