Une expérience de ClicToPay, solution bancaire tunisienne ?

  • Posts: 214
  • Thank you received: 11
  • Hikashop Business
3 years 3 months ago #334973

Encore un grand merci ! :)

Je ne suis pas encore au bout, mais ça approche.

Maintenant, le formulaire s'affiche bien et je peux vérifier avec une carte de test. La validation me ramène bien sur le site marchand.
Il me faut maintenant appeler l'adresse de vérification, ce qui va m'obliger à modifier le mot "register" par "getOrderStatus" dans l'adresse du serveur monétique définie dans les paramètres.
Elle est utilisée sous la forme

$vars['paymentUrl']
Mais si je fais un
$checkpayment_url = str_replace('register', 'getOrderStatus',$vars['paymentUrl']);
je ne récupère que du vide, l'URL ne peut donc être correcte.

Je ne désespère plus ! ;)

PS : une fois revenu du formulaire chez ClicToPay, on ne passe pas par la fonction onPaymentNotification, que je laisse active ou non la ligne de redirection return $this->showPage('end'); en fin de fonction onAfterOrderConfirm et je ne comprends pas pourquoi.
L'adresse de retour est index.php?option=com_hikashop&ctrl=checkout&task=after_end
Si je définis l'adresse "notify", je passe directement de la validation de commande à l'accueil de la boutique, pas de formulaire ClicToPay
je précise que tous ces tests sont faits sur Hikashop Starter

PS suite : en créant une variable pour récupérer le $varspaymentUrl, l'adresse de demande de notification se crée bien

Last edit: 3 years 3 months ago by RG-Consultant.

Please Log in or Create an account to join the conversation.

  • Posts: 82863
  • Thank you received: 13372
  • MODERATOR
3 years 3 months ago #334977

Bonjour,

La fonction onAfterOrderConfirm est appelée à la fin du passage en caisse.
Si vous faites un redirect dans cette fonction, alors cela stoppe l'éxecution du code dans cette fonction et redirige vers l'URL que vous fournissez au redirect.
Donc il est normal que la ligne

return $this->showPage('end');
ne fasse rien, car c'est la ligne
$app->redirect(data->formUrl);
qui fait la redirection vers la plateforme de paiement avant elle.
D'après les éléments que vous avez fourni précédemment, c'est dans returnUrl que vous voulez fournir l'URL de notification pour que onPaymentNotification soit appelée au retour de la plateforme de paiement.
Je ne sais sais à quoi vous faites référence quand vous parlez de "register", "getOrderStatus" ou "paymentUrl". Ce sont de nouveaux termes dont vous n'aviez pas parlé jusqu'à présent. Veuillez comprendre que je n'ai pas la documentation de clictopay et le lien www.clictopay.com.tn/public_html/media/m...nuel-integration.pdf qui permet apparemment de la récupérée ne semble pas fonctionner de mon coté.
Je pense qu'il serait également intéressant que vous fournissiez le code des fonctions onAfterOrderConfirm et onPaymentNotification dans des balises [ code ] pour avoir une idée plus claire de la situation.

Please Log in or Create an account to join the conversation.

  • Posts: 214
  • Thank you received: 11
  • Hikashop Business
3 years 3 months ago #334979

Merci Nicolas,

Les variables dont j'ai parlé sont celles qui servent pour transmettre les informations au serveur. J'ai précédemment évoqué register et getOrderStatus en citant des parties du code pour WP que j'ai récupéré.
Le premier (register.do) est dans l'adresse initiale de connexion au serveur, le second (getOrderStatus.do) sert à demander l'état de la transaction.

J'ai essayé d'utiliser l'adresse de notification donnée dans le plugin exemple

pluginConfig['return_url'][2]
qui est définie comme
$this->pluginConfig['notify_url'][2] = HIKASHOP_LIVE.'index.php?option=com_hikashop&ctrl=checkout&task=notify&notif_payment='.$this->name.'&tmpl=component';
Mais avec elle, je n'accède plus à la page du formulaire ClicToPay. Aucune erreur, je passe de la page de commande à la racine de la boutique.
En utilisant précisément cette adress au lieu de $this->pluginConfig[2] défini plus haut dans le code, j'accède enfin au paiement ClicToPay

