franckm Posted August 3, 2009 Share Posted August 3, 2009 Bonjour,Suite au paiement de la commande, je souhaiterai effectuer une requête SQL et récupéré le nom, mail, produit(s) achetés et les insérer dans une table distante. Pour ensuite faire une liaison de table avec un autre CMS.Est il possible d’ajouter un script lors du retour de paiement valide ?Récupérer toutes les infos précédentes et les ajouter dans le mail du client comme recap pour lui expliquer comment se connecter à cet autre site!Merci de votre aideamicalement,franck Link to comment Share on other sites More sharing options...
liandri Posted August 3, 2009 Share Posted August 3, 2009 bonjour, oui c'est possible.Maintenant, soit tu places le script dans le traitement du retour valide de paiement par la banque dans le cas d'un paiement CB. Soit, et c'est peut-être plus judicieux (pour les divers modes de paiements), tu ajoutes ton traitement après le changement de statut de la commande vers "paiement accepté". Link to comment Share on other sites More sharing options...
franckm Posted August 3, 2009 Author Share Posted August 3, 2009 Génial et serait-il possible de savoir où se trouve le traitement du retour valide de paiement par la banque.ou alors le changement de statut de la commande vers le paiement accepté ?je ne sais pas dans la BDD ou se trouve le récapitulatif d'une commande, ID du client et ID des produits achetés...merci de votre réponse rapide, j'en suis très content car c'est pressé !amicalement, Link to comment Share on other sites More sharing options...
liandri Posted August 3, 2009 Share Posted August 3, 2009 Pour le paiement par cb, tout dépend du module que vous utilisez, ATOS, CyberMut, etc... et bien sur tous sont différents dans leur codePour le changement de statut de la commande reportez-vous à la classe en charge de cette fonction : /classes/PayementModule.phpvotre code à placer (après les conditions nécessaires sur le paiement, en fonction du statut "paiement accepté") la fonction est : function validateOrder($id_cart, $id_order_state, ... etc) Link to comment Share on other sites More sharing options...
franckm Posted August 3, 2009 Author Share Posted August 3, 2009 Merci et pour le reste ?je ne sais pas dans la BDD ou se trouve le récapitulatif d’une commande, ID du client et ID des produits achetés…??? Link to comment Share on other sites More sharing options...
liandri Posted August 3, 2009 Share Posted August 3, 2009 Parcours la fonction que je t'ai proposée, tu verras qu'elle possède déjà tous les éléments que tu souhaites ! Link to comment Share on other sites More sharing options...
franckm Posted August 4, 2009 Author Share Posted August 4, 2009 Je pense que c'est cette fonction qui genre l'insert dans la bdd $query = 'INSERT INTO `'._DB_PREFIX_.'order_detail` (`id_order`, `product_id`, `product_attribute_id`, `product_name`, `product_quantity`, `product_quantity_in_stock`, `product_price`, `product_quantity_discount`, `product_ean13`, `product_reference`, `product_supplier_reference`, `product_weight`, `tax_name`, `tax_rate`, `ecotax`, `download_deadline`, `download_hash`)par contre dans ps_order_detail, il y a les détails d'une commande...mais je ne vois pas comment se fait le lien avec le client !j'aimerai savoir si quelqu'un pourrait m'apporter une aide très précieuse pour m'aider à créer une requête quand le paiement est validé qui insérerait dans une nouvelle table les mêmes informations détails d'une commande (cad tous les produits avec les référence) et en plus l'adresse mail du client et son nom...merci de votre aide ou de votre guidance...amicalement Link to comment Share on other sites More sharing options...
liandri Posted August 4, 2009 Share Posted August 4, 2009 Le seul moyen pour parvenir à tes fins est de suivre étapes par étapes l'algorithme de cette fonction, elle te conduira petit à petit à chaque appel des classes utiles. Link to comment Share on other sites More sharing options...
franckm Posted August 4, 2009 Author Share Posted August 4, 2009 Et ceux qui sont très habitués à Prestashop, peuvent-ils me donner un coup de main ?Car je ne comprends pas toutes les fonctions et tous les appels, le code est peu commenté et difficile à suivre quelque fois !merci de votre aide ! Link to comment Share on other sites More sharing options...
franckm Posted August 4, 2009 Author Share Posted August 4, 2009 Alors pour ne pas être trop demandeur et exigeant, j'aimerai seulement que quelqu'un me donne la ligne après laquelle je doit insérer ma requête si je veux qu'elle s'exécute uniquement après la validation d'une commande (paiement pas chèque ou carte).par exemple lorsque le dernier mail de confirmation part ou quelque chose comme ça !merci encore de votre aide ! Link to comment Share on other sites More sharing options...
franckm Posted August 4, 2009 Author Share Posted August 4, 2009 Quelqu'un pourrait peut-être me dire (peut-être un dev)comment "valid" dans ps_orders passe à 1 et surtout ou cela se produit ?je ne trouve pas dans "PayementModule.php"merci de votre aide --> j'avance doucement mais sûrement ! Link to comment Share on other sites More sharing options...
ningu Posted August 5, 2009 Share Posted August 5, 2009 Regarde du côté du hook updateOrderStatus(), ca me parait plus simple que le validateOrder.Je pense qu'il est appelé automatique en retour de payment, quelque soit le mode de payment.Il faut tester le nouveau status pour savoir que c'est payé Link to comment Share on other sites More sharing options...
liandri Posted August 5, 2009 Share Posted August 5, 2009 ou aussi dans OrderHistory::changeIdOrderState()qui appelle ensuite Hook::updateOrderStatus()l'avantage de la fonction changeIdOrderState() de OrderHistory c'est qu'elle te permet de récupérer le panier précédemment validé en paiement par : $oldOrderStatus = OrderHistory::getLastOrderState(intval($id_order)); $cart = Cart::getCartByOrderId($id_order); dans $cart tu auras tout ton bonheur pour envoyé les éléments que tu veux vers ton autre bdd !A+ Link to comment Share on other sites More sharing options...
ningu Posted August 5, 2009 Share Posted August 5, 2009 L'avantage d'un hook est qu'il évite de toucher au code dans le core.Il suffit d'écrire un module qui s'abonne au hook et de tout faire dans le hook.En particulier, ce updateOrderStatus reçoit le id_order en paramètre, il n'y a plus qu'à regarder la liste des produits dans ce Order. Link to comment Share on other sites More sharing options...
liandri Posted August 5, 2009 Share Posted August 5, 2009 L'avantage d'un hook est qu'il évite de toucher au code dans le core.Il suffit d'écrire un module qui s'abonne au hook et de tout faire dans le hook.En particulier, ce updateOrderStatus reçoit le id_order en paramètre, il n'y a plus qu'à regarder la liste des produits dans ce Order. +1j'adhère à ce que tu viens de dire Link to comment Share on other sites More sharing options...
franckm Posted August 5, 2009 Author Share Posted August 5, 2009 Merci de vos pistes !Faut-il faire une verif du champs "valid" de "ps_orders" ? pour vérifier qu'il est bien à "1" ou alors est-ce déjà le cas lors de : $oldOrderStatus = OrderHistory::getLastOrderState(intval($id_order)); $cart = Cart::getCartByOrderId($id_order); ???merci encore Link to comment Share on other sites More sharing options...
franckm Posted August 6, 2009 Author Share Posted August 6, 2009 J'ai trouvé avec l'aide d'un ami , je confirme ça et je vous laisse une trace !merci de toute votre aide !amicalement,franck Link to comment Share on other sites More sharing options...
zubb33 Posted September 15, 2009 Share Posted September 15, 2009 J’ai trouvé avec l’aide d’un ami , je confirme ça et je vous laisse une trace !merci de toute votre aide !amicalement,franck Salut Franck, Pourrais tu nous faire partager ta trouvaille ?Merci Link to comment Share on other sites More sharing options...
franckm Posted September 15, 2009 Author Share Posted September 15, 2009 Oui bien sur mais comme cela dépend du but recherché !Peux-tu me donner plus de details sur ce que tu veux réaliser ? Link to comment Share on other sites More sharing options...
zubb33 Posted September 16, 2009 Share Posted September 16, 2009 Bonjour Franck, merci pour ta réponse rapide. Je souhaiterai un peu comme toi, effectuer une requête SQL qui récupère le nom, mail, produit(s) achetés mais au lieu de les insérer dans une table distante, faire un script qui envoi un mail automatique contenant les informations commandes et clients à mon transporteur une fois la commande validée. (en réfléchissant je pourrai même les insérer dans une table distante à la manière de ton script et ensuite générer les actions qui m'intéressent)Ainsi il serait notifié automatiquement et pourrait envoyer le colis directement.J'ai regardé du côté des modules, les module Alerte email fait a peu près ça sauf que celui-ci notifie par email lorsque une nouvelle commande est passée mais celle-ci n'est pas encore validée, donc le risque c'est que le transporteur envoie une commande pour un paiement refusé ou non validé.Ou peut-être que quelqu'un connait une solution alternative ?D'où ma question, pourrais-tu faire partager tes avancés sur ce point ?Merci pour ta réponse ! Link to comment Share on other sites More sharing options...
franckm Posted September 16, 2009 Author Share Posted September 16, 2009 Ok, dès que je rentre ce soir, je réponds !amicalement,Franck Link to comment Share on other sites More sharing options...
zubb33 Posted September 16, 2009 Share Posted September 16, 2009 Merci bien Link to comment Share on other sites More sharing options...
franckm Posted September 16, 2009 Author Share Posted September 16, 2009 PRESTASHOP dans la page prestashop/classes/OrderHistory.phpDans ce bout de code, j'enregistre des produits qui respectent certaines conditions (payés / référence commençant par un certain mot) dans une BDD externe ...trouver à la ligne 79/* The order is valid only if the invoice is available and the order is not cancelled */ $order->valid = $newOS->logable; $order->update(); #Ajout du traitement Francky pour table externe if ($order->valid == 1 && intval($new_order_state)==2) { $sql_externe = "INSERT INTO `base_externe` (id_order, email, passwd, firstname, lastname, product_reference) SELECT `ps_orders`.id_order, `ps_customer`.email, `ps_customer`.passwd, `ps_customer`.firstname, `ps_customer`.lastname, `ps_order_detail`.product_reference FROM `ps_orders`, `ps_customer`, `ps_order_detail` WHERE `ps_orders`.id_customer = `ps_customer`.id_customer AND `ps_orders`.id_order = `ps_order_detail`.id_order AND `ps_orders`.id_order = ".intval($order->id)." AND `ps_orders`.valid=1 AND `ps_order_detail`.product_reference != '' AND `ps_order_detail`.product_reference LIKE 'motcle_%'"; $db2 = Db::getInstance(); $result = $db2->Execute($sql_externe); #LIKE 'motcle_%' permet de n'enregistrer dans cette base externe que certains produits qui ont comme début de référence "motcle_" $sql_externe2 = "INSERT INTO `base_externe2` (id_order, email, passwd, firstname, lastname, product_reference) SELECT `ps_orders`.id_order, `ps_customer`.email, `ps_customer`.passwd, `ps_customer`.firstname, `ps_customer`.lastname, `ps_order_detail`.product_reference FROM `ps_orders`, `ps_customer`, `ps_order_detail` WHERE `ps_orders`.id_customer = `ps_customer`.id_customer AND `ps_orders`.id_order = `ps_order_detail`.id_order AND `ps_orders`.id_order = ".intval($order->id)." AND `ps_orders`.valid=1 AND `ps_order_detail`.product_reference != '' AND `ps_order_detail`.product_reference LIKE 'autremotcle_%'"; $db3 = Db::getInstance(); $result2 = $db3->Execute($sql_externe2); #LIKE 'autremotcle_%' permet de n'enregistrer dans cette base externe que d'autres produits qui ont comme début de référence "autremotcle_" } #Fin ajout Francky table externe Voilà ce bout de code me permet de n'enregistrer dans PS 1.2 que les produits dans la BDD externe qui ont été payés (verif CB ou Paypal / chèque validé en Admin)Donc maintenant, je fonctionne avec sans PB...Petite info en plus (KDO BONUX) comme j'enregistre dans la BDD le MDP crypté, il faut pouvoir le changer lorsque le client le change dans son compte ou lors de la génération d'un nouveau mot de passe lors d'un oubli...Il fallait y penser (j'avais oublié) donc si c'est important pour toi, dis le moi ! Link to comment Share on other sites More sharing options...
zubb33 Posted September 16, 2009 Share Posted September 16, 2009 Merci Franck je regarde tout ça. Link to comment Share on other sites More sharing options...
franckm Posted September 16, 2009 Author Share Posted September 16, 2009 Oui et tiens moi au courant. By Link to comment Share on other sites More sharing options...
infradmin Posted October 20, 2009 Share Posted October 20, 2009 Bonjour à tous,Je suis à la traine avec la POO... Quelqu'un pourrait m'expliquer pourquoi les valeurs que FranckM envoi à mysql sont sans '$' et sont elles hérité de l'objet $order?Merci de votre aide.Nicolas Link to comment Share on other sites More sharing options...
infradmin Posted October 20, 2009 Share Posted October 20, 2009 Et si un dev passe se serai sympa de me dire ce que je peut trouver dans cet objet $order Nico Link to comment Share on other sites More sharing options...
franckm Posted October 20, 2009 Author Share Posted October 20, 2009 De quelle valeurs sans & parles-tu??? Link to comment Share on other sites More sharing options...
infradmin Posted October 20, 2009 Share Posted October 20, 2009 Y'a un 'insert into' sans values=('$xxx',$'$xxx'...) je ne comprend pas la requete... Link to comment Share on other sites More sharing options...
infradmin Posted October 20, 2009 Share Posted October 20, 2009 Ha autant pour moi je n'avais pas lu correctement la requete, j'ai compris dsl je n'avais pas vu le SELECT et la concatenation des données... Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now