THELIA Forum

Welcome to the THELIA support and discusssion forum

Announcement

Rejoignez la communauté sur le Discord Thelia : https://discord.gg/YgwpYEE3y3

Offline


Bah... je suis dans le même cas que toi,
mais je ne suis pas sure que cela vienne de thelia :
depuis quelque temps, et sans que j'ai fait quoi que ce soit, le retour ok de paypal ne semble pas s'effectuer tout seul. Paypal m'envoie bien un mail, mais le statut de la commande ne passe plus a payer automatiquement.

Encore une fois, cela marchais très bien, puis du jour au lendemain, sans modification ni update de thelia, cela n'a plus marché.
Je penche plutot pour un probleme du coté paypal.
Bien que j'ai verifié ma config chez paypal et que rien ne semble avoir changé la bas non plus.

Mystère...


{TETE DE LARD} Concept store/Galerie {Designer toys, Livres d'art, Badges, T-shirts et curiosités...}

Offline


Merci pour ton retour, mais c'est pas très rassurant...
Tu fais comment du coup pour l'envoi de mail ? Tu es obligé de passer manuellement à payé ?

Offline


ben oui...


{TETE DE LARD} Concept store/Galerie {Designer toys, Livres d'art, Badges, T-shirts et curiosités...}

Offline


Aie aie aie... Pas top à gérer, mais bon...

Manu, tu n'aurais pas une idée géniale par hasard ;-) ?

Offline


Bonjour,

Je travaille avec une version THELIA 1.4.2.1 et le dernier plugin CMCIC.
J'ai lu attentivement la démarche pour effectuer cette modification dans l'envoi des mails de confirmation. Mais je n'arrive pas à obtenir le résultat souhaité :
Les mails de confirmation sont toujours envoyés avant le retour de la banque.

Donc je me demande :
1) Est-ce que le plugin CMCIC possède une particularité dans son fichier client/Cmcic-class.php?
2) Est ce que dans ce fichier Cmcic-class.php la fonction paiement doit-être avant ou après les fonctions confirmmail, confirmation et statut?
3) Est-ce qu'il faut modifier le fichier classes/PluginsPaiements.class.php?

Un grand merci d'avance pour votre aide !!!

Offline


dans classes/PluginsPaiements.class.php il faut que tu englobes le code d'envoi de mail (client et/ou admin) avec la condition if suivante

if($commande->paiement!=id_du_module_de_paiement){
//code d'envoi du mail
}

Last edited by Elyos (18-11-2009 17:24:33)


Aide les autres, ils t'aideront en retour.

  • manu
  • faï tot petar miladiu

Offline


il ne faut pas que tu modifies le fichier PluginsPaiement.class.php.

Ensuite tu as bien redéclaré la fonction mail?


http://doc.thelia.net/
http://thelia.net/modules
http://raynaud.io
PGP public Key : 0xC6E546A6

Offline


manu wrote:

il ne faut pas que tu modifies le fichier PluginsPaiement.class.php.

Sans ça le mail d'enregistrement de commande s'enverra quand même non ?


Aide les autres, ils t'aideront en retour.

  • manu
  • faï tot petar miladiu

Offline


non pas si tu surcharges la méthode mail ;-)

donc dans la classe de ton plugin tu déclares une fonction mail, sans rien dedans et le tour est joué.


http://doc.thelia.net/
http://thelia.net/modules
http://raynaud.io
PGP public Key : 0xC6E546A6

Offline


ah ok XD


Aide les autres, ils t'aideront en retour.

Offline