Je n'ai pas non plus de documentation d'intégration, ce PDF sans aucun rapport avec les boutiques est la seule information qu'a transmise ClicToPay avec les infos d'accès au serveur, l'adresse du serveur de tests et les n° de CB de tests. Il semble que leur seul mode de fonctionnement prévu (en dehors de plugin tiers pour d'autres boutiques) est la création de formulaires sur leur site depuis l'administration du compte, leur validation, puis leur intégration un à un sur le site final. La seule documentation dont je dispose est le plugin WP dont j'ai parlé et qui me permet de savoir quelles variables passer et la réinterrogation du serveur pour la vérification de la transaction.

Dans la mesure où il faut ouvrir une URL avec les informations de commande, récupérer la réponse avec l'adresse "formUrl" qui, elle, ouvre le formulaire sur le site ClicToPay, cette première partie fonctionne en appelant cette formUrl par
$app->redirect($data->formUrl);
placé à la fin de la fonction OnAfterOrderConfirm
L'URL de retour utilisée est
index.php?option=com_hikashop&ctrl=checkout&task=after_end
Si je change pour
index.php?option=com_hikashop&ctrl=checkout&task=notify&notif_payment=clictopay&tmpl=component
qui est l'exemple, je peux payer mais je reviens sur la page d'accueil de la boutique sans passer par la fonction onAfterOrderConfirm
Y aurait-il une autre syntaxe pour que le retour se fasse sur la fonction onPaymentNotification ?

Ce qu'il me faut donc, c'est comprendre où récupérer le passage dans le code après la validation du paiement puisque je n'ai pas d'info montrant le passage dans onPaymentNotification.
Faudrait-il , au lieu de la redirection cURL dans cette fonction, la gérer dans une nouvelle fonction pour obtenir la valeur de formUrl dont le retour se ferait alors dans onAfterOrderConfirm ?

