THELIA Forum

Welcome to the THELIA support and discusssion forum

Offline


personnellement, à partir du moment ou je redefinis une fonction mail() vide dans paybox.class.php (je suis avec e-transaction du credit agricole), le site n'est plus accessible, et j'ai cette fatal error :

Fatal error: Cannot redeclare mail() in /homez.168/crazygoa/www/client/plugins/paybox/Paybox.class.php on line 50

donc la, deja  ça foire.

Offline


La fonction mail doit être déclarée dans la classe Paybox, pas en dehors:

	class Paybox extends PluginsPaiements{

		var $defalqcmd = 0;

		function Paybox(){
			$this->PluginsPaiements("paybox");
		}

		function mail() {
			// Ici !!!
		}

		function init(){
			$this->ajout_desc("CB", "CB", "", 1);
		}

		function paiement($commande){

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

	}

CQFDev | Sites, boutiques, modules, développement et intégration pour Thelia 1 et 2

Offline


ok merci, effectivement je ne l'avais pas mis dans la class Paybox.
Par contre, maintenant le mail de confirmation de commande ne s'envoie plus du tout, meme après acceptation du paiement.

Offline


Il y a (au moins) un sujet qui traite l'envoi du mail après paiement sur le forum, tu devrais y trouver ton bonheur.

Last edited by roadster31 (17-05-2011 21:51:12)


CQFDev | Sites, boutiques, modules, développement et intégration pour Thelia 1 et 2

Offline


ben je pense etre dans le principal topic qui traite de ce sujet, justement ?

En fait, tu as repondu à ma question dans ta reponse precedente.
Je n'avais tout simplement pas mis les function confirmmail et confirmation à l'interieur de class Paybox, meme erreur qu'avec la function mail vide.

peut etre à preciser dans le premier message du topic ?
en tous cas, merci roadster.
Ca fonctionne maintenant.

sauf dans le cas ou le visiteur ne revient pas sur le site après son paiement Paybox.
Dans ce cas, le paiement peut etre validé sans que les mails de confirmation ne soient envoyés.
comme dit ici par pierrezf il faut surement se servir de l'adresse de retour HTTP.

edit : à noter qu'il faut egalement creer la fonction mail vide dans la class Cheque, si on utilise ce mode de paiement, pour eviter que les mails de confirmation ne partent en double.

Last edited by ChDUP (18-05-2011 11:07:30)

Offline


Bonjour,

Je me raccroche à cette discussion. Je fonctionne avec paybox et e-transactions. Pour le moment, je suis en phase de test.

Il y a deux jours, alors que je n'avais pas encore donné l'url http retour à e-transactions, j'ai testé la méthode expliqué en page 1 de ce topic. Et lorsque je changeais manuellement le "non payé" en "payé", l'email partait à l'admin et au client sans soucis.

Or, depuis aujourd'hui, j'ai transmis l'url http retour à e-transactions, et donc quand je paye, le statut passe automatiquement en "payé".

Mais...plus de mails envoyés à l'admin ou au client. Le client reçoit simplement le ticket de paiement de e-transactions.

Je n'y comprends vraiment rien.

Offline


Bonjour,

Je viens de refaire une session de tests. J'ai la version Thelia 1.5 en "fresh/clean install", plugin Paybox.

Si je ne fais pas la modification expliquée dans ce topic en page 1, l'email s'envoie avant que le client n'aie payé.

Si je fais la modification dans paybox.class.php, alors aucun email n'est envoyé à l'administrateur et au client.

Si quelqu'un a résolu ce problème, une petite aide ne serait pas de refus wink

Offline


Tout est rentré dans l'ordre.

J'ai retéléchargé la version 1.5 du plugin paybox, fait la méthode indiqué en page 1 de ce topic. Et configuré la variable mail dans le back office.

Tout fonctionne parfaitement. C'était le dernier point à corriger pour que ma boutique fonctionne correctement. smile

Offline


Bonjour à tous,

Si j'ai résolu le problème, je ne m'étais néanmoins pas aperçu que lorsque le paiement était refusé (Par exemple, le client entre un mauvais numéro de carte), et bien, le client reçoit tout de même un email de confirmation de commande...

Je fais les tests pour être sûr que tout fonctionne avec d'envoyer la demande de mise en service à e-transaction du crédit agricole. Et là je suis un peu coincé.

Je précise, que si je mets en place la deuxième méthode proposé en première page, aucun email n'est envoyé, que le paiement soit accepté ou refusé.

C'est assez embêtant, puisque la boutique doit être opération dans une semaine.

Merci à ceux qui auraient une idée.

Offline


Suis-je le seul à connaître ce problème avec le module Paybox ?

Offline


salut Keucha wink
Pour ma part j'utilise le mode de règlement Paypal (et je rencontre aussi encore à ce jour des soucis d'envoi de mail de confirmation au client même si la transaction n'a pas abouti.)

Désolé, je cherche aussi !

Offline


Merci d'être passé par là gzmo26 wink

Je vais chercher un peu du côté des conditions, mais vu que la solution 2 en page 1 de ce topic ne fonctionne pas...

Je pense que je vais laisser en état...malheureusement. De toute façon le client voit à la fois la page d'erreur de la banque et il a le choix de retourner sur la boutique où il tombe sur la page regret ou sur le site de la banque où il peut recommencer son opération.

Et de mon côté, j'ai de toute façon le back office de ma banque pour vérifier les paiements...(Puisque du coup, je reçois également l'email d'une nouvelle commande passée).

A part ce petit désagrément, tout roule, la boutique sera donc en ligne très vite.

Offline


Bonjour,

Je connais des petits soucis avec le plugin Paypal sur un THELIA 1.4.4.
J'ai suivi scrupuleusement la méthode expliquée par Manu en comparant également mon fichier Paypal.class.php à ceux présentés tout au long de cette discussion.

J'accède bien au site Paypal sur lequel j'ai déjà fait deux tests de paiement (0,01€) avec une CB mais pas en utilisant un compte paypal. Le paiement est bien réalisé au niveau de la banque et de Paypal, par contre le statut ne change pas dans le BO (la commande reste non-payée) de plus (logique) l'e-mail de confirmation n'est pas envoyé.

Est-ce que quelqu'un aurait une idée ou est-ce que quelqu'un aurait connu le même problème ?

Un grand merci d'avance.

Offline


Eh bien, je crois avoir trouvé.
C'était tout bêtement un soucis avec un fichier .htaccess qui bloquait le retour des infos de Paypal.

Offline


Euh, préciser qu'il s'agit bien du fichier .htaccess ?

Offline


Bonjour,

Suite de mes aventures avec le mail de confirmation. :-)
Avec le plugin sppluscgi sur un THELIA 1.5 en mode test, les messages de confirmation partent bien après le paiement.
Malheureusement, le client en reçois 3 ou + et le marchand 2 ou 3.

J'avais noté que la modification expliqué par Manu ne devait s'appliquer qu'à un seul plugin de paiement. J'ai revérifié l'ensemble des plugins de paiement et aucun ne comporte cette modification.

Donc, je ne comprends pas bien d'où pourrait venir ce soucis.
Est-ce que quelqu'un aurait une piste ?

Merci

Ci-dessous mon fichier Sppluscgi.Class.php :

<?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 Sppluscgi extends PluginsPaiements{


		function __construct(){
			parent::__construct("sppluscgi");
		}
		
		function init(){
			$this->ajout_desc("CB", "CB", "", 1);			
		}
	
		function mail($commande){
		}

		function confirmmail($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 confirmation($commande){
			$this->confirmmail($commande);
		}

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

?>

Offline


Normal : la méthode confirmation() de TOUS les plugins actifs est appelée par Thelia, d'ou les mails en plusieurs exemplaires.

Comment régler ce problème ? En vérifiant dans chaque méthode confirmation() que le plugin courant est bien celui qui a été utilisé pour le paiement de la commande.


	// On envoie le mail après confirmation du paiement
	function mail($commande) {
		// Ne rien faire.
	}

	function confirmation($commande) {
		// On envoie le mail de confirmation sur paiement réussi
		// Et si c'est ce module qui a été utilisé pour le paiement
		$module = new Modules();

		if ($module->charger_id($commande->paiement) && $this->nom_plugin == $module->nom && $commande->statut == 2)
		{
			parent::mail($commande);
		}
	}

L'include de Modules.class.php est nécessaire.

Et plutôt que recopier texto le code de PluginsPaiement::mail(), on invoque simplement la méthode. C'est pratique les langages objet smile

Attention également de bien vérifier aussi que le constructeur du plugin initialise correctement le nom du plugin :

        function __construct(){
            parent::__construct("sppluscgi");
        }

Si ce n'est pas le cas, la condition $this->nom_plugin == $module->nom ne sera jamais vérifié.

Last edited by roadster31 (06-10-2011 09:47:15)


CQFDev | Sites, boutiques, modules, développement et intégration pour Thelia 1 et 2

Offline


Bonjour roadster31,

À défaut de pouvoir dire que je comprends en gros le code PHP ci-dessus, je dirais que je le vois de loin.   ;-)

Bon, toujours est-il :
J'ai inclus Modules.class.php et vérifier le constructeur du plugin (qui est ok).

Par contre deux choses me posent question :
Lorsque tu dis

En vérifiant dans chaque méthode confirmation() que le plugin courant est bien celui qui a été utilisé pour le paiement de la commande.

Faut-il insérer ce code uniquement dans le plugin sppluscgi ou bien faut-il l'insérer dans chaque plugin utilisant la fonction confirmation ?

Enfin, dans la condition qui vérifie quel module est chargé est-ce que «nom_plugin» et «nom» sont à modifier ?

Merci

Offline


Faut-il insérer ce code uniquement dans le plugin sppluscgi ou bien faut-il l'insérer dans chaque plugin utilisant la fonction confirmation ?

Il faut l'insérer dans chaque plugin utilisant la fonction confirmation.

Enfin, dans la condition qui vérifie quel module est chargé est-ce que «nom_plugin» et «nom» sont à modifier ?

Laisse le code tel quel, mais vérifie bien que le construteur est correct :

function __construct(){
            parent::__construct("le_nom_du_plugin");
        }

où le_nom_du_plugin est le nom correct du plugin, c'est à donc le nom du repertoire qui le contient.


CQFDev | Sites, boutiques, modules, développement et intégration pour Thelia 1 et 2

Offline


Ok, merci pour ces précisions.
j'y retourne !

tongue

Last edited by rigamarole (07-10-2011 15:38:56)

Offline


Mmmh…… bizarre, bizarre.

Je viens de passer au peigne fin l'ensemble des plugins (et leur fichiers class.php) et aucun n'utilise cette fonction confirmation.

Du coup, je ne vois vraiment pas ce qui peut générer l'envoi de multiples mails.
Une idée ?

Merci d'avance.

Offline


Ha ha !

Si un plugin de paiement n'a pas sa méthode confirmation(), ce sera celle de la classe parente (PluginClassique), dont il a hérité, qui sera utilisée.

C'est une des grandes forces des langages objet : l'héritage.

La solution : dans tes plugins paiement actifs, il te faut surcharger les méthodes mail() et confirmation(). Pour faire simple, copier/coller celles qui existent dans sppluscgi.

Attention aux constructeusr, comme indiqué plus haut dans ce sujet.

Last edited by roadster31 (10-10-2011 13:53:39)


CQFDev | Sites, boutiques, modules, développement et intégration pour Thelia 1 et 2

Offline


Concernant les plugins de paiement, seul sppluscgi est actif.
Il ne me reste que les plugins de transport et deux-trois autres bricoles.
Pour mes tests, j'avais poussé le vice jusqu'à retirer les autres.

Offline


J'ai suivi la manip de la première page, mais je me retrouve à recevoir le mail en double (et côté client aussi).

Le code de ma page atos.class.php :

		function mail($commande){
		}
		function confirmmail($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 confirmation($commande){
				$this->confirmmail($commande);
			}