Blocat cu wp_remote_post la trimiterea datelor către un API extern la înregistrarea utilizatorului
Încerc să creez un plugin simplu pentru a trimite detaliile utilizatorului către un CRM atunci când un utilizator se înregistrează pe site-ul WordPress ca abonat de bază.
Am ajuns într-un punct blocat, am încercat să interpretez detaliile API-ului cât mai bine posibil, dar nu sunt sigur dacă formatez corect datele din body, deoarece pur și simplu nu funcționează.
Pot face POST-ul să funcționeze folosind Postman, totuși asta este prin json/javascript și pe site încerc să obțin același rezultat folosind wp_remote_post
.
Orice sugestii sau observații ar fi apreciate.
add_action( 'user_register', 'send_new_user', 10, 1 );
function send_new_user($user_id) {
// Obține datele noului utilizator
$new_user = get_userdata($user_id);
$useremail = $new_user -> user_email;
$url = 'https://api.capsulecrm.com/api/v2/parties';
$body = array(
'firstName' => 'DeCeNuFunctionezi',
'email' => $useremail
);
$args = array(
'method' => 'POST',
'timeout' => 45,
'redirection' => 5,
'httpversion' => '1.0',
'sslverify' => false,
'blocking' => false,
'headers' => array(
'Authorization' => 'Bearer {aici merge token-ul privat!!!!}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
),
'body' => json_encode($body),
'cookies' => array()
);
$request = wp_remote_post ($url, $args);
};

Recomand să setezi doar argumentele pe care chiar trebuie să le schimbi din valorile implicite, pentru a elimina potențiale probleme în timpul testării. Cel mai bine este să adaugi argumente suplimentare doar atunci când sunt necesare.
Toate argumentele pot fi găsite aici: https://developer.wordpress.org/reference/classes/WP_Http/request/
Dacă este posibil, elimină și autentificarea obligatorie la început pentru a testa doar POST-ul înainte de a adăuga securitate/autentificare.
De asemenea, nu este nevoie să închizi o funcție cu punct și virgulă ;
Recomand să investighezi cum să configurezi xdebug pentru a putea depana codul local, iar dacă nu poți face asta, atunci recomand să folosești error_log
pentru a înregistra în jurnalul de erori al furnizorului de hosting, astfel încât să poți vedea care este răspunsul.
De asemenea, ai setat blocking
pe false, nu vrei un răspuns de la server?
// Dacă acest fișier este accesat direct, întrerupe execuția.
if ( ! defined( 'WPINC' ) ) {
die;
}
// Găsește detaliile unui utilizator nou
add_action('user_register', 'send_doqaru_user', 10, 1);
function send_doqaru_user ($user_id){
$new_doqaru_user = get_userdata($user_id);
$doqaru_user_email = $new_doqaru_user -> user_email;
// obține toate metadatele utilizatorului nou înregistrat
$new_user_data = get_user_meta($user_id);
// obține prenumele utilizatorului ca șir de caractere
$doqaru_user_firstname = get_user_meta( $user_id, 'first_name', true );
$doqaru_user_lastname = get_user_meta( $user_id, 'last_name', true );
if( ! $new_user ){
error_log( 'Nu s-a putut obține userdata!' );
return;
}
$url = 'https://api.capsulecrm.com/api/v2/parties';
$body = array(
'type' => 'person',
'firstName' => $doqaru_user_firstname,
'lastName' => $doqaru_user_lastname,
'emailAddresses' => array(
'type' => 'Work',
'address' => $new_user->user_email
));
$args = array(
'method' => 'POST',
'timeout' => 45,
'sslverify' => false,
'headers' => array(
'Authorization' => 'Bearer {token goes here}',
'Content-Type' => 'application/json',
),
'body' => json_encode($body),
);
$request = wp_remote_post( $url, $args );
if ( is_wp_error( $request ) || wp_remote_retrieve_response_code( $request ) != 200 ) {
error_log( print_r( $request, true ) );
}
$response = wp_remote_retrieve_body( $request );
}

Mulțumesc sMyles, acum am reușit să activez jurnalizarea erorilor, ceea ce înseamnă că pot depana mai bine. Încă nu funcționează, dar măcar afișează răspunsul pe care îl pot analiza. Se pare că încercarea de a crea 'party' împiedică trimiterea.

Am reușit să transmit datele dacă folosesc date absolute. Acum, când încerc să preiau și să trimit date dinamice, jurnalul de erori se umple cu mesajul 'Unable to get userdata!' deci condiția if eșuează în mod evident. Trebuie să fac ceva în plus față de codul din plugin-ul de mai jos pentru a prelua datele obiectului $user după crearea unui utilizator nou **Am actualizat blocul de cod original în întrebare, dar este în curs de verificare

@DanSutherland poți încerca să înlocuiești get_userdata
cu get_user_by( 'id', $user_id );
(deoarece get_userdata
este doar un wrapper) ... dar este și o funcție pluggable, deci în funcție de ce ai pe site, e posibil ca ceva să suprascrie acel apel de funcție --- dacă vezi mesajul Unable to get userdata
înseamnă că funcția returnează false în loc de datele utilizatorului
