Hier ist mein Code,
$url = 'url_to_post';
$data = array(
"first_name" => "First name",
"last_name" => "last name",
"email"=>"[email protected]",
"addresses" => array (
"address1" => "some address",
"city" => "city",
"country" => "CA",
"first_name" => "Mother",
"last_name" => "Lastnameson",
"phone" => "555-1212",
"province" => "ON",
"zip" => "123 ABC"
)
);
$data_string = json_encode($data);
$ch=curl_init($url);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($ch, CURLOPT_POSTFIELDS, array("customer"=>$data_string));
curl_setopt($ch, CURLOPT_HEADER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER,
array(
'Content-Type:application/json',
'Content-Length: ' . strlen($data_string)
)
);
$result = curl_exec($ch);
curl_close($ch);
Und auf einer anderen Seite rufe ich Postdaten ab.
print_r ($_POST);
Ausgabe ist
HTTP/1.1 200 OK
Date: Mon, 18 Jun 2012 07:58:11 GMT
Server: Apache
X-Powered-By: PHP/5.3.6
Vary: Accept-Encoding
Connection: close
Content-Type: text/html
Array ( )
Ich erhalte also nicht einmal auf meinem eigenen Server die richtigen Daten, es ist ein leeres Array. Ich möchte REST mit json unter http://docs.shopify.com/api/customer#create implementieren
$data
auf "$data_string
Verwendung"json_encode()
? Sehen Sie diese Codezeile nicht ...code
$ data_string = json_encode ($ data) geschrieben;code
und wie schreibe ich Code in Kommentare? in Kommentaren kann ich keinen Zeilenumbruch schreiben und wie schreibe ich Code?Antworten:
Sie veröffentlichen den JSON falsch - aber selbst wenn er korrekt wäre, könnten Sie ihn nicht testen
print_r($_POST)
( lesen Sie hier, warum ). Stattdessen können Sie auf Ihrer zweiten Seite die eingehende Anforderung mitfile_get_contents("php://input")
abrufen, die den POST-JSON enthält . Versuchen Sie Folgendes, um die empfangenen Daten in einem besser lesbaren Format anzuzeigen:In Ihrem Code geben Sie an
Content-Type:application/json
, aber Sie codieren nicht alle POST-Daten per JSON - nur den Wert des POST-Felds "Kunde". Machen Sie stattdessen so etwas:Nebenbemerkung: Sie können von der Verwendung einer Bibliothek eines Drittanbieters profitieren, anstatt selbst direkt mit der Shopify-API zu kommunizieren.
quelle
curl_setopt($curl, CURLOPT_HTTPHEADER, array('Content-Type:application/json', 'Accept:application/json'));
(andernfalls können Sie JSON senden, aber XML als Antwort erhalten).Dieser Code hat bei mir funktioniert. Du kannst es versuchen...
quelle
Ersetzen
mit:
Ich verstehe nicht, was Sie mit "andere Seite" gemeint haben, ich hoffe, es ist die Seite unter: 'url_to_post'. Wenn diese Seite in PHP geschrieben ist, wird der oben veröffentlichte JSON folgendermaßen gelesen:
quelle
Bitte versuchen Sie diesen Code: -
quelle
Versuchen Sie dieses Beispiel.
Ihr page2.php-Code
quelle
Versuchen Sie es so:
Der Schlüssel, den Sie vergessen haben, war, Ihre Daten mit json_encode zu versehen. Es kann jedoch auch zweckmäßig sein, curl_setopt_array zu verwenden, um alle Curl-Optionen gleichzeitig festzulegen, indem ein Array übergeben wird.
quelle
array(..)
in `CURLOPT_POSTFIELDSarray(..)
an CURLOPT_POSTFIELDS übergeben, wird auch der JSON urlencodiert.