Pour savoir si on passe par onPaymentNotification, j'ai ajouté ce code d'insertion dans les logs
//After submiting the plateform payment form, this is where the website will receive the response information from the payment gateway servers and then validate or not the order
	function onPaymentNotification(&$statuses)
	{
		if($this->payment_params->debug)
				$this->writeToLog('onPaymentNotification');
		//We first create a filtered array from the parameters received
		$vars = array();
Voici le code de onAfterOrderConfirm
//This function is called at the end of the checkout. That's the function which should display your payment gateway redirection form with the data from HikaShop
	function onAfterOrderConfirm(&$order,&$methods,$method_id)
	{
		parent::onAfterOrderConfirm($order,$methods,$method_id); // This is a mandatory line in order to initialize the attributes of the payment method

		//Here we can do some checks on the options of the payment method and make sure that every required parameter is set and otherwise display an error message to the user
		if (empty($this->payment_params->identifier)) //The plugin can only work if those parameters are configured on the website's backend
		{
			$this->app->enqueueMessage('You have to configure an identifier for the ClicToPay plugin payment first : check your plugin\'s parameters, on your website backend','error');
			//Enqueued messages will appear to the user, as Joomla's error messages
			return false;
		}
		elseif (empty($this->payment_params->password))
		{
			$this->app->enqueueMessage('You have to configure a password for the ClicToPay plugin payment first : check your plugin\'s parameters, on your website backend','error');
			return false;
		}
		elseif (empty($this->payment_params->payment_url))
		{
			$this->app->enqueueMessage('You have to configure a payment url for the ClicToPay plugin payment first : check your plugin\'s parameters, on your website backend','error');
			return false;
		}
		else
		{
			//Here, all the required parameters are valid, so we can proceed to the payment platform


			$amout = round($order->cart->full_total->prices[0]->price_value_with_tax,2)*100;
			//The order's amount, here in cents and rounded with 2 decimals because of the payment platform's requirements
			//There is a lot of information in the $order variable, such as price with/without taxes, customer info, products... you can do a var_dump here if you need to display all the available information

			//This array contains all the required parameters by the payment plateform
			//Not all the payment platforms will need all these parameters and they will probably have a different name.
			//You need to look at the payment gateway integration guide provided by the payment gateway in order to know what is needed here
			$vars = array(
				'userName' => $this->payment_params->identifier, //User's identifier on the payment platform
				'password' => $this->payment_params->password,
				//'CLIENTIDENT' => $order->order_user_id, //The id of the customer
				//'DESCRIPTION' => "order number : ".$order->order_number, //Order's description
				'orderNumber' => $order->order_id, //The id of the order which will be given back by the payment gateway when it will notify your plugin that the payment has been done and which will allow you to know the order corresponding to the payment in order to confirm it
				//'VERSION' => 2.0, //The platform's API version, needed by the payment platform
				'returnUrl' => HIKASHOP_LIVE.'index.php?option=com_hikashop&ctrl=checkout&task=notify&notif_payment='.$this->name.'&tmpl=component', //$this->pluginConfig['return_url'][2], //$this->payment_params->return_url , //.'/onPaymentNotification&userName=' . $this->payment_params->identifier, 
				//'returnURL' => $this->pluginConfig['notify_url'][2],
				'paymentUrl'=> $this->payment_params->payment_url,
				'currency' => '788',
				'amount' => $amout, //The amount of the order
			);

			//To certifiate the values integrity, payment platform use to ask a hash
			//This hash is generated according to the platform requirements
			$vars['token'] = $this->clictopay_signature($this->payment_params->password,$vars);
			$this->vars = $vars;
			
			$checkpayment_url = $vars['paymentUrl'];
			$checkpayment_url = str_replace('register', 'getOrderStatus',$vars['paymentUrl']);
			$orderId = $vars['orderNumber'];
			$password = $vars['password'];
			$userName = $vars['userName'];
			
			$url = $vars['paymentUrl'] . '?currency=788&amount=' . $vars['amount'] . '&orderNumber=' . $vars['orderNumber'] . '&password=' . $vars['password'] . '&returnUrl='.$vars['returnUrl']. '&userName=' . $vars['userName'];
			$check_url = $checkpayment_url . '?orderId=' . $orderId . '&password=' . $password . '&userName=' . $userName ;
			if($this->payment_params->debug){
				$this->writeToLog($check_url);
			}

			//Add the data sent to the payment gateway to the payment log when the debug setting of the payment method is activated
			if($this->payment_params->debug)
				$this->writeToLog($vars);
				
			$ch = curl_init();  
			curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
			curl_setopt($ch, CURLOPT_URL, $url); 
			curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
			$result = curl_exec($ch); 
			$data = json_decode($result);
			$app = JFactory::getApplication();
			$app->redirect($data->formUrl);
			
			// Check if the payment is successful or not and redirect to correct page //où le placer ? neutralisé pour le moment
			/*$ch = curl_init();  
			curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
			curl_setopt($ch, CURLOPT_URL, $url); 
			curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
			$result = curl_exec($ch); 
			$data = json_decode($result);
			$app = JFactory::getApplication();
			
			if($this->payment_params->debug)
				$this->writeToLog($data['ErrorMessage']);
				
			if ($data['ErrorMessage'] === 'Success') {
				$app->redirect($this->pluginConfig['return_url'][2]);
			} else {
				$app->redirect($this->pluginConfig['cancel_url'][2]);
			}*/
			//Ending the checkout, ready to be redirect to the plateform payment final form
			//The showPage function will call the clictopay_end.php file which will display the redirection form containing all the parameters for the payment platform
			//return $this->showPage('end');
		}
	}

Last edit: 3 years 3 months ago by RG-Consultant.

Please Log in or Create an account to join the conversation.

  • Posts: 82863
  • Thank you received: 13372
  • MODERATOR
3 years 3 months ago #334980

Bonjour,

Je pense que ce qu'il vous faut, c'est changer la ligne:

'returnUrl' => HIKASHOP_LIVE.'index.php?option=com_hikashop&ctrl=checkout&task=notify&notif_payment='.$this->name.'&tmpl=component',
en:
'returnUrl' => HIKASHOP_LIVE.'index.php?option=com_hikashop&ctrl=checkout&task=notify&notif_payment='.$this->name.'&tmpl=component&lang='.$this->locale . $this->url_itemid,

Aussi, pour être sûr de savoir si vous passez dans onPaymentNotification faites plutôt ceci:
function onPaymentNotification(&$statuses) {
echo 'test';
exit;
}
Ainsi, si cela fonctionne, après le paiement sur la plateforme de paiement, vous devriez atterrir sur une page blanche avec juste écrit "test".

Please Log in or Create an account to join the conversation.

  • Posts: 214
  • Thank you received: 11
  • Hikashop Business
3 years 3 months ago #335009

Merci Nicolas,

Hélas, aucun passage dans onPaymentNotification.
L'adresse de retour générée est

/index.php?option=com_hikashop&ctrl=checkout&task=notify¬if_payment=clictopay&tmpl=component&lang=fr&Itemid=126
Celle qui s'affiche dans le site au retour du paiement est
index.php?option=com_hikashop&orderId=c795dbb6-31b7-77de-bcfe-fdce00bb1a72&lang=fr
Voici ce que j'ai dans les logs lors d'une transaction :
86.202.27.103 - - [13/Aug/2021:16:52:21 +0200] "POST /index.php?option=com_hikashop&ctrl=checkout&cid=1&Itemid=126 HTTP/1.1" 303 - "https://hikastarter.**********.fr/index.php?option=com_hikashop&ctrl=checkout&Itemid=126" "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:91.0) Gecko/20100101 Firefox/91.0"
86.202.27.103 - - [13/Aug/2021:16:52:21 +0200] "GET /index.php?option=com_hikashop&ctrl=checkout&task=confirm&Itemid=126 HTTP/1.1" 303 - "https://hikastarter..**********.fr/index.php?option=com_hikashop&ctrl=checkout&Itemid=126" "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:91.0) Gecko/20100101 Firefox/91.0"
86.202.27.103 - - [13/Aug/2021:16:53:03 +0200] "GET /index.php?option=com_hikashop&orderId=c795dbb6-31b7-77de-bcfe-fdce00bb1a72&lang=fr HTTP/1.1" 200 5551 "https://test.clictopay.com/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:91.0) Gecko/20100101 Firefox/91.0"
86.202.27.103 - - [13/Aug/2021:16:53:04 +0200] "GET /media/com_hikashop/css/hikashop.css?v=443 HTTP/1.1" 200 7967 "https://hikastarter..**********.fr/index.php?option=com_hikashop&orderId=c795dbb6-31b7-77de-bcfe-fdce00bb1a72&lang=fr" "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:91.0) Gecko/20100101 Firefox/91.0"

Last edit: 3 years 3 months ago by RG-Consultant.

Please Log in or Create an account to join the conversation.

  • Posts: 82863
  • Thank you received: 13372
  • MODERATOR
3 years 3 months ago #335012

Bonjour,

Ah oui, je vois quel est le souci.
Cela vient de la ligne:

$url = $vars['paymentUrl'] . '?currency=788&amount=' . $vars['amount'] . '&orderNumber=' . $vars['orderNumber'] . '&password=' . $vars['password'] . '&returnUrl='.$vars['returnUrl']. '&userName=' . $vars['userName'];
Vous n'avez pas urlencode le paramètre
$vars['returnUrl']
et du coup le serveur de paiement ne voit pas les paramètres de votre returnUrl comme des paramètres de la returnUrl mais comme des paramètres de $url et donc les ignore.
Le code devrait donc être:
$url = $vars['paymentUrl'] . '?currency=788&amount=' . $vars['amount'] . '&orderNumber=' . $vars['orderNumber'] . '&password=' . $vars['password'] . '&returnUrl='.urlencode($vars['returnUrl']). '&userName=' . $vars['userName'];
D'ailleurs, notez que si le numéro de commande, ou le mot de passe ClicToPay ou le userName ClicToPay contiennent un &, cela empêchera également la plateforme de paiement de voir la variable que vous voulez et l'affichage du formulaire de paiement sera refusé.
Donc il faudrait plutôt faire:
$url = $vars['paymentUrl'] . '?currency=788&amount=' . $vars['amount'] . '&orderNumber=' . urlencode($vars['orderNumber']) . '&password=' . urlencode($vars['password']) . '&returnUrl='.urlencode($vars['returnUrl']). '&userName=' . urlencode($vars['userName']);
pour être sûr que cela fonctionne dans tous les cas.

Please Log in or Create an account to join the conversation.

  • Posts: 214
  • Thank you received: 11
  • Hikashop Business
3 years 3 months ago #335028

Merci Nicolas ! :)

