Cómo manejar los datos POST enviados desde Blockcypher WebHook API

He estado tratando de hacer que esto funcione durante los últimos 3 días y casi me he dado por vencido. Básicamente, he usado requestb.in para monitorear si se está procesando alguna solicitud POST; requestb.in siempre muestra una respuesta. Sin embargo, no puedo replicar esto en mi propio sitio web.

Simplemente no puedo encontrar una manera de leer el cuerpo de la respuesta que se está devolviendo a mi servidor.

Como referencia, estoy usando esta muestra proporcionada por BlockCypher:

 require __DIR__ . '/../bootstrap.php';

$webHook = new \BlockCypher\Api\WebHook();
$webHook->setUrl("http://mysite.com/dev/data/index.php");
$webHook->setEvent('unconfirmed-tx');

/// For Sample Purposes Only.
$request = clone $webHook;

$webHookClient = new \BlockCypher\Client\WebHookClient($apiContexts['BTC.main']);

/// Create WebHook
try {
    $output = $webHookClient->create($webHook);
} catch (Exception $ex) {
    ResultPrinter::printError("Created WebHook", "WebHook", null, $request, $ex);
    exit(1);
}

ResultPrinter::printResult("Created WebHook", "WebHook", $output->getId(), $request, $output);

return $output;

Probé la URL de devolución de llamada usando requestb.in:

http://requestb.in/zphhv1zp?inspect

Me he vuelto loco probando todo lo que pude encontrar en línea, pero nada realmente me ayudó. ¿Qué debo usar para recuperar los datos POST?

PD: este es el código que he estado probando más recientemente

<html lang="en">
<head>
</head>
<body>
    <?php
        $url = "http://requestb.in/zphhv1zp";
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        $data = curl_exec($ch);
        curl_close($ch);
        echo $data;

        // $inputJSON = file_get_contents('');
        // $input = json_decode( $inputJSON, TRUE );
        // echo $input['hash'];
    ?>
</body>
</html>
Mientras muestra el código que está utilizando para crear el webhook, no muestra cómo está leyendo los datos que publica BlockCypher. En PHP, $_POST solo es válido para formularios, mientras que los datos POST de BlockCypher son un documento JSON. Para acceder al cuerpo de un POST regular (sin formulario) en PHP, use file_get_contents('php://input').
@Matthieu gracias por su respuesta. He visto ese enfoque y he tratado de implementarlo en vano. Por alguna razón, php://input no devolvió nada, lo que no debería ser el caso, ya que sé con certeza que el webhook está enviando datos a mi URL de devolución de llamada.

Respuestas (1)

Divulgación completa: soy el defensor de los desarrolladores de BlockCypher .

No soy un experto en PHP, pero sé que varios de nuestros clientes han tenido problemas para leer los datos de retorno de PHP. Este hilo en Stack Overflow podría ayudar:

https://stackoverflow.com/questions/8945879/how-to-get-body-of-a-post-in-php