voici le fichier classe en question :
(j'ai bien la fonction mail vide.)

<?php
    include_once(realpath(dirname(__FILE__)) . "/../../../classes/PluginsPaiements.class.php");
    include_once(realpath(dirname(__FILE__)) . "/../../../classes/Message.class.php");
    include_once(realpath(dirname(__FILE__)) . "/../../../classes/Messagedesc.class.php");
    include_once(realpath(dirname(__FILE__)) . "/../../../classes/Client.class.php");
    include_once(realpath(dirname(__FILE__)) . "/../../../classes/Commande.class.php");
    include_once(realpath(dirname(__FILE__)) . "/../../../classes/Variable.class.php");


class Cmcic extends PluginsPaiements{
	
	function Cmcic(){
		$this->PluginsPaiements("cic");
	}
	
	function init(){
		$this->ajout_desc("CB", "CB", "", 1);			
	}

	function paiement($commande){
		header("Location: " . "client/plugins/cmcic/paiement.php");			
	}

        function mail($commande){
        }
        
        function confirmmail($commande){
	//copie du contenu de la fonction mail du fichier classes/PluginsPaiements.class.php)
            $sujet=""; 
            $corps="";

            /* Message client */
            $msg = new Message();
            $msg->charger("sujetcommande");
            $msgdesc = new Messagedesc();
            $msgdesc->charger($msg->id);
            $sujet = $msgdesc->description . " " . $commande->ref;
            $msg->charger("corpscommande1");
            $msgdesc = new Messagedesc();                
            $msgdesc->charger($msg->id);
            $corps = $msgdesc->description;
            $corps = $this->substitmail($corps, $commande);

            /* Message admin */
            $msg->charger("corpscommande2");
            $msgdesc = new Messagedesc();
            $msgdesc->charger($msg->id);
            $corps2 = $msgdesc->description;
        
            $emailcontact = new Variable();
            $emailcontact->charger("emailcontact");    
            $corps2 = $this->substitmail($corps2, $commande);

            //$client = new Client();
            //$client->charger_id($commande->client);
            
            //mail($client->email , "$sujet", "$corps", "From: $emailcontact->valeur");
                mail($_SESSION['navig']->client->email , "$sujet", "$corps", "From: $emailcontact->valeur");
            mail($emailcontact->valeur , "$sujet", "$corps2", "From: $emailcontact->valeur");    
            
        }
        
        function confirmation($commande){
        $this->confirmmail($commande);
        }
        
        function statut($commande){
            if($commande->statut == 2){
                $this->confirmmail($commande);
            }
        }

}


?>

Sinon une erreur s'est glissée dans mon premier post :
le mail "confirmation client" ne m'est pas arrivé (j'ai effectué une vraie commande car je suis en mode "prod" et j'ai vérifié sur le terminal bancaire, c'est ok pour le paiement).
Pour la confirmation client, ce dernier ne m'a pas encore confirmé si le mail lui est bien parvenu.
Donc c'est encore plus ennuyeux.

  • manu
  • faï tot petar miladiu

Offline


en utilisant la session pour retrouver le mail ton client ne recevra jamais le mail.

Il faut que tu décommentes les lignes au dessus :

//$client = new Client();
            //$client->charger_id($commande->client);

et se servir de $client->email pour l'envoyer.

mais sinon tout le reste marche? la commande passe en payé? etc?


http://doc.thelia.net/
http://thelia.net/modules
http://raynaud.io
PGP public Key : 0xC6E546A6

Offline


Euh je viens de vérifier dans le BO, la commande n'est pas passée en statut payé.
Et d'ailleurs la commande précédente sans la modification "confirmation après paiement" aussi. Aucune des deux commandes n'a le bon statut.

Offline


Manu,
j'ai décommenté les lignes indiquées mais je n'ai pas saisi :
et se servir de $client->email pour l'envoyer.

Je décommente aussi celle-ci :
//mail($client->email , "$sujet", "$corps", "From: $emailcontact->valeur");

P.S. : J'ai le niveau maternelle petite section en PHP.   smile

Offline


Ah!!!

autre détail, la banque me notifie d'un paiement validé mais un accusé de réception invalide.
Est-ce que par hasard un .htaccess sur le répertoire du site peut être la source de cette erreur?

Offline


Salut,

Après test, il semble que le .htaccess sur le répertoire du site provoquait cette erreur d'accusé de réception non-valide.
Sinon, j'ai remis le fichier Cmcic.class.php original en ligne, les deux mails de confirmation arrivent bien avant validation du paiement, mais la commande ne passe pas en statut payé.
Bizarre, non?

Offline


Si je copie ce code dans Paypal.class.php,

j'ai cette ereur à l'ouverture du site:


?>
Warning: Cannot modify header information - headers already sent by (output started at /home/eq40252/html/LNB/client/plugins/paypal/Paypal.class.php:104) in /home/eq40252/html/LNB/fonctions/divers.php on line 48

problème concerné dans divers.php:

// redirection d'url'
    function redirige($url){
   
        header("Location: " . $url);
        exit;
    }