Avec ce code, on revient bien sur la fonction onPaymentNotification.
Mais après suppression de l'affichage du message et de "exit", la page est blanche.
J'espère que le code neutralisé que j'ai précédemment cité (// Check if the payment is successful or not and redirect to correct page) sera la solution pour récupérer la validation ou non de la transaction et utiliser le code par défaut pour mettre à jour la commande.

Please Log in or Create an account to join the conversation.

  • Posts: 214
  • Thank you received: 11
  • Hikashop Business
3 years 3 months ago #335031

Comment récupérer dans function onPaymentNotification une variable qui est celle de l'adresse de vérification de la validité du paiement, ou au moins "payment_url" défini précédemment ?

Dans la procédure d'accès au serveur monétique, avant d'y passer je crée une variable "$check_url" contenant l'adresse de vérification du paiement auprès du serveur monétique (que je vois bien dans les logs, inscrite avant l'appel à la page du serveur).

J'ai précédemment défini en début de classe.

var $check_url = '';

Mais dans la fonction onPaymentNotification j'ai mis ces instructions
echo ('test'. "\n");
		echo('adresse : ' . $check_url);
		exit;
et je vois bien après paiement "test" et "adresse : ' mais $check_url est vide. Idem pour
$vars['paymentUrl']
qui a été créé précédemment avec pour valeur $this->payment_params->payment_url

