2016-09-20 1 views
2

Ich habe ein Array $batchRequest die wie folgt aussieht:Wie man ein Array komplexer Objekte an eine andere Seite in PHP sendet?

array(5) { 
    [0]=> 
    array(0) { 
    } 
    [1]=> 
    object(Facebook\FacebookRequest)#18 (9) { 
    ["app":protected]=> 
    object(Facebook\FacebookApp)#9 (2) { 
     ["id":protected]=> 
     string(16) "xxxxxxx" 
     ["secret":protected]=> 
     string(32) "xxxxxxxx" 
    } 
    ["accessToken":protected]=> 
    string(49) "xxxxx|xxxxxxx" 
    ["method":protected]=> 
    string(3) "GET" 
    ["endpoint":protected]=> 
    string(75) "/10209064245580796?fields=id%2Cname%2Cpicture%2Cgender%2Cfriends%2Cbirthday" 
    ["headers":protected]=> 
    array(0) { 
    } 
    ["params":protected]=> 
    array(0) { 
    } 
    ["files":protected]=> 
    array(0) { 
    } 
    ["eTag":protected]=> 
    NULL 
    ["graphVersion":protected]=> 
    string(4) "v2.5" 
    } 
    [2]=> 
    object(Facebook\FacebookRequest)#17 (9) { 
    ["app":protected]=> 
    object(Facebook\FacebookApp)#9 (2) { 
     ["id":protected]=> 
     string(16) "xxxxx" 
     ["secret":protected]=> 
     string(32) "xxxxxxx" 
    } 
    ["accessToken":protected]=> 
    string(49) "xxxx|xxxxxxxx" 
    ["method":protected]=> 
    string(3) "GET" 
    ["endpoint":protected]=> 
    string(75) "/10208823390691752?fields=id%2Cname%2Cpicture%2Cgender%2Cfriends%2Cbirthday" 
    ["headers":protected]=> 
    array(0) { 
    } 
    ["params":protected]=> 
    array(0) { 
    } 
    ["files":protected]=> 
    array(0) { 
    } 
    ["eTag":protected]=> 
    NULL 
    ["graphVersion":protected]=> 
    string(4) "v2.5" 
    } 
    [3]=> 
    object(Facebook\FacebookRequest)#19 (9) { 
    ["app":protected]=> 
    object(Facebook\FacebookApp)#9 (2) { 
     ["id":protected]=> 
     string(16) "xxxxx" 
     ["secret":protected]=> 
     string(32) "xxxxxxx" 
    } 
    ["accessToken":protected]=> 
    string(49) "xxxxx|xxxxxxx" 
    ["method":protected]=> 
    string(3) "GET" 
    ["endpoint":protected]=> 
    string(74) "/1294280923934896?fields=id%2Cname%2Cpicture%2Cgender%2Cfriends%2Cbirthday" 
    ["headers":protected]=> 
    array(0) { 
    } 
    ["params":protected]=> 
    array(0) { 
    } 
    ["files":protected]=> 
    array(0) { 
    } 
    ["eTag":protected]=> 
    NULL 
    ["graphVersion":protected]=> 
    string(4) "v2.5" 
    } 
    [4]=> 
    object(Facebook\FacebookRequest)#20 (9) { 
    ["app":protected]=> 
    object(Facebook\FacebookApp)#9 (2) { 
     ["id":protected]=> 
     string(16) "xxxxx" 
     ["secret":protected]=> 
     string(32) "xxxxxxxx" 
    } 
    ["accessToken":protected]=> 
    string(49) "xxxxx|xxxxxxxxxx" 
    ["method":protected]=> 
    string(3) "GET" 
    ["endpoint":protected]=> 
    string(74) "/1274474365912572?fields=id%2Cname%2Cpicture%2Cgender%2Cfriends%2Cbirthday" 
    ["headers":protected]=> 
    array(0) { 
    } 
    ["params":protected]=> 
    array(0) { 
    } 
    ["files":protected]=> 
    array(0) { 
    } 
    ["eTag":protected]=> 
    NULL 
    ["graphVersion":protected]=> 
    string(4) "v2.5" 
    } 
} 

So ist es ein Array, dessen Elemente komplexe Objekte. Ich muss sie an eine andere Seite senden, die parallelImport.php genannt wird. Hier ist, was ich versucht habe:

JSON Mit

$data = array('batchArrayChild' => json_encode($batchRequest), 'app_id' => $appId, 'app_secret' => $appSecret); 
$endpoint_url = 'https://some-domain.net/pages/parallelImport.php'; 
$curl = curl_init($endpoint_url); 
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); 
curl_setopt($curl, CURLOPT_POST, 1); 
curl_setopt($curl, CURLOPT_POSTFIELDS, $data); 
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 0); 
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, 0); 
$curl_response = curl_exec($curl); 
$result = $curl_response; 
print_r($result); 

Wie man sehen kann ich json_encode ed $batchRequest und senden sie über cURL, und hier ist, was es gibt:

string(16) "[[],{},{},{},{}]" 

Mit http_build_query

$data = array('batchArrayChild' => http_build_query($batchRequest), 'app_id' => $appId, 'app_secret' => $appSecret); 
$endpoint_url = 'https://some-domain.net/pages/parallelImport.php'; 
$curl = curl_init($endpoint_url); 
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); 
curl_setopt($curl, CURLOPT_POST, 1); 
curl_setopt($curl, CURLOPT_POSTFIELDS, $data); 
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 0); 
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, 0); 
$curl_response = curl_exec($curl); 
$result = $curl_response; 
print_r($result); 

Und nachdem ich var_dump($_POST['batchArrayChild']) auf parallelImport.php tun, sagt es:

string(0) "" 

Haben Sie irgendeine andere Art und Weise kennen, in dem ich dieses Array zu Ausführungsskript schicken könnte und eine Art von Antwort zu bekommen?

+0

auf den ersten Blick in Ordnung aussieht, so bezweifle ich, das Senden der Ausgabe ist. Vielleicht möchten Sie den Netzwerkverkehr einmal dumpen, um zu überprüfen, ob Sie tatsächlich eine POST-Anfrage mit dem erwarteten Inhalt senden. Es ist wahrscheinlich, dass das Ergebnis unerwartet ist, da dieses Remote-Skript die Struktur der von Ihnen gesendeten Daten nicht versteht. Darüber können wir natürlich nichts sagen. – arkascha

+0

Ich habe im txt-Dokument den vollständigen '$ _POST' protokolliert und dieses Feld 'batchArrayChild' ist immer noch leer. – Ognj3n

+0

Wie hast du das gemacht? "In ein TXT-Dokument einzuloggen" klingt sehr verdächtig ... Dann wollen Sie vielleicht zuerst prüfen, ob '$ data' tatsächlich gültige' JSON'-Daten enthält? – arkascha

Antwort

2

Ich mag nicht senden komplexe (interne) Objekte zwischen Systemen, so hätte ich ein DTO (Datenübertragungsobjekt) mit öffentlichen Eigenschaften erstellt und verwendet dieses Objekt, um die Daten zu senden, um eine Kopplung von Objekten zwischen Diensten zu vermeiden. Der DTO könnte sogar vom Typ stdClass sein, wenn Sie es einfacher machen wollen.

Wenn Sie die Dienste Super abhängig zueinander einschließlich Freigabestatus machen wollen könnten Sie versuchen serialize() auf die Daten verwenden

Verwandte Themen