417 Stimmen

Empfangen Sie JSON POST mit PHP

Ich versuche, einen JSON-POST auf einer Zahlungsschnittstellen-Website zu empfangen, aber ich kann ihn nicht decodieren.

Wenn ich drucke :

echo $_POST;

Erhalte ich:

Array

Ich erhalte nichts, wenn ich dies versuche:

if ( $_POST ) {
    foreach ( $_POST as $key => $value ) {
        echo "Schlüssel: ".$key."- Wert:".$value."";
    }
}

Ich erhalte nichts, wenn ich dies versuche:

$string = $_POST['operation'];
$var = json_decode($string);
echo $var;

Ich erhalte NULL, wenn ich dies versuche:

$data = json_decode( file_get_contents('php://input') );
var_dump( $data->operation );

Wenn ich dies mache:

$data = json_decode(file_get_contents('php://input'), true);
var_dump($data);

Erhalte ich:

NULL

Das JSON-Format laut Dokumentation der Zahlungsseite ist:

{
   "operacion": {
       "tok": "[generiertes Token]",
       "shop_id": "12313",
       "antwort": "S",
       "antwort_details": "Antwort S",
       "erweiterte_antwort_beschreibung": "erweiterte Antwort",
       "währung": "PYG",
       "betrag": "10100.00",
       "autorisierungsnummer": "123456",
       "ticketnummer": "123456789123456",
       "antwortcode": "00",
       "antwortbeschreibung": "Transaktion genehmigt.",
       "sicherheitsinformation": {
           "kunden_ip": "123.123.123.123",
           "kartentyp": "I",
           "karteland": "Kroatien",
           "version": "0.3",
           "risikoindex": "0"
       }
    }
}

Das Zahlungsseitenprotokoll sagt, dass alles in Ordnung ist. Was ist das Problem?

12voto

hyperCoder Punkte 231
$data = file_get_contents('php://input');
echo $data;

Dies hat für mich funktioniert.

11voto

Enamul Haque Punkte 3981

Sie können es wie folgt verwenden... JSON wie unten posten

Bildbeschreibung hier eingeben

Daten aus dem PHP-Projekt des Benutzers unten abrufen

// Rohdaten aus der Anfrage abrufen 
$json = file_get_contents('php://input');
// Konvertiert es in ein PHP-Objekt 
$data = json_decode($json, true);

 echo $data['Anforderungscode'];
 echo $data['Mobilnummer'];
 echo $data['Passwort'];

5voto

sifr_dot_in Punkte 2400

Ganz spät.
Es scheint, dass (OP) bereits alle ihm gegebenen Antworten ausprobiert hatte.
Wenn Sie (OP) jedoch nicht das erhalten haben, was an die ".PHP"-Datei übermittelt wurde, könnte der Fehler in der falschen URL liegen.
Überprüfen Sie, ob Sie die richtige ".PHP"-Datei aufrufen.
(Rechtschreibfehler oder Großbuchstaben in der URL)
und am wichtigsten
Überprüfen Sie, ob Ihre URL nach "http" ein "s" (sicher) enthält.
Beispiel:

"http://yourdomain.com/read_result.php"

sollte sein

"https://yourdomain.com/read_result.php"

oder umgekehrt.
fügen Sie das "s" hinzu oder entfernen Sie es, um Ihre URL anzupassen.

4voto

JonathanC Punkte 152

Wenn alle oben genannten Antworten immer noch zu einer NULL-Eingabe für POST führen, beachten Sie, dass bei POST/JSON in einer lokalen Umgebung dies daran liegen könnte, dass Sie kein SSL verwenden. (vorausgesetzt, Sie sind HTTP mit tcp/tls und nicht udp/quic)

PHP://input wird auf non-https null sein und wenn Sie eine Umleitung im Ablauf haben, versuchen Sie, https in Ihrer lokalen Umgebung als Standardpraxis zu konfigurieren, um verschiedene Probleme mit Sicherheit/xss usw. zu vermeiden

1voto

Daan Bakker Punkte 6002

Das Dekodieren könnte fehlschlagen (und null zurückgeben), weil der PHP-Magic-Quotes aktiviert sind.

Wenn Magic Quotes aktiviert ist, werden beim Lesen von _POST/_REQUEST/etc. Sonderzeichen wie "\ enthalten, die auch Teil des JSON-Escapes sind. Der Versuch, diesen maskierten String mit json_decode( zu dekodieren, schlägt fehl. Es handelt sich um ein veraltetes Feature, das bei einigen Hostern immer noch aktiviert ist.

Workaround, der überprüft, ob Magic Quotes aktiviert sind und sie gegebenenfalls entfernt:

function strip_magic_slashes($str) {
    return get_magic_quotes_gpc() ? stripslashes($str) : $str;
}

$operation = json_decode(strip_magic_slashes($_POST['operation']));

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X