cURL - Cum să trimiți și să primești date în WordPress
CONTEXT
După ce utilizatorul de pe domain1 face click pe un link către domain2, trebuie să trimit datele utilizatorului (username, email,..) de pe server1/domain1 către server2/domain2 și să le salvez temporar în baza de date a server2.
Ambele sunt site-uri WordPress.
MUNCA CURENTĂ
Să zicem, $url = 'http://my-domain2.com'
;
Până acum am descoperit că cURL poate face această operațiune:
function curlTest($url, $fields){
try{
$ch = curl_init($url);
if (!$ch)
throw new Exception('Inițializarea a eșuat');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'PUT');
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT , 10);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Length: ' . strlen($fields)));
curl_setopt($ch, CURLOPT_POSTFIELDS, $fields);
$response = curl_exec($ch);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if (!$response)
throw new Exception(curl_error($ch), curl_errno($ch));
curl_close( $ch );
return (int) $status; //status 200 = succes
} catch(Exception $e) {
trigger_error(sprintf(
'Curl a eșuat cu eroarea #%d: %s',
$e->getCode(), $e->getMessage()),
E_USER_ERROR);
}
}
sau orientat pe obiecte cum este descris aici.
Mai târziu am găsit o soluție WordPress de genul:
$response = wp_remote_post( $url, array( 'data' => $fields) );
explicată aici.
Apelul cURL pare să fie cu succes, dar nu am idee cum să preiau datele pe celălalt server. Până acum am pus datele utilizatorului de pe server1 într-un array ($fields) și folosesc POST pentru a le trimite către server2. Dar cum pot prelua datele pe server2?
Conform exemplului lui Ed Cradock de sub documentația oficială pare să fie posibil să preiei cererea pe partea cealaltă cu acest cod:
if($_SERVER['REQUEST_METHOD'] == 'PUT')
{
parse_str(file_get_contents('php://input'), $requestData);
print_r($requestData);
// Salvează datele cerute în baza de date aici
}
Dar nu funcționează pentru mine deoarece cred că URL-ul este greșit: http://my-domain2.com/<ce-vine-aici?>
ÎNTREBARE
Cum să preiau datele dintr-o cerere POST cURL cu WordPress într-un mod securizat?

wp_remote_get(), wp_remote_post() și wp_remote_request() ar trebui să răspundă la întrebările dumneavoastră. Aceasta este cea mai bună practică în WordPress.

wp_remote_post
, care este mai bine de folosit decât apelarea directă a curl, trimite o cerere POST către cealaltă parte, ceea ce înseamnă că poți să o preiei folosind variabila globală $_POST
. Nu există niciun motiv sau nevoie să folosești cereri PUT pentru ceea ce faci.

Mulțumesc! Am căutat deja destul de mult, dar nu găsesc un exemplu despre cum să preiau datele de pe celălalt server. Cum pot asculta pe server2 pentru date de la server1? Presupun că trebuie să scriu propria mea API? Există vreo documentație? Simplul if($_POST['username']){ //fă ceva} nu cred că va funcționa