$this->payment_params->debug présent dans la fonction de notification du plugin exemple est également vide ou null, sa tentative d'affichage plante la page, et "test" se retrouve dans les logs, pas en echo dans la page vide au retour . Le code qui a remplacé le précédent pour ce nouveau test est

echo ('test'. "\n");
$this->writeToLog('debug :');
$this->writeToLog($this->payment_params->debug);


Je ne comprends pas pourquoi toutes ces variables sont vidées. :(

Merci de me dire quelle est mon erreur !

Last edit: 3 years 3 months ago by RG-Consultant.

Please Log in or Create an account to join the conversation.

  • Posts: 214
  • Thank you received: 11
  • Hikashop Business
3 years 3 months ago #335034

PS : pour interroger le serveur et obtenir l'info de succès ou échec du paiement j'ai besoin de l'adresse de paiement, l’identifiant et le mot de passe définis dans les paramètres du plugin, plus l'Id de commande

Pour résumer, déclaration de la variable en début de classe

var $check_url='';
Dans function onAfterOrderConfirm
$checkpayment_url = $vars['paymentUrl'];
$checkpayment_url = str_replace('register', 'getOrderStatus',$vars['paymentUrl']);
$orderId = $vars['orderNumber'];
$check_url = $checkpayment_url . '?orderId=' .  urlencode($orderId) . '&password=' .  urlencode($password) . '&userName=' .  urlencode($userName) ;
La vérification des variables renvoie leur valeur correcte. Au retour du formulaire de paiement,
function onPaymentNotification(&$statuses)
	{
		echo ('test'. "\n");
		if (!empty($check_url)) {
			$this->writeToLog();
		} else {
			$this->writeToLog ('empty');
		}
		exit;
Dans les logs, c'est "empty" qui est enregistré.

08.15.21 08:38:30 - clictopay
empty

Last edit: 3 years 3 months ago by RG-Consultant.

Please Log in or Create an account to join the conversation.

  • Posts: 214
  • Thank you received: 11
  • Hikashop Business
3 years 3 months ago #335035

Bon, si je comprends bien, ces variables ne sont pas partagées, ce qui les rend non utilisables dans la procédure de notification.
La question est donc comment rendre disponible pour onPaymentNotification cette variable "$check_url" qui est générée dans onAfterOrderConfirm et contient l'adresse à interroger pour connaître le succès ou l'échec du paiement et modifier le statut de la commande.

Please Log in or Create an account to join the conversation.

  • Posts: 214
  • Thank you received: 11
  • Hikashop Business
3 years 3 months ago #335037

On avance ! :)
Bien conseillé (un jour férié ;)) par roland_d_alsace sur le forum.joomla.fr pour la gestion de cette variable (en utilisant les variables de session), j'arrive maintenant à récupérer toutes les infos concernant la transaction chez ClicToPay.
Contrairement à ce que j'avais compris, ce n'est pas l'Id de commande Hikashop, mais "orderId" (la longue chaîne) renvoyé par le premier appel à l'URL du serveur et servant à accéder au formulaire qui est à utiliser lors de cette dernière étape.
Il reste donc à récupérer la variable "ErrorMessage" pour pouvoir confirmer ou annuler la commande.

Encore merci Nicolas pour vos conseils et votre patience ! Je vous recontacterai pour vous transmettre ce plugin pour vérifications et nettoyage.
Il me restera à faire des tests complémentaires après l'étape "statut".

Qui sait, peut-être oserai-je essayer un plugin Paymee ?

The following user(s) said Thank You: nicolas

Please Log in or Create an account to join the conversation.

  • Posts: 214
  • Thank you received: 11
  • Hikashop Business
