Aquí está mi 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);
Y en otra página, estoy recuperando datos de publicaciones.
print_r ($_POST);
La salida es
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 ( )
Por lo tanto, no obtengo los datos adecuados ni siquiera en mi propio servidor, es una matriz vacía. Quiero implementar REST usando json como en http://docs.shopify.com/api/customer#create
$data
al$data_string
usojson_encode()
? No veo esta línea de código ...code
$ data_string = json_encode ($ data);code
¿Y cómo escribir código en los comentarios?Respuestas:
Está PUBLICANDO el json de forma incorrecta, pero incluso si fuera correcto, no podría realizar la prueba usando
print_r($_POST)
( lea por qué aquí ). En cambio, en su segunda página, puede atrapar la solicitud entrante usandofile_get_contents("php://input")
, que contendrá el json POSTed . Para ver los datos recibidos en un formato más legible, intente esto:En su código, está indicando
Content-Type:application/json
, pero no está codificando json todos los datos POST, solo el valor del campo POST "cliente". En cambio, haz algo como esto:Nota al margen: puede beneficiarse al usar una biblioteca de terceros en lugar de interactuar directamente con la API de Shopify.
fuente
curl_setopt($curl, CURLOPT_HTTPHEADER, array('Content-Type:application/json', 'Accept:application/json'));
(de lo contrario, puede enviar JSON, pero obtener XML como respuesta).Este código me funcionó. Puedes probar...
fuente
Reemplazar
con:
No entiendo lo que quieres decir con "otra página", espero que sea la página en: 'url_to_post'. Si esa página está escrita en PHP, el JSON que acaba de publicar arriba se leerá de la siguiente manera:
fuente
Por favor, intente este código: -
fuente
Prueba este ejemplo.
Su código page2.php
fuente
Intenta así:
La clave que olvidó fue json_encode sus datos. Pero también puede resultarle conveniente utilizar curl_setopt_array para configurar todas las opciones de curva a la vez pasando una matriz.
fuente
array(..)
en `CURLOPT_POSTFIELDSarray(..)
mensaje a CURLOPT_POSTFIELDS` también codificará el JSON.