web-dev-qa-db-ger.com

Senden Sie Daten mit wp_remote_post auf wp_login an die API eines Drittanbieters

Ist es möglich, mit wp_remote_post http-Post-Anfragen an Drittanbieter-APIs zu senden? Ich konnte das Benutzerobjekt nicht erfolgreich als JavaScript-Variable speichern und hoffte, dass ich eine http-Anfrage mit PHP stellen und die JavaScript-Manipulation in meiner Node-Express-App ausführen konnte.

Aktueller Versuch:

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

Ich habe Probleme bei der Fehlerbehebung für diesen Code, da keiner meiner Echoaufrufe in der Konsole protokolliert wird. Ich habe gesehen, dass Sie error_log (etwas) ausführen können, aber auch nicht in der Lage waren, das zum Laufen zu bringen.

4
Yale Newman

Der 'body' muss ein Array sein, das den 'json_encode ($ user)' nicht enthält.

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

Ich habe dies in meiner Funktion, da ich auch Probleme damit hatte, dass der Körper ein Objekt ist:

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

Bezüglich des 'run error_log (something) ...', mit dem Sie Probleme haben, versuchen Sie #David Lees Wrapper-Funktion

Grundsätzlich kann man anrufen

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

Ich weiß nicht, was ich ohne machen würde.

4
patman

Bitte versuchen Sie es unter Code könnte Ihnen helfen.

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

Sie können den folgenden Code für wp_remote_post ausprobieren. Möglicherweise fehlt Ihnen der Parameter für die Remote-Post-URL.

Außerdem ist mir aufgefallen, dass Sie die Benutzervariable 2-mal in das JSON-Format konvertieren, was falsch ist.

$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