THELIA Forum

Welcome to the THELIA support and discusssion forum

Announcement

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

Offline


j'ai bien redirectionné avec fond=merci chez paypal,  mais la redirection auto ne se fait pas.
J'ai, peut être encore loupé qq chose
A +

Offline


J'ai changé en fond=merci, toujours pas de redirection automatique avec paypal;
c’est finalement peut être normal si on ne paye pas avec un compte paypal à la boutique, mais avec une carte bancaire.
Lorsqu'on rembourse le client en annulant son paiement, tout est ok, il est bien averti  (la boutique aussi)mais cela génère la même facture qui est renvoyé au client et à la boutique; ça pourrait perturber le client..
Si je dois rembourser un client en annulant son paiement sur paypal, je lui signalerais cela

Offline


pas de redirection avec l'un ou l'autre, mais cela vient peut être de paypal, car je n'utilise pas un compte pro.

Pour l'instant cela n'est pas génant.
A+
Pierre

Offline


Version : Thelia V 1.5.3.4
Plugin Paypal2 v.2.3

J'ai trouvé une solution au problème de confirmation avec le plugin paypal2 (et paypal), qui empêchait le statut de la commande à devenir "payé" et l'alerte email d'être envoyée (que ce soit en sandbox ou en live).

Paypal envoie une requête au serveur du site thelia quand l'utilisateur effectue le paiement. Or, le script "confirmation2.php" (ou confirmation.php) effectuait un nouvel appel vers paypal pour ensuite vérifer la présence de la chaine "VERIFIED" :

if(strstr($reponse, "VERIFIED"))

Après vérification, ça ne sert à rien de le faire, et surtout ce test ne valide jamais (plus à jour ?).
Voici le nouveau contenu du fichier "confirmation2.php" qui a résolu mon problème :

<?php

include_once("config2.php");
include_once("../../../classes/Commande.class.php");	
include_once("../../../fonctions/divers.php");

//  on se fie au 1er retour paypal, qui envoie déjà ce qu'on attend :
if ( $_REQUEST[ 'payment_status' ] == "Completed" )
{
  $reference = $_POST['invoice'];
  $commande = new Commande();
  $commande->charger_trans($reference);
  $commande->statut = 2;
  $commande->genfact();
  $commande->maj();
  modules_fonction("confirmation", $commande);
}

?>

Offline


Je vais tester cela.
Je te tiens informé
A+

Offline


roadster31 wrote:

Reg désolé, mais tu es à côté de la plaque.

Pour faire en sorte que le mail n'arrive que lorsque la commande est effectivement payée, voici les modifications à apporter au plugin (et à n'importe quel plugin de paiement 'en ligne') à partir de Thelia 1.5.1.

A la fin du fichier Paypal2.class.php, remplacer:

	}

?>

Par:

// 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
    	if ($commande->statut == 2 && $this->est_module_de_paiement_pour($commande)) {
    		parent::mail($commande);
    	}
    }
}
?>

Et voilà.

Bonjour,

JE voudrais juste installer et/ou parametrer mon paypal2 pour arriver sur paypal integral et un paiement en CB ? M'aider ?merci


www.richesses-du-monde.com
Mac Os X Leopard

Offline


Il faut arrêter de poster partout la même demande, ça ne sert à  rien, a part irriter ceux qui te lisent.


OpenStudio Toulouse

Offline


Bonjour tous

roadster31 wrote:

Pour faire en sorte que le mail n'arrive que lorsque la commande est effectivement payée, voici les modifications à apporter au plugin (et à n'importe quel plugin de paiement 'en ligne') à partir de Thelia 1.5.1.
A la fin du fichier Paypal2.class.php, remplacer:

	}

?>

Par:

// 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
    	if ($commande->statut == 2 && $this->est_module_de_paiement_pour($commande)) {
    		parent::mail($commande);
    	}
    }
}
?>

Et voilà.

Malgré ça, au retour du paiement, on ne passe pas en "Payé", donc pas de mail de confirmation de thelia, ceux de paypal, oui.

Offline


La modif n'est pas la cause du problème.  Si on ne passe pas en payé, ça veut dire que l'URL de confirmation n'est pas appelée, ou est inaccessible.

Regarde dans le access.log d'apache pour avoir des indices.


OpenStudio Toulouse

Offline


Bonjour roadster31

roadster31 wrote:

Regarde dans le access.log d'apache pour avoir des indices.

Bon, je demande à hosteur comment voir cet access.log

Sinon, j'ai vu dans les nombreux posts, qu'il faudrait modifier confirmation2.php comme ceci :

<?php

include_once("config2.php");
include_once("../../../classes/Commande.class.php");	
include_once("../../../fonctions/divers.php");

//  on se fie au 1er retour paypal, qui envoie déjà ce qu'on attend :
if ( $_REQUEST[ 'payment_status' ] == "Completed" )
{
  $reference = $_POST['invoice'];
  $commande = new Commande();
  $commande->charger_trans($reference);
  $commande->statut = 2;
  $commande->genfact();
  $commande->maj();
  modules_fonction("confirmation", $commande);
}

?>

Offline


RE

Bon j'ai eu mon client qui m'a donné le jour et l'heure de sa vente.
J'ai récupéré l'access.log du serveur mais aussi ceux du site, xxx.com_access.log et xxx.com_error.log

Par contre je ne sais pas du tout ce qu'il faut chercher ?

