Aqui está o meu código,
$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);
E em outra página, estou recuperando dados de postagem.
print_r ($_POST);
Saída é
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 ( )
Portanto, não estou obtendo dados adequados, mesmo no meu próprio servidor, é uma matriz vazia. Quero implementar o REST usando json como em http://docs.shopify.com/api/customer#create
$data
para$data_string
usarjson_encode()
??? Não ver esta linha de código ...code
$ data_string = json_encode ($ data);code
e como escrever código nos comentários? nos comentários não consigo escrever quebra de linha e como escrever código?Respostas:
Você está postando o json incorretamente - mas mesmo se estiver correto, não poderá testar usando
print_r($_POST)
( leia o porquê aqui ). Em vez disso, na sua segunda página, você pode capturar a solicitação de entrada usandofile_get_contents("php://input")
, que conterá o json POSTed . Para visualizar os dados recebidos em um formato mais legível, tente o seguinte:No seu código, você está indicando
Content-Type:application/json
, mas não está codificando json todos os dados do POST - apenas o valor do campo POST "customer". Em vez disso, faça algo como isto:Nota: Você pode se beneficiar do uso de uma biblioteca de terceiros em vez de interagir diretamente com a API do Shopify.
fonte
curl_setopt($curl, CURLOPT_HTTPHEADER, array('Content-Type:application/json', 'Accept:application/json'));
(caso contrário, você poderá enviar JSON, mas obter XML como resposta).Este código funcionou para mim. Podes tentar...
fonte
Substituir
com:
Não entendo o que você quis dizer com "outra página", espero que seja a página em: 'url_to_post'. Se essa página for escrita em PHP, o JSON que você acabou de postar acima será lido da seguinte maneira:
fonte
Por favor, tente este código: -
fonte
Tente este exemplo.
O seu código page2.php
fonte
Tente assim:
A principal coisa que você esqueceu foi json_encode seus dados. Mas você também pode achar conveniente usar curl_setopt_array para definir todas as opções de curvatura de uma só vez, passando uma matriz.
fonte
array(..)
`CURLOPT_POSTFIELDSarray(..)
para CURLOPT_POSTFIELDS` também irá codificar o JSON.