J'essaie de recevoir un JSON POST sur un site Web d'interface de paiement, mais je ne peux pas le décoder.
Quand j'imprime:
echo $_POST;
Je reçois:
Array
Je ne reçois rien quand j'essaye ceci:
if ( $_POST ) {
foreach ( $_POST as $key => $value ) {
echo "llave: ".$key."- Valor:".$value."<br />";
}
}
Je ne reçois rien quand j'essaye ceci:
$string = $_POST['operation'];
$var = json_decode($string);
echo $var;
J'obtiens NULL lorsque j'essaye ceci:
$data = json_decode( file_get_contents('php://input') );
var_dump( $data->operation );
Quand je fais:
$data = json_decode(file_get_contents('php://input'), true);
var_dump($data);
Je reçois:
NULL
Le format JSON est (selon la documentation du site de paiement):
{
"operacion": {
"tok": "[generated token]",
"shop_id": "12313",
"respuesta": "S",
"respuesta_details": "respuesta S",
"extended_respuesta_description": "respuesta extendida",
"moneda": "PYG",
"monto": "10100.00",
"authorization_number": "123456",
"ticket_number": "123456789123456",
"response_code": "00",
"response_description": "Transacción aprobada.",
"security_information": {
"customer_ip": "123.123.123.123",
"card_source": "I",
"card_country": "Croacia",
"version": "0.3",
"risk_index": "0"
}
}
}
Le journal du site de paiement indique que tout est OK. Quel est le problème?
var_dump($_POST)
dit-on? Est-ce un tableau vide?json_decode
. Mais peut-être que le service envoie des données dans le corps de la demande , c'est une autre histoire et oui, celafile_get_contents('php://input')
devrait fonctionner alors.Réponses:
Essayer;
D'après votre json et votre code, il semble que vous ayez orthographié correctement le mot opération de votre côté, mais ce n'est pas dans le json.
ÉDITER
Peut-être vaut-il aussi la peine d'essayer de faire écho à la chaîne json de l'entrée php: //.
la source
Si vous avez déjà vos paramètres définis comme $ _POST ['eg'] par exemple et que vous ne souhaitez pas le changer, faites-le simplement comme ceci:
Cela vous évitera les tracas de changer tous les $ _POST en quelque chose d'autre et vous permettra de toujours faire des demandes de publication normales si vous souhaitez supprimer cette ligne.
la source
Il convient de noter que si vous utilisez
json_decode(file_get_contents("php://input"))
(comme d'autres l'ont mentionné), cela échouera si la chaîne n'est pas JSON valide.Cela peut être simplement résolu en vérifiant d'abord si le JSON est valide. c'est à dire
Edit: Notez que la suppression
strlen($json_params)
ci-dessus peut entraîner des erreurs subtiles, commejson_last_error()
cela ne change pas quandnull
ou une chaîne vide est passée, comme indiqué ici: http://ideone.com/va3u8Ula source
Utilisez
$HTTP_RAW_POST_DATA
au lieu de$_POST
.Il vous donnera les données POST telles quelles.
Vous pourrez le décoder
json_decode()
ultérieurement.la source
$json = file_get_contents('php://input'); $obj = json_decode($json);
$HTTP_RAW_POST_DATA
.Lisez le doc:
comme dans le manuel php
la source
Cela a fonctionné pour moi.
la source
Je voudrais publier une réponse qui utilise également curl pour obtenir le contenu, et mpdf pour enregistrer les résultats dans un pdf, afin que vous obteniez toutes les étapes d'un cas d'utilisation typique. Ce n'est que du code brut (donc à adapter à vos besoins), mais ça marche.
Dans $ mysrcfile, je vais lire des données json comme celle-ci (comme indiqué dans les réponses précédentes):
la source
file_get_contents('php://input')
.