Oto mój kod,
$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);
Na innej stronie pobieram dane postów.
print_r ($_POST);
Wyjście jest
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 ( )
Więc nie otrzymuję odpowiednich danych nawet na własnym serwerze, to pusta tablica. Chcę zaimplementować REST przy użyciu json na http://docs.shopify.com/api/customer#create
$data
na$data_string
używaniejson_encode()
??? Nie widzę tej linii kodu ...code
$ data_string = json_encode ($ data);code
a jak pisać kod w komentarzach? w komentarzach nie mogę pisać podziału wiersza, więc jak pisać kod?Odpowiedzi:
Niepoprawnie POSTUJESZ plik json - ale nawet gdyby był poprawny, nie byłbyś w stanie przetestować przy użyciu
print_r($_POST)
( przeczytaj dlaczego tutaj ). Zamiast tego na drugiej stronie możesz przechwycić przychodzące żądanie za pomocąfile_get_contents("php://input")
, które będzie zawierało POSTed json . Aby wyświetlić otrzymane dane w bardziej czytelnym formacie, spróbuj tego:W swoim kodzie wskazujesz
Content-Type:application/json
, ale nie kodujesz w json wszystkich danych POST - tylko wartość pola POST „customer”. Zamiast tego zrób coś takiego:Uwaga dodatkowa: możesz skorzystać z biblioteki innej firmy zamiast bezpośrednio łączyć się z interfejsem API Shopify.
źródło
curl_setopt($curl, CURLOPT_HTTPHEADER, array('Content-Type:application/json', 'Accept:application/json'));
(w przeciwnym razie możesz wysłać JSON, ale otrzymasz XML jako odpowiedź).Ten kod zadziałał dla mnie. Możesz spróbować...
źródło
Zastąpić
z:
Nie rozumiem, co miałeś na myśli przez „inną stronę”, mam nadzieję, że jest to strona pod adresem: 'url_to_post'. Jeśli ta strona jest napisana w PHP, JSON, który właśnie opublikowałeś powyżej, zostanie odczytany w następujący sposób:
źródło
Spróbuj tego kodu: -
źródło
Wypróbuj ten przykład.
Twój kod page2.php
źródło
Spróbuj tak:
Kluczową rzeczą, o której zapomniałeś, było json_encode twoich danych. Ale może być również wygodne użycie curl_setopt_array do ustawienia wszystkich opcji curl naraz, przekazując tablicę.
źródło
array(..)
w `CURLOPT_POSTFIELDSarray(..)
do CURLOPT_POSTFIELDS` spowoduje również urlenkod JSON.