Чтение JSON POST с использованием PHP
Я много осматривался, прежде чем опубликовать этот вопрос, поэтому я извиняюсь, если он есть в другом посте, и это только мой второй вопрос, поэтому извиняюсь, если я не отформатировал этот вопрос правильно.
У меня есть действительно простой веб-сервис, который я создал, который должен принимать значения записей и возвращать JSON-кодированный массив. Это все работало нормально, пока мне не сказали, что мне нужно будет опубликовать данные формы с типом контента application / json. С тех пор я не могу возвращать какие-либо значения из веб-службы, и это определенно связано с тем, как я фильтрую их значения.
В основном в моей локальной настройке я создал тестовую страницу, которая выполняет следующее:
$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);
На веб-сервисе у меня есть это (я лишил некоторые функции) -
<?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);
?>
В основном я знаю, что это происходит из-за того, что значения $ _POST не установлены, но я не могу найти то, что мне нужно поместить вместо $ _POST. Я пробовал json_decode ($ _ POST), file_get_contents ("php: // input") и ряд других способов, но я немного снимал в темноте.
Любая помощь будет принята с благодарностью.
Спасибо Стив
Спасибо Майклу за помощь, это был определенный шаг вперед. Теперь я, по крайней мере, получил ответ, когда повторяю сообщение .... даже если оно пустое
обновленный 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 на странице, на которой размещены данные -
$inputJSON = file_get_contents('php://input');
$input= json_decode( $inputJSON, TRUE ); //convert JSON into array
print_r(json_encode($input));
Как я уже сказал, по крайней мере, я вижу ответ сейчас, когда он возвращал пустую страницу