Mi sono guardato intorno prima di postare questa domanda, quindi mi scuso se si trova su un altro post e questo è solo il mio secondo quesiton qui, quindi scusami se non formatto correttamente questa domanda.Leggere il POST JSON usando il PHP
Ho un servizio Web davvero semplice che ho creato che ha bisogno di prendere valori di post e restituire un array con codifica JSON. Tutto ha funzionato fino a quando non mi è stato detto che avrei dovuto pubblicare i dati del modulo con un tipo di applicazione/json del contenuto. Da allora non posso restituire alcun valore dal servizio web ed è sicuramente qualcosa a che fare con il modo in cui sto filtrando i loro valori di post.
Fondamentalmente nel mio setup locale ho creato una pagina di test che fa la seguente -
$curl = curl_init();
curl_setopt($curl, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_HTTPHEADER, array(
'Content-Type: application/json',
'Content-Length: ' . strlen($data))
);
curl_setopt($curl, CURLOPT_URL, 'http://webservice.local/'); // Set the url path we want to call
$result = curl_exec($curl);
//see the results
$json=json_decode($result,true);
curl_close($curl);
print_r($json);
Sulla webservice che ho questo (ho messo a nudo alcune delle funzioni) -
<?php
header('Content-type: application/json');
/* connect to the db */
$link = mysql_connect('localhost','root','root') or die('Cannot connect to the DB');
mysql_select_db('webservice',$link) or die('Cannot select the DB');
if(isset($_POST['action']) && $_POST['action'] == 'login') {
$statusCode = array('statusCode'=>1, 'statusDescription'=>'Login Process - Fail');
$posts[] = array('status'=>$statusCode);
header('Content-type: application/json');
echo json_encode($posts);
/* disconnect from the db */
}
@mysql_close($link);
?>
Fondamentalmente so che è dovuto ai valori $ _POST non impostati, ma non riesco a trovare quello che devo mettere al posto di $ _POST. Ho provato json_decode ($ _ POST), file_get_contents ("php: // input") e un certo numero di altri modi, ma stavo sparando al buio un po '.
Qualsiasi aiuto sarebbe molto apprezzato.
Grazie, Steve
Grazie Michael per l'aiuto, che è stato un passo avanti ora hanno almeno ottenuto un repsonse quando mi associo il post .... anche se è nullo
aggiornato CURL -
$curl = curl_init();
curl_setopt($curl, CURLOPT_HTTPHEADER, array('Content-Type: application/json'));
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($curl, CURLOPT_URL, 'http://webservice.local/');
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_POSTFIELDS, json_encode($data));
php aggiornato sulla pagina che i dati viene registrato -
$inputJSON = file_get_contents('php://input');
$input= json_decode($inputJSON, TRUE); //convert JSON into array
print_r(json_encode($input));
Come ho detto almeno vedo una risposta ora dove prima stava restituendo una pagina vuota
Non sono sicuro di quale sia l'errore, ma IMHO, il primo passo sarebbe la stampa del contenuto di $ _POST per vedere cosa c'è dentro. Se i dati ci sono, è abbastanza facile gestirli. Se $ _POST è vuoto, almeno sai dove si trova il problema. – Sylverdrag
Funziona per me! – jruzafa