Variable globale ?

Réduire
X
 
  • Filtrer
  • Heure
  • Afficher
Tout effacer
nouveaux messages

  • [RÉGLÉ] Variable globale ?

    Bonjour,

    Je suis en train d'essayer de créer un plugin de paiement pour Hikashop et je bloque sur une question de variable qui n'est pas partagée.
    Dans une fonction "A", je définis les infos d'accès au serveur monétique, mais aussi une adresse ($check_url) qui va permettre d'interroger ce serveur pour savoir le statut du paiement.
    J'ai beau essayer des "global $check_url", lorsque je reviens du serveur de paiement, cette variable est vide dans la fonction "B" et je n'ai pas non plus accès aux autres infos nécessaires à sa reconstitution (URL, identifiant, mot de passe et Id de la commande).

    Dans un premier temps, j'ai créé la valeur dans la fonction A, puis utilisé une fonction à part pour la générer à partir de ces quatre valeurs. Dans les deux cas, l'adresse est bien générée et correcte.
    Dans la fonction A j'ai
    Code:
     global $check_url;
    $tmp_url = $checkpayment_url . '?orderId=' . urlencode($orderId) . '&password=' . urlencode($password) . '&userName=' . urlencode($userName) ;
    $check_url = $this->defineUrl($tmp_url) ;
    La fonction de génération dont l'espérais qu'elle me permettrait de récupérer cette variable comme globale :
    Code:
     function defineUrl($value) {
    $tmp = $value;
    global $check_url;
    $check_url = $tmp;
    return $check_url;
    }
    J'imagine et espère que c'est là que le code me permettrait de bien la transformer en globale, mais je n'arrive pas à comprendre mes erreurs.
    Et je n'ai plus que deux jours pour finaliser et permettre au client de faire ses tests avant de passer en production au plus tôt.
    Dernière édition par RobertG à 15/08/2021, 11h36
    "Patience et longueur de temps font plus que force ni que rage..." (La Fontaine : Le Lion et le Rat) - "Il n'y a pas de problèmes; il n'y a que des solutions" (André Gide).
    MoovJla et LazyDbBackup sur www.joomxtensions.com - FaQ sur www.fontanil.info - Site pro : www.robertg-conseil.fr chez PHPNET, sites perso chez PlanetHoster + sites gérés chez PHPNET, PlanetHoster, Ionos et OVH

  • #2
    Hello.

    Si je comprend bien ta demande:

    La notion de variable globale n.est plus utilisée selon les règles de programmation actuelles.
    Une variable globale est commune à tout le code (donc à l.oppose des namespaces qui au contraire cloisonnent les datas afin d.eviter les interactions non désirées)
    Un variable globale est donc accessible partout mais dans la même exécution.
    Je pense que ceci ne correspond donc pas à ton besoin surtout que tu retournes déjà check_url dans ta fonction défineurl. La mise en global est donc sans intérêt.

    Toi il te faut une variable de session dont la valeur sera retrouvé tant que la session ne sera pas détruite (dans ton exemple lors du retour vers ton serveur).

    Voir les méthodes setuserstate et getUserState de la classe japplication :


    Si tu n.a pas l.identifiant de session au retour du service délivrant l’autorisation tu risques de devoir stocker l’informAtion dans une table temporaire (ou dans ta table commandes) sur la base d.informations connues et uniques et retournées par le service tiers (numéro de commande et numéro de client par exemple).

    Généralement de tels services permettent de retourner une valeur spécifiée lors de la requête initiale (comme par exemple l.identifiant de session te permettant d.ouvrir par php la session vu que tu ne passes pas par un navigateur).
    Dernière édition par roland_d_alsace à 15/08/2021, 14h32
    cavo789 et RobertG aiment ceci.
    A tous les utilisateurs de Joomla du très Grand Est de la France et du Jura suisse
    Rejoignez le Joomla Users Groupe Alsace...
    roland_d_alsace va-t-il devenir roland_du_grand_est ?

    Commentaire


    • #3
      Merci Roland,

      Je vais essayer de m'y retrouver.
      En fait, l'accès au paiement se fait de manière complexe. Il faut une connexion avec certaines infos, et il faut récupérer la réponse qui contient une URL sécurisée qui, elle, ouvre le formulaire de paiement. Pour y arriver Nicolas, d'Hikashop, m'a fait utiliser cURL pour obtenir l'adresse en question. Au retour du formulaire, il faut ouvrir cette nouvelle adresse qui, elle, va donner l'info de succès ou pas. Il n'y a aucune doc du service monétique, et j'ai dû me servir d'un plugin pour WP pour le savoir.
      L'adresse initiale et cette adresse de test doivent être récupérées dans le paramétrage du plugin, ce qui est fait dans la fonction que j'ai appelée A. Tout ce qu'il faut transmettre au serveur est géré là, et j'en profite pour définir la deuxième adresse.
      Cette deuxième adresse demande seulement au serveur, donc avec identifiant et mot de passe, le statut de la commande dont l'Id (celle de la table des commandes) est utilisée dans la première requête.

      Donc première étape : identification et transmission de toutes les infos sur la commande et le marchand en utilisant cURL, ce qui renvoie une info avec un token et l'URL sécurisée, après enregistrement sur le serveur distant de la commande et de ses infos.
      Deuxième étape : l'URL sécurisée permet d'accéder au formulaire de paiement, avec retour vers une URL transmise lors de la première étape.
      Troisième étape : il faut interroger une autre adresse avec simplement les infos d'identification et l'Id de commande, et c'est là que ça coince, alors même que ces infos ont déjà été mises dans une variable. Le décodage des infos retournées permet de récupérer la valeur "Success" en cas de validation réussie.

      Tellement habitué à programmer pour Windows, bien que ça ait cessé il y a 15 ans, j'ai du mal à comprendre pourquoi une valeur ne peut pas être partagée de manière simple.

      J'ai eu du mal avec ces variables de session, mais ça y est ! Ouf, merci Roland !
      Je récupère bien l'adresse voulue. Reste l'étape d'interrogation pour obtenir le statut de la commande et laisser le code standard du plugin gérer la mise à jour de la commande.
      "Patience et longueur de temps font plus que force ni que rage..." (La Fontaine : Le Lion et le Rat) - "Il n'y a pas de problèmes; il n'y a que des solutions" (André Gide).
      MoovJla et LazyDbBackup sur www.joomxtensions.com - FaQ sur www.fontanil.info - Site pro : www.robertg-conseil.fr chez PHPNET, sites perso chez PlanetHoster + sites gérés chez PHPNET, PlanetHoster, Ionos et OVH

      Commentaire


      • #4
        J'ai eu du mal, mais je sais maintenant récupérer le statut ! Contrairement à ce que j'ai dit, c'est en fait bien une valeur à rallonge générée par le servive monétique qui permet de connaître les différentes données.
        Il ne reste plus que la dernière étape de changement du statut de la commande.
        "Patience et longueur de temps font plus que force ni que rage..." (La Fontaine : Le Lion et le Rat) - "Il n'y a pas de problèmes; il n'y a que des solutions" (André Gide).
        MoovJla et LazyDbBackup sur www.joomxtensions.com - FaQ sur www.fontanil.info - Site pro : www.robertg-conseil.fr chez PHPNET, sites perso chez PlanetHoster + sites gérés chez PHPNET, PlanetHoster, Ionos et OVH

        Commentaire


        • #5
          Bonjour,

          Pour éviter de créer une nouvelle discussion, et dans la mesure où la question concerne le même plugin, je la pose ici, à propos de la conversion de stdClass Object en Array,
          Ce que j'ai trouvé sur le web ne m'a en effet pas permis de résoudre ce problème.
          Je récupère des infos avec cURL, mais le décodage me renvoie un stClass Object ($data) que j'aimerais transformer en Array
          Code:
           $ch = curl_init();
          curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
          curl_setopt($ch, CURLOPT_URL, $verif_url);
          curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
          $result = curl_exec($ch);
          curl_close($ch);
          $data = json_decode($result);
          J'ai déclaré une variable de type tableau sans comprendre comment y mettre les données (sur deux colonnes : nom et valeur, comme c'est le cas dans l'objet)
          Code:
          $vars = array();
          Y aurait-il une méthode simple ?

          Merci de vos conseils !
          "Patience et longueur de temps font plus que force ni que rage..." (La Fontaine : Le Lion et le Rat) - "Il n'y a pas de problèmes; il n'y a que des solutions" (André Gide).
          MoovJla et LazyDbBackup sur www.joomxtensions.com - FaQ sur www.fontanil.info - Site pro : www.robertg-conseil.fr chez PHPNET, sites perso chez PlanetHoster + sites gérés chez PHPNET, PlanetHoster, Ionos et OVH

          Commentaire


          • #6
            Bien, en utilisant à la suite
            Code:
            $vars = json_decode(json_encode($data), true);
            j'obtiens bien un tableau
            Code:
            Array (
            [expiration] => 202512
            [cardholderName] => moimeme
            [depositAmount] => 0
            [currency] => 788
            [authCode] => 2
            [ErrorCode] => 2
            [ErrorMessage] => Payment is declined
            [OrderStatus] => 6
            [OrderNumber] => 172
            [Pan] => 455769**1113
            [Amount] => 30000
            [Ip] => 172.17.3.50 )
            cavo789 aime ceci.
            "Patience et longueur de temps font plus que force ni que rage..." (La Fontaine : Le Lion et le Rat) - "Il n'y a pas de problèmes; il n'y a que des solutions" (André Gide).
            MoovJla et LazyDbBackup sur www.joomxtensions.com - FaQ sur www.fontanil.info - Site pro : www.robertg-conseil.fr chez PHPNET, sites perso chez PlanetHoster + sites gérés chez PHPNET, PlanetHoster, Ionos et OVH

            Commentaire

            Annonce

            Réduire
            Aucune annonce pour le moment.

            Partenaire de l'association

            Réduire

            Hébergeur Web PlanetHoster
            Travaille ...
            X