Savez-vous de quoi il s'agit et que me faut-il faire?

Offline


Ben justement je me pose la même question, pour des chevronnés du PHP et de Thelia ca semble être naturel de poster des morceaux de code et de bidouiller les fichiers de Thelia, mais malheureusement pour un novice en programmation comme moi j'y perds vite mon latin ...

Si quelqu'un avait l'amabilité de poster le code actuel complet qui permet de ne faire partir le mail de confirmation de commande AVANT que le paiement soit effectué ce serait super sympa!

Merci encore

Offline


Cette histoire de passage en statut "payé" ou "non payé" ainsi que l'envoi du mail de confirmation au client AVANT le retour OK de la banque est un vrai souci...

Si qq'un a une solution type "rustine" MAIS claire n'hesitez pas à la poster et à nous la commenter comme si nous avions 2 ans :-)

En attendant je crois que l'on a plus qu'a patienter que l'équipe sympathique de Thélia nous comble ce machin énervant.

Offline


alors le site il marche ou pas !!!

Je dis qu'il ne marche pas wink

Z'avez fait des tests avant de mettre en production ?


OpenStudio Toulouse

Offline


RE

C'est Mercanet qui cherche le PV de recette smile_boom.gif

Pour revenir à ce problème d'envoi de mail, tu ne connaitrais pas par hazard le bon code à mettre et dans quel fichier ?

Offline


tu ne connaitrais pas par hazard le bon code à mettre et dans quel fichier ?

Si. De toute façon, y'a pas 36 solutions.

Tu veux bien poster le code de ton plugin paiement (ou me l'envoyer par courriel ?)


OpenStudio Toulouse

Offline


RE

Heu attend qu'on se mélange pas les pinceaux, là on parle de faire partir le mail de confirmation aprés le paiement.

Donc du fichier PluginsPaiement.class.php, je met le code ici pour que tout le monde puisse faire le rectificatif wink

<?php
	include_once(realpath(dirname(__FILE__)) . "/PluginsClassiques.class.php");
	include_once(realpath(dirname(__FILE__)) . "/Commande.class.php");
	include_once(realpath(dirname(__FILE__)) . "/Venteprod.class.php");
	include_once(realpath(dirname(__FILE__)) . "/Variable.class.php");
	include_once(realpath(dirname(__FILE__)) . "/Paysdesc.class.php");
	include_once(realpath(dirname(__FILE__)) . "/Client.class.php");
	include_once(realpath(dirname(__FILE__)) . "/Pays.class.php");
	include_once(realpath(dirname(__FILE__)) . "/Paysdesc.class.php");
	include_once(realpath(dirname(__FILE__)) . "/Modules.class.php");
	include_once(realpath(dirname(__FILE__)) . "/Modulesdesc.class.php");
	include_once(realpath(dirname(__FILE__)) . "/Venteadr.class.php");
	include_once(realpath(dirname(__FILE__)) . "/Produitdesc.class.php");
	include_once(realpath(dirname(__FILE__)) . "/Declinaison.class.php");
	include_once(realpath(dirname(__FILE__)) . "/Declinaisondesc.class.php");
	include_once(realpath(dirname(__FILE__)) . "/Declidisp.class.php");
	include_once(realpath(dirname(__FILE__)) . "/Declidispdesc.class.php");
	include_once(realpath(dirname(__FILE__)) . "/Mail.class.php");
	include_once(realpath(dirname(__FILE__)) . "/Message.class.php");
	include_once(realpath(dirname(__FILE__)) . "/Messagedesc.class.php");
	
	
	class PluginsPaiements extends PluginsClassiques{

		
		function PluginsPaiements($nom=""){
			$this->PluginsClassiques($nom);			
		}
		

		function paiement($commande){
			
			
		}

		function getDevise(){
							
			if($_SESSION['navig']->lang == "")
				$lang="1";
			else $lang=$_SESSION['navig']->lang;
			
			$modulesdesc = new Modulesdesc();
			$modulesdesc->charger($this->nom_plugin);
			
			return $modulesdesc->devise;		
		}
		
 		function mail($commande){
	
			$sujet=""; 
			$corps="";

			/* Message client */
			$msg = new Message();
			
			$msg->charger("mailconfirmcli");
			$msgdesc = new Messagedesc();                
			$msgdesc->charger($msg->id);
			$sujet = $this->substitmail($msgdesc->titre, $commande);
			
			$corps = $msgdesc->description;
			$corps = $this->substitmail($corps, $commande);
			$corpstext = $msgdesc->descriptiontext;
			$corpstext = $this->substitmail($corpstext,$commande);

			/* Message admin */
        	$msg->charger("mailconfirmadm");
        	$msgdesc = new Messagedesc();
        	$msgdesc->charger($msg->id);
			$corps2 = $msgdesc->description;
		
			$emailcontact = new Variable();
			$emailcontact->charger("emailcontact");	
			$sujet2 = $this->substitmail($msgdesc->titre, $commande);
			$corps2 = $this->substitmail($corps2, $commande);
			$corpstext2 = $msgdesc->descriptiontext;
			$corpstext2 = $this->substitmail($corpstext2,$commande);

			$client = new Client();
			$client->charger_id($commande->client);
			
			$nomsite = new Variable();
			$nomsite->charger("nomsite");	
			
			
			//envoi du mail au client
			$mailclient = new Mail();
			$mailclient->IsMail();
			$mailclient->FromName = $nomsite->valeur;
			$mailclient->From = $emailcontact->valeur;
			$mailclient->Subject = $sujet;
			$mailclient->MsgHTML($corps);
			$mailclient->AltBody = $corpstext;
			$mailclient->AddAddress($client->email,$client->nom." ".$client->prenom);

			$mailclient->send();
			
			//envoi du mail a l'admin
			$mail = new Mail();
			$mail->IsMail();
			$mail->FromName = $nomsite->valeur;
			$mail->From = $emailcontact->valeur;
			$mail->Subject = $sujet2;
			$mail->MsgHTML($corps2);
			$mail->AltBody = $corpstext2;
			$mail->AddAddress($emailcontact->valeur,$nomsite->valeur);

			$mail->send();
			
		}
		
		function substitmail($corps, $commande ){

		  	$jour = substr($commande->date, 8, 2);
  			$mois = substr($commande->date, 5, 2);
  			$annee = substr($commande->date, 0, 4);
  		
  			$heure = substr($commande->date, 11, 2);
  			$minute = substr($commande->date, 14, 2);
  			$seconde = substr($commande->date, 17, 2);

			$client = new Client();
			$client->charger_id($commande->client);
			
			$paiement = new Modules();
			$paiement->charger_id($commande->paiement);
			$paiementdesc = new Modulesdesc();
			$paiementdesc->charger($paiement->nom, $_SESSION['navig']->lang);

			$transport = new Modules();
			$transport->charger_id($commande->transport);
			$transportdesc = new Modulesdesc();
			$transportdesc->charger($transport->nom, $_SESSION['navig']->lang);


			$total = $commande->total();
			$totcmdport = $commande->port + $total;
	
			$adresse = new Venteadr();
			$adresse->charger($commande->adrlivr);
		
			if($adresse->raison == "1")
				$raison = "Madame";
			else if($adresse->raison == "2")
				$raison = "Mademoiselle";
			else 
				$raison = "Monsieur";
			$nom = $adresse->nom;
			$prenom = $adresse->prenom;
			$adresse1 = $adresse->adresse1;
			$adresse2 = $adresse->adresse2;
			$adresse3 =  $adresse->adresse3;
			$cpostal =  $adresse->cpostal;
			$ville = $adresse->ville; 
			$pays = new Paysdesc();
			$pays->charger($adresse->pays);
					
			$urlsite = new Variable();
			$urlsite->charger("urlsite");
			
			$nomsite = new Variable();
			$nomsite->charger("nomsite");
			
			$corps = str_replace("__COMMANDE_REF__", $commande->ref, $corps);
			$corps = str_replace("__COMMANDE_DATE__", $jour . "/" . $mois . "/" . $annee, $corps);
			$corps = str_replace("__COMMANDE_HEURE__", $heure . ":" . $minute, $corps);
			$corps = str_replace("__COMMANDE_TRANSACTION__", $commande->transaction, $corps);
			$corps = str_replace("__COMMANDE_PAIEMENT__", $paiementdesc->titre, $corps);
			$corps = str_replace("__COMMANDE_TOTALPORT__", $totcmdport-$commande->remise, $corps);
			$corps = str_replace("__COMMANDE_TOTAL__", $total, $corps);
			$corps = str_replace("__COMMANDE_PORT__", $commande->port, $corps);
			$corps = str_replace("__COMMANDE_REMISE__", $commande->remise, $corps);
			$corps = str_replace("__COMMANDE_TRANSPORT__", $transportdesc->titre, $corps);
			$corps = str_replace("__COMMANDE_LIVRRAISON__", $raison, $corps);
			$corps = str_replace("__COMMANDE_LIVRNOM__",$nom, $corps);
			$corps = str_replace("__COMMANDE_LIVRPRENOM__", $prenom, $corps);
			$corps = str_replace("__COMMANDE_LIVRADRESSE1__", $adresse1, $corps);
			$corps = str_replace("__COMMANDE_LIVRADRESSE2__", $adresse2, $corps);
			$corps = str_replace("__COMMANDE_LIVRADRESSE3__", $adresse3, $corps);
			$corps = str_replace("__COMMANDE_LIVRCPOSTAL__", $cpostal, $corps);
			$corps = str_replace("__COMMANDE_LIVRVILLE__", $ville, $corps);
			$corps = str_replace("__COMMANDE_LIVRPAYS__", $pays->titre, $corps);

			$corps = str_replace("__NOMSITE__", $nomsite->valeur, $corps);
			$corps = str_replace("__URLSITE__", $urlsite->valeur, $corps);


			$adresse = new Venteadr();
			$adresse->charger($commande->adrfact);
						
			if($adresse->raison == "1")
				$raison = "Madame";
			else if($adresse->raison == "2")
				$raison = "Mademoiselle";
			else $raison = "Monsieur";
			$pays = new Paysdesc();
			$pays->charger($adresse->pays);
									
			$corps = str_replace("__CLIENT_REF__", $client->ref, $corps);
			$corps = str_replace("__CLIENT_RAISON__",$raison, $corps);
			$corps = str_replace("__CLIENT_ENTREPRISE__", $client->entreprise, $corps);
			$corps = str_replace("__CLIENT_SIRET__", $client->siret, $corps);
			$corps = str_replace("__CLIENT_FACTNOM__", $adresse->nom, $corps);
			$corps = str_replace("__CLIENT_FACTPRENOM__", $adresse->prenom, $corps);
			$corps = str_replace("__CLIENT_ADRESSE1__", $adresse->adresse1, $corps);
			$corps = str_replace("__CLIENT_ADRESSE2__", $adresse->adresse2, $corps);
			$corps = str_replace("__CLIENT_ADRESSE3__", $adresse->adresse3, $corps);
			$corps = str_replace("__CLIENT_CPOSTAL__", $adresse->cpostal, $corps);
			$corps = str_replace("__CLIENT_VILLE__", $adresse->ville, $corps);
			$corps = str_replace("__CLIENT_PAYS__", $pays->titre, $corps);
			$corps = str_replace("__CLIENT_EMAIL__", $client->email, $corps);
			$corps = str_replace("__CLIENT_TELFIXE__", $client->telfixe, $corps);
			$corps = str_replace("__CLIENT_TELPORT__", $client->telport, $corps);
			
            $pattern = '{<VENTEPROD>((?:(?:(?!<VENTEPROD[^>]*>|</VENTEPROD>).)++|<VENTEPROD[^>]*>(?1)</VENTEPROD>)*)</VENTEPROD>}si';
            preg_match($pattern, $corps, $cut);

			$corps = str_replace("<VENTEPROD>", "", $corps);
			$corps = str_replace("</VENTEPROD>", "", $corps);
			
			$res="";

			
			$venteprod = new Venteprod();
			
			$query = "select * from $venteprod->table where commande=\"" . $commande->id . "\"";
			$resul = mysql_query($query, $venteprod->link);

			
			while($row = mysql_fetch_object($resul)){
				
				$temp = str_replace("__VENTEPROD_TITRE__", $row->titre, $cut[1]);
                $temp =  str_replace("__VENTEPROD_REF__", $row->ref, $temp);
				$temp =  str_replace("__VENTEPROD_QUANTITE__", $row->quantite, $temp);
				$temp =  str_replace("__VENTEPROD_PRIXU__", $row->prixu, $temp);
				$res .= $temp;
			
			}
			$corps = str_replace($cut[1], $res, $corps);
						
			return $corps;
			
		}
		
	}	
?>

Offline


J'ai bien compris ce que tu veux. Je te demande le code du plugin que tu utilises pour le paiement. C'est là qu'il faut intervenir.

Le code de PluginPaiement.class.php m'est inutile.

Last edited by roadster31 (22-01-2010 15:10:10)


OpenStudio Toulouse

Offline


Je ne sais pas si ca peut servir à quelqu'un mais j'arrive maintenant grâce au post de Manu http://forum.thelia.fr/viewtopic.php?id=2333 à ne faire partir le mail de confirmation de commande au client qu'une fois que le Statut est passé sur "Payé" manuellement dans le B.O.
C'est déjà pour moi une bonne avancée, mais je ne comprends toujours pas pourquoi la méthode ne fonctionne pas en "automatique" pour le paiement (en mode demo) est ce que le statut passerai en "payé" automatiquement en mode pré-production ?

J'utilise ATOS (+ SHERLOCKS)

Voici le code qui fonctionne en "manuel" dans le B.O pour le fichier Atos.class.php

<?php

    include_once(realpath(dirname(__FILE__)) . "/../../../classes/PluginsPaiements.class.php");
   
    class Atos extends PluginsPaiements{

        function init(){
            $this->ajout_desc("CB", "CB", "", 1);
            rename("../client/plugins/atos/conf/htaccess", "../client/plugins/atos/conf/.htaccess");
   
        }

        function Atos(){
            $this->PluginsPaiements("atos");
        }
       
   
        function mail($commande){
        }
        function confirmmail($commande){
//copié le contenu de la fonction mail du fichier classes/PluginsPaiements.class.php)
           $sujet="";
            $corps="";

            /* Message client */
            $msg = new Message();
           
            $msg->charger("mailconfirmcli");
            $msgdesc = new Messagedesc();               
            $msgdesc->charger($msg->id);
            $sujet = $this->substitmail($msgdesc->titre, $commande);
           
            $corps = $msgdesc->description;
            $corps = $this->substitmail($corps, $commande);
            $corpstext = $msgdesc->descriptiontext;
            $corpstext = $this->substitmail($corpstext,$commande);

            /* Message admin */
            $msg->charger("mailconfirmadm");
            $msgdesc = new Messagedesc();
            $msgdesc->charger($msg->id);
            $corps2 = $msgdesc->description;
       
            $emailcontact = new Variable();
            $emailcontact->charger("emailcontact");   
            $sujet2 = $this->substitmail($msgdesc->titre, $commande);
            $corps2 = $this->substitmail($corps2, $commande);
            $corpstext2 = $msgdesc->descriptiontext;
            $corpstext2 = $this->substitmail($corpstext2,$commande);

            $client = new Client();
            $client->charger_id($commande->client);
           
            $nomsite = new Variable();
            $nomsite->charger("nomsite");   
           
           
            //envoi du mail au client
            $mailclient = new Mail();
            $mailclient->IsMail();
            $mailclient->FromName = $nomsite->valeur;
            $mailclient->From = $emailcontact->valeur;
            $mailclient->Subject = $sujet;
            $mailclient->MsgHTML($corps);
            $mailclient->AltBody = $corpstext;
            $mailclient->AddAddress($client->email,$client->nom." ".$client->prenom);

            $mailclient->send();
           
            //envoi du mail a l'admin
            $mail = new Mail();
            $mail->IsMail();
            $mail->FromName = $nomsite->valeur;
            $mail->From = $emailcontact->valeur;
            $mail->Subject = $sujet2;
            $mail->MsgHTML($corps2);
            $mail->AltBody = $corpstext2;
            $mail->AddAddress($emailcontact->valeur,$nomsite->valeur);

            $mail->send();
           
           
        }
       
        function confirmation($commande){
        $this->confirmmail($commande);
        }
        function statut($commande){
            if($commande->statut == 2){
                $this->confirmmail($commande);
            }
        }
       
   
        function paiement($commande){

            header("Location: " . "client/plugins/atos/paiement.php");           
        }
   
    }

?>

Arf! Thelia quand tu nous tiens ... wink