IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

extraire les données JSON d'une méthode POST envoyées aux serveur par un autre serveur


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Avril 2004
    Messages
    513
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 513
    Par défaut extraire les données JSON d'une méthode POST envoyées aux serveur par un autre serveur
    Bonjour à toutes et tous

    Je veux faire des paiements en ligne par carte bancaire avec HelloAsso.

    l'adhérent arrive au paiement, il effectue le paiement, il est redirigé vers une page lui indiquant que son paiement est accepté !
    "HelloAsso" accepte le paiement et renvoie sur une url "callback" 2 notifications une de "payment" et une de "order".
    Mon problème est que je dois réaliser cette page de l'url callback !
    Donc je crée la page PHP mais lorsqu'elle est appelé par "HelloAsso" moi sur mon PC à distance du serveur je ne vois rien de ce qui se passe!

    1) j'aurais voulu savoir s'il y a un moyen de visualiser l'exécution de cette page php lorsqu'elle est appelée.

    2) sinon pour l'instant dans la page "callback" je déclenche l'envoi d'un mail vers ma boite de réception!

    3)Cette page "callback" reçoit de "helloAsso" la notification en méthode POST avec des données au format JSON
    je veux extraire ces données pour déchiffrer le contenu de la notification.
    j'ai trouvé ce bout de code pour lire la chaine de donnée
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    $json_data = file_get_contents('php://input');
    $tab_rep = json_decode($json_data, true);
    maintenant que j'ai $tab_rep je peux en extraire les données:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    foreach ($tab_rep as $cle => $valeur) {
    $test = $test .' nbreligne '.count($cle).'  '. $cle.' =>'.$valeur.'<br/>';
    }
    $nbre_ligne_data=count($tab_rep);
    $long_chaine = strlen($json_data);
    et j'envoi $test et $nbre_ligne_data et $long_chaine dans un mail que je lis et j'ai en réponse :
    nbreligne 1 data =>Array
    nbreligne 1 eventType =>Order
    nbre_ligne_data = 2
    long_chaine = 1190
    ce qui veut dire que la chaine n'est pas vide et qu'il a 2 données Json dans $tab_rep, alors que l' array "data" est bien chargé mais je n'arrive pas à l'extraire.
    (J'ai un modèle des données Json que je dois extraire)
    {
    "data":
    {"payer":
    {"dateOfBirth": "2022-08-30T00:00:00+02:00",
    "email": "gnf5200@gmail.com",
    "country": "FRA",
    "firstName": "Marc",
    "lastName": "DUDULE"},
    "order":
    {"id": 323,
    "date": "2022-09-09T01:01:35.1996774+02:00",
    "formSlug": "default",
    "formType": "Checkout",
    "organizationName": "GYM NATURE FORME",
    "organizationSlug": "gym nature forme",
    "formName": "Checkout",
    "meta":
    {"createdAt": "0001-01-01T00:00:00+00:00",
    "updatedAt": "0001-01-01T00:00:00+00:00"},
    "isAnonymous": false,
    "isAmountHidden": false},
    "items":
    [{"shareAmount": 10766,
    "shareItemAmount": 10766,
    "id": 323,
    "amount": 32300,
    "type": "Payment",
    "state": "Processed"}],
    "cashOutState": "MoneyIn",
    "paymentReceiptUrl": "https://www.helloasso-sandbox.com/associations/gym-nature-forme/checkout/paiement-attestation/323",
    "id": 141,
    "amount": 10766,
    "date": "2022-09-09T01:01:35.1996774+02:00",
    "paymentMeans": "Card",
    "state": "Authorized",
    "meta":
    {"createdAt": "2022-09-09T01:00:48.6801924+02:00",
    "updatedAt": "2022-09-09T01:01:35.2633333+02:00"}
    },
    "eventType": "Payment"
    }
    J'espère être assez clair Merci d'avance

  2. #2
    Membre émérite
    Homme Profil pro
    Autre
    Inscrit en
    Juillet 2021
    Messages
    436
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Autre

    Informations forums :
    Inscription : Juillet 2021
    Messages : 436
    Par défaut
    Bonjour,

    1 et 2) Tu peux utiliser la journalisation (logging) pour enregistrer les informations à analyser dans un fichier log au lieu d'envoyer un mail (voir la fonction PHP error_log).

    3) Après json_decode, ta variable $tab_rep est un tableau qui contient 2 clés 'data' et 'eventType'.
    La valeur de $tab_rep['eventType'] est la chaîne "Payment" d'après le modèle json.
    La valeur de $tab_rep['data'] est un tableau qui contient lui-même plusieurs clés 'payer', 'order', 'items', 'cashOutState' etc...

    Tu peux créer un autre script PHP et copier le modèle json dans la variable $json_data le temps de tester l'extraction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    <?php
     
    $json_data = '{
    "data":
    {"payer":
    {"dateOfBirth": "2022-08-30T00:00:00+02:00",
    "email": "gnf5200@gmail.com",
    "country": "FRA",
    "firstName": "Marc",
    "lastName": "DUDULE"},
    "order":
    {"id": 323,
    "date": "2022-09-09T01:01:35.1996774+02:00",
    "formSlug": "default",
    "formType": "Checkout",
    "organizationName": "GYM NATURE FORME",
    "organizationSlug": "gym nature forme",
    "formName": "Checkout",
    "meta":
    {"createdAt": "0001-01-01T00:00:00+00:00",
    "updatedAt": "0001-01-01T00:00:00+00:00"},
    "isAnonymous": false,
    "isAmountHidden": false},
    "items":
    [{"shareAmount": 10766,
    "shareItemAmount": 10766,
    "id": 323,
    "amount": 32300,
    "type": "Payment",
    "state": "Processed"}],
    "cashOutState": "MoneyIn",
    "paymentReceiptUrl": "https://www.helloasso-sandbox.com/associations/gym-nature-forme/checkout/paiement-attestation/323",
    "id": 141,
    "amount": 10766,
    "date": "2022-09-09T01:01:35.1996774+02:00",
    "paymentMeans": "Card",
    "state": "Authorized",
    "meta":
    {"createdAt": "2022-09-09T01:00:48.6801924+02:00",
    "updatedAt": "2022-09-09T01:01:35.2633333+02:00"}
    },
    "eventType": "Payment"
    }';
     
    $tab_rep = json_decode($json_data, true);
     
    echo $tab_rep['eventType']; // Payment
    echo $tab_rep['data']['payer']['email']; // gnf5200@gmail.com
     
    foreach ($tab_rep['data']['items'] as $item) {
        echo $item['id'];
    }

  3. #3
    Membre éclairé
    Inscrit en
    Avril 2004
    Messages
    513
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 513
    Par défaut
    Bonjour
    Merci pour cette réponse

    mais avec cette méthode il faut que j'aie exactement le noms des différents champs !
    remarque je suppose que leur modèle d'envoi ne change pas ?

    je vais étudier ça merci
    je fais des tests et mets résolu plus tard

  4. #4
    Membre émérite
    Homme Profil pro
    Autre
    Inscrit en
    Juillet 2021
    Messages
    436
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Autre

    Informations forums :
    Inscription : Juillet 2021
    Messages : 436
    Par défaut
    Tu supposes bien, réfère-toi à la documentation : https://api.helloasso.com/v5/swagger/ui/index
    Voir la partie "Handling the notifications system" qui te renvoie pour la notification "Payment" en bas de page dans Models > HelloAsso.Api.V5.Models.Orders.PaymentDetail

  5. #5
    Membre éclairé
    Inscrit en
    Avril 2004
    Messages
    513
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 513
    Par défaut
    apparemment tu connais hello asso !

    justement quand je suis allé dans la doc : Gestion du système de notifications/Obtenir le contenu de la notification/Résultat du paiement (JSON)/ Les données du formulaire. Voir plus d'informations sur le modèle de formulaire ci-dessous
    cette url retourne sur la page supérieur.

  6. #6
    Membre émérite
    Homme Profil pro
    Autre
    Inscrit en
    Juillet 2021
    Messages
    436
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Autre

    Informations forums :
    Inscription : Juillet 2021
    Messages : 436
    Par défaut
    L'ancre html dans le lien ne fonctionne pas si tu n'as pas ouvert le menu "Models" en bas de page.

    Ouvre le menu Models en bas de page puis clique sur le lien ou recherche directement le modèle de données qui t’intéresse (PaymentDetail).

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 0
    Dernier message: 15/09/2017, 10h13
  2. Réponses: 0
    Dernier message: 10/05/2016, 16h03
  3. [Débutant] Extraire les données UNIQUE d'une colonne de listView
    Par kitcarflo dans le forum VB.NET
    Réponses: 4
    Dernier message: 25/05/2014, 21h09
  4. [MySQL] Extraire les données à partir d'une liste déroulante dans une autre liste deroulante
    Par Amel_B dans le forum PHP & Base de données
    Réponses: 9
    Dernier message: 26/11/2008, 13h20
  5. Extraire les données ID3 d'une musique
    Par FluidBlow dans le forum C++Builder
    Réponses: 2
    Dernier message: 04/10/2006, 20h04

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo