2016-03-20 20 views
0

Ich habe versucht, einen Shopify Webhook (documentation here) über den Shopify Admin-Bereich einzurichten. Bis jetzt war ich nicht in der Lage, irgendwelche der Daten zu nehmen, die in einem Test-Webhook mit mehreren Methoden gesendet werden, aber ich weiß, dass es sendet, weil ich einen Requestbin erstellt habe und gesehen habe, dass Daten durchkommen.Empfangen von JSON in PHP und Verwendung von Daten

Ich habe dieses Stück Code hier auf Stackoverflow gefunden.

header('Access-Control-Allow-Origin: *'); 
    $postdata = file_get_contents("php://input"); 
    $file = "log.txt"; 
    $current = file_get_contents($file); 
    $current .= $postdata; 
    file_put_contents($file, $current); 

    echo $current; 

Bis jetzt ist es der einzige Code, den ich verwenden konnte, um tatsächlich JSON zu sehen. Aber ich möchte das JSON nicht jedes Mal in die Datei "log.txt" schreiben, wenn der Webhook ausgelöst wird. Aber sobald ich versuche, den Code zu entfernen oder anzupassen, sehe ich keinen JSON mehr. Es scheint, dass ich $postdata in eine Datei schreiben muss und dann den Inhalt abrufen muss, um ein Array zu erhalten.

Ist es möglich, auf den JSON zuzugreifen, ohne ihn vorher in eine andere Datei schreiben zu müssen?

+0

'$ data = json_decode (file_get_contents ('php: // input'));' sollte alles sein, was benötigt wird, um den JSON zu erhalten. Zeigt 'var_dump ($ data);' in diesem Fall nicht die richtigen Informationen? – drew010

+0

'var_dump ($ data);' gibt 'NULL' nur zurück, wenn ich' $ data = json_decode benutze (file_get_contents ('php: // input')); ' – Brendin

+0

Was bekommst du, wenn du den json_decode entfernst? Alles, was von php: // überhaupt kommt? Ich frage mich, ob einige Anfragen keine Daten enthalten oder in einem anderen Format vorliegen. – drew010

Antwort

0

So zu Beginn war mein grundlegender Denkprozess fehlerhaft, wie Webhooks funktionierten.

header('Access-Control-Allow-Origin: *'); 
$postdata = file_get_contents("php://input"); 
$file = "log.txt"; 
$current = file_get_contents($file); 
$current .= $postdata; 
file_put_contents($file, $current); 

echo $current; 

Der Grund dieser Code erforderlich war, den Inhalt von file_get_contents("php://input") in die Textdatei zu schreiben, weil die POST-Anforderung durch den Webhook Shopify gesendet, nur die Seite kurz trifft. Sobald Sie die Seite aktualisieren, verlieren Sie alle POST-Daten ... scheint offensichtlich, ich weiß. Das sagte, dass ich einen Weg brauchte, um festzustellen, ob der JSON Shopify aussendet, funktioniert auf meinem Server ganz gut. Also habe ich diese erstellt ...

$json = json_decode(file_get_contents("php://input")); 
file_put_contents('./realRequests.txt', $json->id . "\n", FILE_APPEND); 

Was das bedeutet ist, fangen die ID eines Auftrags jedes Mal Shopify die Webhook feuert, und wrties es in eine neue Zeile in einer Anfragen-Datei. Auf diese Weise wissen Sie, dass Sie Arbeitscode von shopify erhalten können.

Verwandte Themen