osCommerce France : Accueil Forum Portail osCommerce France Réponses aux questions Foire aux contributions

Bienvenue invité ( Connexion | Inscription )

> Problème de validation commande ATOS et php5.3
Gnidhal
posté 14 Feb 2012, 21:07
Message #1


5eme dan OSC
Icône de groupe

Groupe : Administrateur
Messages : 9221
Inscrit : 4-March 03
Lieu : Pau
Membre no 927



Bonjour à tous,
Après avoir du mettre à jour ma version de PHP sur mon dédié j'ai rencontré un problème de validation des commandes payées par Citélis via Atos.
Notez au passage que Citélis n'a rien à voir là dedans car Atos est aussi utilisé par de nombreux autres systèmes de paiement.
Je voulais passer en php 5.2.x mais mon système de mise à jour Plesk m'a obligé à prendre un PHP 5.3.3
Bon, ok, mes scripts étaient prêts pour le 5.3 mais j'ai rencontré le problème des retours de paiement maintes fois cités ici pour lequel aucune réponse n'a été trouvée.


Des dizaines d'essais, des traceurs dans les scripts, l'observation des logs m'ont amené à constater que la session n'était pas récupérée dans checkout_process.php directement appelé par le serveur de la banque.
Le module Atos comporte en effet 3 lignes qui doivent normalement être renseignées comme suit :
Code
      $command .= " " . $this->os_info['quote'] . "normal_return_url=" . tep_href_link('atos_response.php', tep_session_name() . '=' . tep_session_id(), $request_type, false) . $this->os_info['quote'];
      $command .= " " . $this->os_info['quote'] . "cancel_return_url=" . tep_href_link('atos_response.php', tep_session_name() . '=' . tep_session_id(), $request_type, false) . $this->os_info['quote'];
      $command .= " " . $this->os_info['quote'] . "automatic_response_url=" . tep_href_link(FILENAME_CHECKOUT_PROCESS, tep_session_name() . '=' . tep_session_id(), $request_type, false) . $this->os_info['quote'];

On voit que le retour de validation se fait directement sur checkout_process avec en paramètre GET l'identifiant de session alors que les autres retours se font via atos_response
Mais si votre boutique n'utilise pas le SSL cela pose problème : l'id de session n'est pas rechargé et donc les infos de panier et du client sont absentes.

J'ai réussi à fixer cela très simplement comme suit:
dans application_top.php rechercher :
Code
// set the session ID if it exists
   if (isset($_POST[tep_session_name()])) {
     tep_session_id($_POST[tep_session_name()]);
   } elseif ( ($request_type == 'SSL') && isset($_GET[tep_session_name()]) ) {
     tep_session_id($_GET[tep_session_name()]);
   }
et le modifier en
Code
// set the session ID if it exists
   if (isset($_POST[tep_session_name()])) {
     tep_session_id($_POST[tep_session_name()]);
   } elseif ( isset($_POST['DATA']) && isset($_GET[tep_session_name()]) ) {
     tep_session_id($_GET[tep_session_name()]);
   } elseif ( ($request_type == 'SSL') && isset($_GET[tep_session_name()]) ) {
     tep_session_id($_GET[tep_session_name()]);
   }

et hop, ça roule. smile.gif
Notez au passage que j'ai remplacé $HTTP_POST_VARS par $_POST car la notation $HTTP_XXX_VARS est obsolète et normalement liée à une utilisation register_globals sur on ce qui n'est plus d'actualité dans les version 2.3.1 et suivantes.

Tous les autres bricolos proposés ici et là sont ineffectifs et attention, la dernière version du module Atos proposée par Telede (2.8.1) comporte une erreur que je fixerai dès que possible proprement :
lignes 178 à 180 on a :
Code
      // Adjust cart
      //
      $product_query = tep_db_query('DELETE FROM ' . TABLE_CUSTOMERS_BASKET . ' WHERE customers_id = "' . (int)$customer_id . '" AND customers_basket_id NOT IN (' . $customers_basket_ids . ')');

commentez la ligne 180 qui présente 2 erreurs : une de syntaxe dans la requête, un autre dans le fait que la variable $customer_id n'existe pas ici car elle n'est pas globale.
Comme cette ligne n'est pas vitale pour le fonctionnement ou la sécurité, j'ai choisi de la supprimer simplement. Je ferai un update de la contribution ultérieurement.


--------------------
Tout d'abord : - Ni Hotline ni Service Après Vente, ces forums sont un lieu d'échange. BIEN POSER SA QUESTION (généralités)
Les "Informations Importantes" que vous devez ABSOLUMENT avoir lues :
Règlement, Bien poser sa question dans ces forums et Bien utiliser les Forums.
Les raccourcis pour gagner du temps : la FAQ, les PDF de la Doc (MS2-fr): PDF-V1 et PDF-V2, le moteur de Recherche sur les forums , la Liste des Contributions de Corbin.

----------------------------- Quelques sites de référence ---------------------------
PHP: Le site du Zéro et PHP Débutant avec la DOC en français -- HTML: Self HTML - WebProgrammation -- CSS: OpenWeb - AlsaCréations - CSS/Edge -- Autres ressources: - XajaX - highslide js
Les bons outils : EasyPHP - WAMP-5 - - Notepad++ - Firefox et son extension WebDeveloper
Le gène idéal c'est le gène original. Le génie des halles est un Génie des Alpages qui tente d'être à la page. (Merci f'murrr pour les cours de philosophie de chien)
Go to the top of the page
 
 
Start new topic
Réponse(s)
frogger74
posté 21 Mar 2012, 14:57
Message #2


Ceinture blanche OSC
Icône de groupe

Groupe : Membres
Messages : 12
Inscrit : 21-February 12
Membre no 30622



Oui après coup , j'ai vue que le code que tu fourni fonctionne également en OSC 2.1.3, j'avais mal lu , merci encore.

Désolé. rolleyes.gif
Go to the top of the page
 

Les messages de ce sujet


Reply to this topicStart new topic
1 utilisateur(s) sur ce sujet (1 invité(s) et 0 utilisateur(s) anonyme(s))
0 membre(s) :

 



RSS Version bas débit Nous sommes le : 28th March 2024 - 19:38
Ce site est déclaré auprès de la commision Nationale
de l'Informatique et des Libertés (déclaration n°: 1043896)