Récupérer variable

Par c.attia, il y a 8 ans


Bonjour,

Je crée un site internet e-commerce avec paypal, en HTML/CSS et PHP. Mon site internet est un site ou l'utilisateur se connecte, rempli un formulaire avec un identifiant et un mot de passe, choisi les objets qu'il lui plait, les payent avec paypal. Mais lorsque je revient du Paypal Chekout, j'aimerai écrire 'Bonjour Dupont Antoine tu as bien acheter ce t-shirt précis'. Mon problème est que je n'arrive pas à récupérer les variables $SESSION créées dans une autre page.
Merci de votre aide

12 réponses

c.attia, il y a 8 ans

Voici ma page de retour du paypal checkout ( j'ai le même paypal.php que le tuto paypal checkout du site) Mais lorsque je fais mon echo SESSION['Nom'] rien ne s'affiche :

<div class="saluteleve"> <h1> Votre achat s'est bien passé ! <?php echo $_SESSION['Nom'];?> Vous recevrez un email confirmant votre achat. <br/> </h1> </div>

Alors que j'ai enregistrer cette variable lors d'un formulaire

Guique, il y a 8 ans

Est-ce que cette page commence bien par un session_start() ?
Qu'est ce que tu obtiens en faisant un var_dump($_SESSION) ?

c.attia, il y a 8 ans

J'ai mis le session_start juste avec le DOCTYPE HTML
Lorsque je fais le var_dump il écrit toute mes variables que j'ai enregistrées mais elles sont égales a null, alors que juste avant le paiement sur Paypal les variables sont bonnes

Guique, il y a 8 ans

Est-ce que tu peux mettre ton code en prenant soit de cacher tes clés Paypal s'il te plait ?

c.attia, il y a 8 ans

Oui tout fonctionne comme prévu ! Merci beaucoup ! Maintenant comment mettre ce sujet en résolu ?

c.attia, il y a 8 ans

Bien sur, et de toute manière je suis sur Sandbox :
Voici ma classe Paypal.php :

<?php class Paypal{ private $user = "unbusiness_api1.hotmail.com"; private $pwd = "x"; private $signature = "x"; private $endpoint = "https://api-3t.sandbox.paypal.com/nvp"; public $errors = array(); public function __construct($user = false, $pwd = false, $signature = false, $prod = false){ if($user){ $this->user = $user; } if($pwd){ $this->pwd = $pwd; } if($signature){ $this->signature = $signature; } if($prod){ $this->endpoint = str_replace('sandbox.','', $this->endpoint); } } public function request($method, $params){ $params = array_merge($params, array( 'METHOD' => $method, 'VERSION' => '74.0', 'USER' => $this->user, 'SIGNATURE' => $this->signature, 'PWD' => $this->pwd )); $params = http_build_query($params); $curl = curl_init(); curl_setopt_array($curl, array( CURLOPT_URL => $this->endpoint, CURLOPT_POST=> 1, CURLOPT_POSTFIELDS => $params, CURLOPT_RETURNTRANSFER => 1, CURLOPT_SSL_VERIFYPEER => false, CURLOPT_SSL_VERIFYHOST => false, CURLOPT_VERBOSE => 1 )); $response = curl_exec($curl); $responseArray = array(); parse_str($response, $responseArray); if(curl_errno($curl)){ $this->errors = curl_error($curl); curl_close($curl); return false; }else{ if($responseArray['ACK'] == 'Success'){ curl_close($curl); return $responseArray; }else{ $this->errors = $responseArray; curl_close($curl); return false; } } } }

Voici mon code lorsque l'utilisateur appuis sur le bouton 'Acheter' :

<?php require 'paypal.php'; $total = 19.0; $totalttc = 19.0; $port = 0.99; $paypal = "#"; $paypal = new Paypal(); $params = array( 'RETURNURL' => 'http://localhost/test/achat.php', 'CANCELURL' => 'http://localhost/tes/Paypal/cancel.php', 'PAYMENTREQUEST_0_AMT' => $totalttc + $port, 'PAYMENTREQUEST_0_CURRENCYCODE' => 'EUR', 'PAYMENTREQUEST_0_SHIPPINGAMT' => $port, 'PAYMENTREQUEST_0_ITEMAMT' => $totalttc, 'L_PAYMENTREQUEST_0_NAME0' => "Formule 1", 'L_PAYMENTREQUEST_0_DESC' => '', 'L_PAYMENTREQUEST_0_AMT0' => 19.0, 'L_PAYMENTREQUEST_0_QTY0' =>1, ); $response = $paypal->request('SetExpressCheckout', $params); if($response){ $paypal = 'https://www.sandbox.paypal.com/webscr?cmd=_express-checkout&useraction=commit&token=' . $response['TOKEN']; }else{ var_dump($paypal->errors); die('Erreur '); } ?>
Guique, il y a 8 ans

D'accord. Et le code où tu définies ta session avant Paypal ?

c.attia, il y a 8 ans
while ($donnees = $reponse->fetch()) { ?> <?php if( $_POST['mot_de_passe'] != $donnees['mot_de_passe'] ) { header('Location: index.php'); } ?> <div class="saluteleve"> <h1> Bonjour <?php echo $donnees['nom'];?> <?php echo $donnees['prenom'];?> <?php echo $donnees['classe'];?><br/> </h1> </div> <?php } $_SESSION['Nom'] = $donnees['nom']; $_SESSION['Prenom'] = $donnees['prenom']; $_SESSION['Classe'] = $donnees['classe']; ?>
Guique, il y a 8 ans

Ok. Il semblerait que lorsque Paypal renvoie vers ton site, la demande vient de Paypal et non de l'utilisateur.
Ta session est donc vide puisqu'il s'agit de la session de Paypal.

c.attia, il y a 8 ans

Oui, c'est dans RETURNURL, j'ai l'impression qu'il efface les valeurs

c.attia, il y a 8 ans

Alors j'ai trouver la bêtise que j'ai fait.
J'ai mis dans SESSION des valeurs provenant de ma bdd, il étaient null de base. Donc c'était normal que ca ne marche pas au final.

Guique, il y a 8 ans

Du coup ça fonctionne ? Ta session reste inchangé au retour de Paypal ?