Offline


Les appels à confirmation2.php


OpenStudio Toulouse

Offline


RE

J'ai ouvert les fichiers avec notepad++ et lancé la recherche avec confirmation2.php
RIEN.

Offline


Alors ça veut dire que confirmation2.php n'est pas appelé.


OpenStudio Toulouse

Offline


RE

roadster31 wrote:

Alors ça veut dire que confirmation2.php n'est pas appelé.

D'accord mais dans ce cas comment vérifier ?

Je met le fichier confirmation2.php pour voir :

<?php


include_once("config2.php");
include_once("../../../classes/Commande.class.php");	
include_once("../../../fonctions/divers.php");

$chaine = ''; 
$reponse = '';
$donnees = '';
  
$url = parse_url($serveur);        
//file_put_contents(__DIR__."/url.txt", print_r($url,1));
foreach ($_POST as $champs=>$valeur) { 
   $donnes["$champs"] = $valeur;
   $chaine .= $champs.'='.urlencode(stripslashes($valeur)).'&'; 
}
$chaine.="cmd=_notify-validate";

if ($url['scheme'] == 'https') {
 
 $host = "ssl://" . $url['host'];
 $port = 443;
}
else {
 $host = $url['host'];
 $port = 80;
}

// open the connection to paypal
$fp = fsockopen($host, $port ,$err_num,$err_str,30);

if(!$fp) {
 //file_put_contents(__DIR__."/err.txt", "errnum: $err_num = $err_str");
     return false;
 } else { 

   fputs($fp, "POST $url[path] HTTP/1.1\r\n"); 
   fputs($fp, "Host: ".$url['host']."\r\n");
   fputs($fp, "Content-type: application/x-www-form-urlencoded\r\n"); 
   fputs($fp, "Content-length: ".strlen($chaine)."\r\n"); 
   fputs($fp, "Connection: close\r\n\r\n"); 
   fputs($fp, $chaine . "\r\n\r\n"); 

   while(!feof($fp))  
      $reponse .= fgets($fp, 1024); 
  
   fclose($fp); 

}
//file_put_contents(__DIR__."/log.txt", $reponse);
if(strstr($reponse, "VERIFIED")){

	$reference = $_POST['invoice'];

	$commande = new Commande();
	$commande->charger_trans($reference);
    $commande->statut = 2;
    $commande->genfact();
	$commande->maj();

	modules_fonction("confirmation", $commande);

}

?>

Offline


Tu n'as pas confiance dans le access.log d'apache ?


OpenStudio Toulouse

Offline


RE

roadster31 wrote:

Tu n'as pas confiance dans le access.log d'apache ?

Ben si, mais tu dis :

roadster31 wrote:

Alors ça veut dire que confirmation2.php n'est pas appelé.

Donc je me demande si ça vient pas du fichier confirmation2.php.
Sinon comment ça se fait que ce fichier ne soit pas appelé ? je dois vérifier quoi ? quel fichier ?

Offline


Le fichier n'est pas appelé parce que Paypal ne fait pas de requête vers ce fichier. En d'autres mots, l'URL http://tonserveur.tld/paypal2/confirmation2.php n'est pas appelé par PayPal.


OpenStudio Toulouse

Offline


RE

Oui, j'ai bien compris que ce fichier n'est pas appelé, mais que faut-il faire ou vérifier pour qu'il le soit.
Je rappelle que Paypal a bien encaissé la vente.

Le fichier que j'ai mis en #40 est légérement different que celui de base dans le plugin.
Je n'y touche pas puisque je met le plugin que tu as repris lors d'une installation.

Offline


Oui, j'ai bien compris que ce fichier n'est pas appelé, mais que faut-il faire ou vérifier pour qu'il le soit.

Vérifier quoi ?

Tu regardes dans le fichier access.log de Apache. Si l'appel à confirmation2.php n'y est pas, c'est que l'URL n'est pas appelée par PayPal. C'est à ça qu'il sert le fichier access.log, à dire quelles sont les pages appelées sur le serveur, par qui, à quel moment et quel a été le statut HTTP retourné.

Je ne sais pas quoi te dire d'autre.


OpenStudio Toulouse

Offline


RE

roadster31 wrote:

Si l'appel à confirmation2.php n'y est pas, c'est que l'URL n'est pas appelée par PayPal.

Mais dans ce cas, je dois faire quoi ???
C'est le plugin ?
Ca vient de Paypal ?

Offline


C'est quoi que tu ne comprends pas dans "Paypal n'appelle pas confirmation2.php"?


OpenStudio Toulouse

Offline


RE

Ce que je ne comprend pas, c'est tout simplement quoi faire pour que ça marche normalement.
Il y a tellement de topics ouverts qu'on ne sait plus quoi lire, tout le monde dit la sienne mais je vois peu de topics résolus.

Peut-etre le post #29

EDIT:
coté paypal, l'encaissement se fait avec le bon article et le bon prix.
c'est donc coté thelia qu'il y a quelque chose, non ?

Last edited by griggione (10-12-2016 18:03:12)

Offline


ta pas passé ton site en https, j'ai une des changement a faire sur les adresses retour sur PayPal et systempay

Offline


Bonjour gimly

T'es sur ? parce que ce n'est pas signalé dans le readme.txt.
Surtout que je l'ai sur un autre site qui n'est pas en https.