Bienvenue invité ( Connexion | Inscription )
![]() ![]() |
9 Mar 2011, 14:44
Message
#51
|
|
|
Ceinture blanche OSC Groupe : Membres Messages : 1 Inscrit : 9-March 11 Membre no 29491 |
Bonjour,
J'avoue prendre rarement le temps d'intervenir sur un forum de développement, mais j'ai tellement ramé sur ce sujet précis que je désire partager mon expérience. Déjà rassurant, il est effectivement possible avec osCommerce et le système de paiement ATOS de tracker correctement ses commandes dans un système de suivi statistique web. Pour cela, il faut effectivement utiliser le paramètre NO_RESPONSE_PAGE comme cela a été indiqué dans des billets précédents, pour forcer après le paiement la redirection de l'internaute sur une page du site marchand (qui elle, contient la balise qui va bien du système de suivi statistique web). Mais deux points font que cela ne marche pas du premier coup : - le premier point est lié à une spécification Atos qui fait que quand on utilise le paramètre NO_RESPONSE_PAGE, la réponse du serveur ATOS du paramètre DATA se fait en GET et non plus en POST. --> Pour prendre en compte cela, dans le script atos_response.php il faut remplacer la ligne : $hash = $atos->decodeResponse($HTTP_POST_VARS['DATA']); Par (par exemple) : if (isset($HTTP_POST_VARS['DATA'])) { $hash = $atos->decodeResponse($HTTP_POST_VARS['DATA']); } else { $hash = $atos->decodeResponse($HTTP_GET_VARS['DATA']); } - le deuxième point est lié à un bug ATOS non documenté et qu'ils ne veulent pas corriger (allez savoir pourquoi ...). Quand on force la redirection automatique, cette redirection se fait sur les urls renseignées dans les paramètres normal_return_url ou cancel_return_url en fonction du résultat du paiement. Le bug est qu'ATOS ne sait pas traiter dans ce cas des urls avec des paramètres en querystring. Et dans la contribution ATOS pour OsCommerce, ces urls ont malheureusement un paramètre (atos_response.php?osCsid=zzzz). C'est ce qui fait qu'après le paiement on est redirigé sur la home au lieu de la page checkout_success. Coup de chance, après vérification des scripts de la contribution, je n'ai pas l'impression que la transmission du paramètre osCsid serve à quelque chose. --> Du coup pour régler ça, on peut changer dans le script atos.php, fonction makeRequest() les lignes : $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']; Par (toujours par exemple) : $command .= " " . $this->os_info['quote'] . "normal_return_url=" . tep_href_link('atos_response.php', '', $request_type, false) . $this->os_info['quote']; $command .= " " . $this->os_info['quote'] . "cancel_return_url=" . tep_href_link('atos_response.php', '', $request_type, false) . $this->os_info['quote']; En passant, c'est aussi à ce niveau qu'on peut renseigner le paramètre NO_RESPONSE_PAGE en rajoutant la ligne suivante : $command .= " data=NO_RESPONSE_PAGE"; Voilà, vous avez désormais une redirection automatique après paiement qui devrait fonctionner. Maintenant, il reste à traiter la denière objection qui est qu'on doit délivrer une sorte de "ticket de caisse" à l'internaute après son paiement. ATOS utilise les paramètres payment_date, payment_time, merchant_id, transaction_id, amount, card_number, authorisation_id et payment_certificate pour éditer le sien. On a simplement à faire de même, ces paramètres étant bien transmis dans le paramètre DATA en GET (il y a des restrictions sur les variables transmises en GET par rapport au POST mais ces variables-là sont bien transmises). Pour cela, on peut enrichir le script atos_response.php en remplaçant la ligne : tep_redirect(MODULE_PAYMENT_ATOS_PRODUCTION_MODE == 'false' ? tep_href_link(FILENAME_CHECKOUT_PAYMENT, 'info_message=' . urlencode(MODULE_PAYMENT_ATOS_TEXT_CHECKOUT_DEMO), 'SSL') : tep_href_link(FILENAME_CHECKOUT_SUCCESS, '', 'SSL')); Par tep_redirect(MODULE_PAYMENT_ATOS_PRODUCTION_MODE == 'false' ? tep_href_link(FILENAME_CHECKOUT_PAYMENT, 'info_message=' . urlencode(MODULE_PAYMENT_ATOS_TEXT_CHECKOUT_DEMO), 'SSL') : tep_href_link(FILENAME_CHECKOUT_SUCCESS, ((isset($HTTP_GET_VARS['DATA'])) ? 'DATA=' . $HTTP_GET_VARS['DATA'] : ''), 'SSL')); Cela permet de transmettre le paramètre DATA à la page checkout_success. Il vous reste désormais à traiter ce paramètre DATA dans la page checkout_succes (prendre atos_response.php en exemple, les étapes clés tiennent dans $hash = $atos->decodeResponse($HTTP_GET_VARS['DATA']); suivi par un affichage des variables du tableau $hash). En espérant que ce post puisse être utile. Guillaume. |
|
|
12 Apr 2011, 09:19
Message
#52
|
|
|
Ceinture blanche OSC Groupe : Membres Messages : 1 Inscrit : 17-March 11 Membre no 29536 |
Super explication Guillaume,
Enfin une solution viable sur ce problème de CB ATOS !!! Peux-tu s'il te plait donner aussi l'affichage du tableau $hach en PHP ? Merci je suis débutant en PHP A+ Romuald |
|
|
31 May 2011, 16:28
Message
#53
|
|
![]() Ceinture orange+ OSC Groupe : Membres Messages : 366 Inscrit : 31-December 03 Lieu : Nantes Membre no 1780 |
BOnjour
Rhaaa génial Guilaume13 ! Abonné à ce topic j'avais vu en avril ta réponse et j'ai mis un paquet de temps avant de la retrouver et la mettre en application. Au final, ça fonctionne bien je retourne bien sur la page checkout_success. Une chose que je n'ai pas compris, c'est comment récupérer les infos DATA passées en GET ? après le paiement, je retourne sur la page success vec un data long comme mon bras (et dieu sait si j'ai le bras long...) : Code http://maboutique.com/checkout_success.php?DATA=2020333437603028502c2360532d233c532d2360522d2360502c4360502c3334502d2330522 d2334542c4360532c236x502c43242a2c2360532c23605f2d232c502e33602a2c2360552c2360502d 4324572c4324512d4048512c2334502c232450333425333524353230542532316048502c2338502c2 324542cq360512c3360552c5324512d3328512c33382a2c3360532c2360502d4324572c4328512c50 48512c2330502c2360582c4w60512c3360552c53242a2c3360512c2360502c4360505c224324502c2 360502c2338592d333c562d33342a2c2328592c2360502c4639525c224360502e2360502c232c592d 53402a2c2360592c2360502c4639525c224324502d4360502c233c552c332c512b4338505c2243245 12d2340502c2338522c2324512c23442a2c2328572c2360512d44592f375529253455212f33452d25 3755212131543y2a2c2030502c2360512d2425353524412f34455d2330352134353529255c2243605 32e3360502c2324565c224324502c4360502c3328542d2638592c462c572c2344593856342a2c3360 592c2360502c435c5f5c224324512c2360502c2324515c224324512c3360502c2328502c6048512c4 328502c2360512c6048512c432c502c2360512c6048502c4338502c2360512d40z860e352dbfcba66 9f5d je suis perplexe pour appeler la méthode decodeResponse($HTTP_GET_VARS['DATA']); directement de checkout success. Pourrais tu nous aiguiller ? Merci d'avance. Seb -------------------- Osc 2.2 ms2 en prod : STS - Easy Populate - CSS Buttons - SEO - Email Invoice -MailingList 2.0 - Order editor - Wordlpay ...
|
|
|
![]() ![]() |
|
Version bas débit | Nous sommes le : 21st May 2013 - 08:42 |
| Ce site est déclaré auprès de la commision Nationale de l'Informatique et des Libertés (déclaration n°: 1043896) |