3 years 3 months ago #335048

Je suis presque au bout. Les commandes sont bien validées ou annulées, mais le retour n'ouvre qu'une page blanche. Il s'agit de ce code dans onPaymentNotification

if($vars['ErrorMessage']!='Success') 		//The payment platform returns a code, corresponding to the state of the operation. Here, the "success" code is 0000. It means that any other code correspond to a payment failure > process aborted
		{
			//Here we display debug information which will be catched by HikaShop and stored in the payment log file available in the configuration's Files section.
			if($this->payment_params->debug)
				//echo 'payment '.$vars['ErrorMessage']."\n\n\n";
				$this->writeToLog('payment '.$vars['ErrorMessage']);
				
			//This function modifies the order with the id $order_id, to attribute it the status invalid_status.
			$this->modifyOrder($order_id, $this->payment_params->invalid_status, true, true);
			//$this->app->redirect($cancel_url); //To redirect the user, if needed. Here the redirection is useless : we are on server side (and not user side, so the redirect won't work), and the cancel url has been set on the payment platform merchant account
			return false;
		}
		else //If everything's OK, the payment has been done. Order is validated -> success
		{
			$this->modifyOrder($order_id, $this->payment_params->verified_status, true, true);

			//$this->app->redirect($return_url);
			return true;
		}
Les valeurs de retour définies ici doivent-elles être utilisées ?
//Here we are configuring the "succes URL" and the "fail URL". After checking all the parameters sent by the payment gateway, we will redirect the customer to one or another of those URL (not necessary for our example platform).
		$return_url = HIKASHOP_LIVE.'index.php?option=com_hikashop&ctrl=checkout&task=after_end&order_id='.$order_id.$this->url_itemid;
		$cancel_url = HIKASHOP_LIVE.'index.php?option=com_hikashop&ctrl=order&task=cancel_order&order_id='.$order_id.$this->url_itemid;
Si je les active, je reviens sur la page d'accueil et non pas sur celle confirmant la commande.
Faudrait-il utiliser plutôt $this->pluginConfig[2] et $this->pluginConfig[2] (ou encore notify_url) ?

PS : l’adresse de la page qui s'ouvre avec un autre moyen de paiement est

index.php?option=com_hikashop&ctrl=checkout&task=confirm&Itemid=126

Last edit: 3 years 3 months ago by RG-Consultant.

Please Log in or Create an account to join the conversation.

  • Posts: 82863
  • Thank you received: 13372
  • MODERATOR
3 years 3 months ago #335049

Bonjour,

Oui, tout à fait. Il suffit de décommenter les lignes:

//$this->app->redirect($cancel_url); //To redirect the user, if needed. Here the redirection is useless : we are on server side (and not user side, so the redirect won't work), and the cancel url has been set on the payment platform merchant account
et:
//$this->app->redirect($return_url);
pour rediriger vers les pages de remerciements ou d'annulation normales.
Ces lignes sont commentées car dans la plupart des intégrations, c'est le serveur de la plateforme de paiement qui contacte le onPaymentNotification et donc pas besoin de rediriger nulpart.
Mais là, c'est le retour client qui fait l'appel à onPaymentNotification et donc vous voulez ces lignes de redirection.

The following user(s) said Thank You: RG-Consultant

Please Log in or Create an account to join the conversation.

  • Posts: 214
  • Thank you received: 11
  • Hikashop Business
3 years 3 months ago #335055

Merci Nicolas,

Je reviens sur la page correcte en cas de paiement réussi.

Message
Merci d'avoir passé commande.
Vous pouvez maintenant accéder à votre commandeici.

Mais bizarrement, dans le module panier, le prix passe bien à zéro, avec la mention "gratuit", mais le contenu reste affiché même si je change de page. Il faut que je clique sur la croix de suppression du produit

