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?

1voto

jeremysawesome Punkte 6675

Auch ich bin auf dieses Problem gestoßen, mit denselben Ergebnissen.

  1. $_POST war leer.
  2. file_get_contents('php://input') war leer.
  3. Sogar das $_REQUEST Array war leer.

Hintergrund:

Ich habe an eine index.php Datei innerhalb eines ajax/post Verzeichnisses gepostet, d.h. ajax/post/index.php

Die URL, die ich verwendet habe, war https://beispiel.com/ajax/post.

Das Problem:

Das $_POST Array war leer, weil der Server eine 301 Weiterleitung verwendet hat, um meine Anfrage von https://beispiel.com/ajax/post nach https://beispiel.com/ajax/post/ zu verschieben. Beachten Sie den abschließenden Schrägstrich. Die Weiterleitung wurde durchgeführt, aber der gepostete Inhalt wurde nicht mitgenommen.

Die Lösung:

Versuchen Sie, einen abschließenden Schrägstrich zur URL hinzuzufügen, an die Sie posten.

Verwenden Sie anstatt von https://beispiel.com/ajax/post versuchen Sie https://beispiel.com/ajax/post/

0voto

Als ich versuchte, in PHP Daten abzurufen, habe ich "null" erhalten

{
    "product_id": "48",
    "customer_id": "2",  
    "location": "shelf",  // shelf, store <-- Kommentare verursachen Probleme in PHP
    "damage_types":{"Pests":1, "Poke":0, "Tear":0}
     // "picture":"jhgkuignk"  <-- Kommentare verursachen Probleme in PHP
}

Sie sollten vermeiden, JSON-Code zu kommentieren, auch wenn keine Fehler angezeigt werden

-3voto

Luca Reghellin Punkte 6566

Ich möchte eine Antwort veröffentlichen, die auch curl verwendet, um den Inhalt zu erhalten, und mpdf zum Speichern der Ergebnisse in eine PDF-Datei, damit Sie alle Schritte eines typischen Anwendungsfalls erhalten. Es handelt sich nur um Rohcode (der an Ihre Bedürfnisse angepasst werden muss), aber er funktioniert.

// importiere mpdf irgendwo
require_once dirname(__FILE__) . '/mpdf/vendor/autoload.php';

// erhalte eine mpdf Instanz
$mpdf = new \Mpdf\Mpdf();

// Quell-PHP-Datei
$mysrcfile = 'http://www.somesite.com/somedir/mysrcfile.php';
// wo wir die PDF speichern wollen
$mydestination = 'http://www.somesite.com/somedir/mypdffile.pdf';

// POST-Daten in JSON kodieren
$json = json_encode($_POST);

// initialisiere curl > übergib die URL der PHP-Datei, zu der wir Daten übermitteln wollen 
// und dann drucke sie als PDF aus
$ch = curl_init($mysrcfile);

// sag, dass die Ergebnisse nicht angezeigt werden sollen
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1 );

// setze die richtigen Header
curl_setopt($ch, CURLOPT_HTTPHEADER, [ 'Content-Type: application/json', 'Content-Length: ' . strlen($json) ]);

// übergebe die JSON-Daten an $mysrcfile
curl_setopt($ch, CURLOPT_POSTFIELDS, $json);

// führe curl aus und speichere die Ergebnisse
$html = curl_exec($ch);

curl_close($ch);

// parse HTML und speichere es dann in einer PDF-Datei
$mpdf->WriteHTML($html);
$this->mpdf->Output($mydestination, \Mpdf\Output\Destination::FILE);

In $mysrcfile lese ich die JSON-Daten wie folgt aus (wie in vorherigen Antworten erwähnt):

$data = json_decode(file_get_contents('php://input'));
// (dann verarbeite es und erstelle die Seitenquelle)

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