2014-01-10 4 views
0

Я пытаюсь создать webhook для отправки данных, закодированных JSON, в приемник веб-камеры пользователя.Как получить доступ к данным JSON POST в PHP?

Это, как я отправить данные:

$url = 'https://www.example.com/user-webhook-receiver.php'; 
    $data = array('title' => 'Hello', 
    'message' => 'World', 
    'url' => 'http://example.com/#check'); 

    $content = json_encode($data); 

    $curl = curl_init($url); 
      curl_setopt($curl, CURLOPT_HEADER, false); 
      curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); 
      curl_setopt($curl, CURLOPT_HTTPHEADER, 
        array("Content-type: application/json")); 
      curl_setopt($curl, CURLOPT_POST, true); 
      curl_setopt($curl, CURLOPT_POSTFIELDS, $content); 

      $json_response = curl_exec($curl); 

Как пользователь получить доступ к данным, я послал его? Я попытался это, но нет никакого содержания в нем:

$data = json_decode($_POST); 

Как получить доступ к данным?

+0

Просто отправьте массив как есть (это должно положить его в '$ _POST'). – Pietu1998

+1

Не решение как таковое, но сделайте себе одолжение и используйте Запросы для PHP вместо завитка: https://github.com/rmccue/Requests – GomoX

ответ

0

См. this question, как вам нужно кодировать CURLOPT_POSTFIELDS.

Вам нужно сделать что-то вроде:

$postdata = "content=" . urlencode($content); 

На передающей стороне.

Затем на приемной стороне:

$content = $_POST['content']; 
$content = urldecode($content); 
$json_content = json_decode($content); 

Хотя, я согласен с комментарием выше, что вы должны просто отправить массив. В чем смысл кодирования JSON, вы публикуете данные?

EDIT: чтобы просто отправить массив вы могли бы сделать:

curl_setopt($curl, CURLOPT_POSTFIELDS, $data); 

(но смотри вопрос, который я связан с для более подробной информации о том, как сделать это с кодировкой URL)

На принимающей стороны, вы могли бы сделать:

$title = $_POST['title']; 
$message = $_POST['message']; 
+0

Что вы имеете в виду, просто отправляете массив_? Можете ли вы привести мне пример? – Uli

+0

отредактированный ответ с примером – pocketfullofcheese

0

Для чтения необработанных данных POST в PHP, вы можете сделать следующее:

$data = file_get_contents('php://input'); 

Также можно передать ассоциативный массив непосредственно curl_setopt($curl, CURLOPT_POSTFIELDS, $content); - если вы сделаете это, PHP сможет автоматически преобразовать его обратно в массив в $_POST на приемном конце.

Смежные вопросы