Et en cas de paiement annulé par le serveur de paiement, je reviens maintenant à la page de passage en caisse et pas sur une page signalant que cette commande a été annulée (elle l'est bien dans la liste des commandes).

J'ai tenté d'utiliser un paiement PayPal Sandbox pour voir ce qui se passe en cas d'annulation, mais la Tunisie n'autorisant pas PayPal, ce mode de paiement n'apparaît pas dans la page de commande.

Last edit: 3 years 3 months ago by RG-Consultant.

Please Log in or Create an account to join the conversation.

  • Posts: 82863
  • Thank you received: 13372
  • MODERATOR
3 years 3 months ago #335057

Bonjour,

Dans l'option "clear cart after order is" de la configuration, vous pouvez sélectionner soit:
- confirmed, et dans ce cas le panier est vidé automatiquement durant la redirection sur l'URL "after_end", ou alors la commande est annulée et vous êtes rediriger sur le passage en caisse en cas d'envoi sur la "cancel URL". Dans ce second cas, je recommande d'ajouter un message à l'utilisateur pour lui expliqué le souci avant la redirection avec un $app->enqueueMessage('Il y a eu un pb');
- created, et dans ce cas le panier est vidé directement avant la redirection vers la plateforme de paiement et en cas d'annulation vous êtes redirigez sur l'URL de l'option "URL where to redirect when the cart is empty" de la configuration. Donc là aussi, je recommande de mettre un message avant la redirection.

Il n'y pas normal que vous ayez toujours votre panier. Si ça se trouve ce n'est pas le cas, mais plutôt que vous avez plusieurs paniers rattachés à votre utilisateur suite à vos nombreux tests et du coup le panier est vidé mais vous voyez le panier d'après.
Je vous recommande de refaire un test après avoir supprimé tous les paniers attachés à votre utilisateur.

The following user(s) said Thank You: RG-Consultant

Please Log in or Create an account to join the conversation.

  • Posts: 214
  • Thank you received: 11
  • Hikashop Business
3 years 3 months ago #335068

Bonjour et merci Nicolas,

Le multi-panier était en effet activé (par défaut ?), mais je n'en ai trouvé qu'un avec un montant nul. J'ai désactivé cette fonctionnalité avant de continuer mes tests.

Le paramétrage du vidage du panier est défini sur une commande "créée" depuis l'installation, je pense.

Le panier se vide au retour d'un paiement validé et de la confirmation de commande.
Lorsque le paiement a été annulé par ClicToPay, on revient sur la page de validation de commande, panier non vidé (dans les caractéristiques "$dbOrder", le statut est pourtant bien

[order_status] => created

L'alerte s'affiche bien telle que définie, avec le code de rejet renvoyé par ClicToPay :

Annonce
Le paiement n'a pas été validé pour la raison suivante : Payment is declined

J'ai défini un retour vers la page principale, mais en cas de refus bancaire, c'est la page de passage en caisse qui est rouverte.

Y aurait-il un autre paramètre en cause ? Sinon une instruction pour forcer ce vidage ?

Please Log in or Create an account to join the conversation.

  • Posts: 82863
  • Thank you received: 13372
  • MODERATOR
3 years 3 months ago #335071

Bonjour,

Le panier est vidé automatiquement à la création de la commande si l'option de vidage du panier est configurée avec "créée". Donc je ne vois pas de raison que le panier soit toujours là au retour.
La seule raison que vous voyez un tel panier, c'est que vous avez plusieurs paniers assignés à votre utilisateur.
Désactiver l'option multi panier est une bonne idée, mais comme je disais dans mon précédent message, il faut supprimer les paniers rattachés à votre utilisateur. L'option désactivée évitera de créer de nouveau paniers mais elle n'empêchera pas que vous ayez déjà plusieurs panier affecté à votre utilisateur.
Donc je pense que vous avez toujours le même souci en fait.

Please Log in or Create an account to join the conversation.

  • Posts: 214
  • Thank you received: 11
  • Hikashop Business
3 years 3 months ago #335077

Merci Nicolas,

C'est bien ce que j'ai fait : désactiver le mode multi-panier et supprimer celui qui restait
En fait c'est que j'aurais aussi voulu vider le panier en cas d'échec de paiement, dans la mesure où il n'y aura qu'une seule méthode : ClicToPay.
Mais j'ai bien compris le principe et l'ajout d'un message confirmera au client l'échec, car sur le formulaire ClicToPay, le message s'affiche trop vite.
Je vous ai envoyé le plugin par mail.
Ce serait bien que ClicToPay permette de créer un compte de tests pour vérifications, sans compte bancaire tunisien.

Please Log in or Create an account to join the conversation.

  • Posts: 82863
  • Thank you received: 13372
  • MODERATOR
3 years 3 months ago #335078

Merci, je vais regarder le plugin et je reviens vers vous !

Please Log in or Create an account to join the conversation.

Time to create page: 0.101 seconds
Powered by Kunena Forum