Umgang mit POST-Daten, die von der Blockcypher WebHook-API gesendet werden

Ich habe die letzten 3 Tage versucht, dies zum Laufen zu bringen, und ich habe es so gut wie aufgegeben. Grundsätzlich habe ich requestb.in verwendet, um zu überwachen, ob POST-Anforderungen durchlaufen werden. requestb.in zeigt immer eine Antwort an. Ich kann dies jedoch nicht auf meiner eigenen Website replizieren.

Ich kann einfach keine Möglichkeit finden, den Text der Antwort zu lesen, die an meinen Server zurückgerufen wird.

Als Referenz verwende ich dieses von BlockCypher bereitgestellte Beispiel:

 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;

Ich hatte die Rückruf-URL mit requestb.in getestet:

http://requestb.in/zphhv1zp?inspect

Ich bin verrückt geworden und habe alles getestet, was ich online finden konnte, aber nichts hat mir wirklich geholfen. Was sollte ich verwenden, um die POST-Daten abzurufen?

PS: Dies ist der Code, den ich zuletzt getestet habe

<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>
Während Sie den Code zeigen, den Sie zum Erstellen des Webhook verwenden, zeigen Sie nicht, wie Sie die Daten lesen, die von BlockCypher gepostet werden. In PHP ist $_POST nur für Formulare gültig, während die Daten von BlockCypher POSTs ein JSON-Dokument sind. Um auf den Hauptteil eines regulären POST (non-form) in PHP zuzugreifen, verwenden Sie file_get_contents('php://input').
@Matthieu danke für deine Antwort. Ich habe diesen Ansatz gesehen und vergeblich versucht, ihn umzusetzen. Aus irgendeinem Grund hat php://input nichts zurückgegeben, was nicht der Fall sein sollte, da ich sicher weiß, dass der Webhook Daten an meine Rückruf-URL sendet.

Antworten (1)

Vollständige Offenlegung: Ich bin BlockCyphers Developer Advocate.

Ich bin kein PHP-Experte, aber ich weiß, dass einige unserer Kunden Probleme beim Lesen von Rückgabedaten aus PHP hatten. Dieser Thread zu Stack Overflow könnte helfen:

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