Flot de paiement pour intégration plate-forme

  • Posts: 7
  • Thank you received: 0
11 years 11 months ago #52074

Bonjour
j'ai lu la doc développment plug-in pour Hikashop (Saferpay), et j'ai regardé le plug-in Paypal comme conseillé.
1) Invocation du gateway de paiement
Il est dit dans cette doc de développement:
onAfterOrderConfirm(&$order,&$methods,$method_id): c'est là qu'il faut intégrer la redirection vers le gateway.
Lorsque je regarde le plug-in Paypal, je vois en effet qu'un tableau $vars est construit , mais je ne vois nulle part l'invocation de la page de paiement Paypal. Est-ce que c'est fait par le checkout et est-ce que cela utilise l'URL donnée dans la configuration Paypal?
2) Pour Saferpay, il n'y a pas d'URL fixe pour le paiement, on doit la demander à Saferpay qui renvoie un lien à invoquer lorsqu'on active le paiement. Dans le cas de Paypal, le bouton "Suivant" en bas de la page lance la page Paypal, je suppose que c'est le checkout qui s'en charge, mais encore une fois je n'arrive pas à voir où et quand l'appel URL gateway de paiement se fait.
Merci de votre aide

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

  • Posts: 81598
  • Thank you received: 13082
  • MODERATOR
11 years 11 months ago #52076

Bonjour,

1. $vars est utilisé dans le fichier paypal_end qui est appelé vers la fin de la fonction onAfterOrderConfirm dans le plugin de paypal. On utilise différent fichiers histoire de "ranger" les choses et pas que ca soit le bazzar.

2. C'est dans le fichier paypal_end :) Il y a cette ligne:
<form id="hikashop_paypal_form" name="hikashop_paypal_form" action="<?php echo $method->payment_params->url;?>" method="post">

qui utilise donc $method->payment_params->url. Il suffit de setter cette variable avec votre URL dans onAfterOrderConfirm et de garder un fichier _end similaire à celui de paypal.

The following user(s) said Thank You: BruceThePriest

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

  • Posts: 12953
  • Thank you received: 1778
11 years 11 months ago #52080

Bonjour,

1. Cela utilise l'URL donnée dans la configuration Paypal :

$method->payment_params->url

la redirection se fait dans le fichier paypal_end.php et se fichier est utilisé grâce aux lignes :
JHTML::_('behavior.mootools');
		$app =& JFactory::getApplication();
		$name = $method->payment_type.'_end.php';
			$path = JPATH_THEMES.DS.$app->getTemplate().DS.'hikashoppayment'.DS.$name;
			if(!file_exists($path)){
				if(version_compare(JVERSION,'1.6','<')){
					$path = JPATH_PLUGINS .DS.'hikashoppayment'.DS.$name;
				}else{
					$path = JPATH_PLUGINS .DS.'hikashoppayment'.DS.$method->payment_type.DS.$name;
				}
				if(!file_exists($path)){
					return true;
				}
			}
			require($path);

2. Les méthodes de communication varient beaucoup d'une méthode à l'autre, pour cela il faut donc vous référer à la documentation saferpay

En espérant que cela vous aidera à y voir plus claire.

The following user(s) said Thank You: BruceThePriest

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

  • Posts: 7
  • Thank you received: 0
11 years 11 months ago #52084

ok merci j'ai vu l'appel à _end, la construction du "formulaire virtuel" avec le tableau $vars et l'envoi de l'html avec le form.submit dans le code.
Je regarde et si jamais je reviens vers vous, en tout cas merci pour l'instant.

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

  • Posts: 7
  • Thank you received: 0
11 years 10 months ago #52620

Bonjour
Pour saferpay, j'ai pris comme exemple paypal, j'ai juste modifié le code:
- chargement plug-in dans hikashop --> OK
- configuration paramètres via Joomla Hikashop --> OK

Quand je termine ma commande, j'obtiens l'URL:
monsite/index.php/component/hikashop/checkout/step/step-2?Itemid=101

Et une page blanche s'affiche avec rien du tout...J'ai positionné un simple echo au début de la fonction onAfterOrderConfirm mais il semble que le code n'arrive pas jusque là, J'ai regardé le composant chechout et je ne vois pas comment savoir quel step et quel appel est exécuté.
Comment est-ce que je peux savoir ce qu'il sa passe.
A noter que pour paypal la redirection de sait correctement...
Merci

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

  • Posts: 81598
  • Thank you received: 13082
  • MODERATOR
11 years 10 months ago #52622

C'est pourtant la bonne méthode.
Avez vous sélectionné la méthode de paiement durant le passage en caisse ?
Il est possible que ca vienne du fait que le plugin ne soit pas config correctement.
Pourriez vous faire une capture des options de la méthode de paiement ?

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

  • Posts: 7
  • Thank you received: 0
11 years 10 months ago #52623

Voilà la capture des options que j'ai adaptées
config.bmp

Last edit: 11 years 10 months ago by BruceThePriest.

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

  • Posts: 81598
  • Thank you received: 13082
  • MODERATOR
11 years 10 months ago #52625

La capture n'est pas passée.

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

  • Posts: 7
  • Thank you received: 0
11 years 10 months ago #52643

Oui pardon pour la capture, entre-temps j'ai avancé un peu.
En fait j'avais une erreur dans le code quand j'utilisais le hash currency...
Donc:
- la fonction onAfterOrderConfirm est bien appelée
- le code "_end.php" est bien exécuté donc la page s'affiche et là on est supposé être redirigé vers la plate-forme de paiement.

1) SPINNER: il n'y a pas de spinner, pourtant j'ai repris un spinner paypal, là j'ai pas d'idée pour le faire marcher
2) REDIRECTION AUTOMATIQUE : L'adresse du lien vers la plate-forme de paiement est bien construite, mais lorsque j'appuie sur le bouton submit de la form (j'ai désactivé le submit automatique), le site de paiement me renvoie une adresse de connexion dans une page html, alors que j'aurais attendu qu'il y ait une redirection automatique. Note: si je copie ce qui est renvoyé par la plate-forme de paiement dans une URL, ça marche, je vais bien faire le paiement).

Donc j'ai bien avancé, je bloque juste sur la redirection.
Merci

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

  • Posts: 81598
  • Thank you received: 13082
  • MODERATOR
11 years 10 months ago #52703

Votre plateforme de paiement fonctionne différement de PayPal apparement.
C'est à votre plugin d'envoyer une requête HTTP avec cURL à la plateforme de paiement qui renverra à votre plugin l'URL de redirection que vous pourrez mettre dans votre _end.php pour la redirection vers la plateforme de paiement.

Cela permet de garantir que les informations reçus par la plateforme correspondent à la commande. Sinon, il suffit à l'utilisateur de modifier le HTML du form pour changer le prix de la commande envoyé à la plateforme.
Dans PayPal c'est possible de faire cela et du coup il faut vérifier le prix payer par l'utilisateur à la réception de la notification de paiement.

Si vous faites un $app->redirect pour le formulaire de fin de passage en caisse, il n'y aura même plus de page intermédiaire à la fin du passage en caisse, donc plus de problème de spinner et une étape en moins pour l'utilisateur.

The following user(s) said Thank You: BruceThePriest

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

  • Posts: 7
  • Thank you received: 0
11 years 10 months ago #52810

La suite:
ok j'ai modifié le code avec un $app.redirect vers l'URL renvoyé par la PP => Pas de problème ça marche.
Maintenant je crois que j'ai un problème de logique d'exécution.
La Saferpay distingue 4 URL de retour: "SUCCESSLINK" (paiement ok), "FAILLINK" (paiement non accepté), "BACKLINK" (paiement abandonné), "NOTIFYURL" (URL appelée en background hors de la session).

Et le problème est le suivant: lorsque Saferpay renvoie vers SUCCESSLINK, il attend un rappel immédiat vers une URL de confirmation du paiement avec certaines valeurs passées dans les paramètres du GET.
Ces paramètres ne sont pas disponibles dans le POST du NOTIFY URL...
Or Hikashop n'appelle aucune fonction du plug-in lorsque on a un retour SUCCESS, il exécute juste after_end dans le contrôleur checkout i.e. il n'y a pas de fonction du genre onPaymentSuccess.

Je pourrais éventuellement tricher de la manière suivante:
mettre la même URL dans SUCCESSLINK et NOTIFYURL
if à l'entrée de la fonction onPaymentNotification la requête contient "verify" {
exécuter la confirmation vers Saferpay
if verif ok {
faire un $app.redirect "interne" vers SUCCESSLINK càd vers URL "...ctrl=checkout&task=after_end..."
}else{
faire un $app.redirect "interne" vers SUCCESSLINK càd vers URL "...ctrl=checkout&task=after_end..."
}
}else{
// c'est un notify
exécuter le retour vers la notification Saferpay
exécuter le code "normal" pour le statut de la commande (comme pour les autres plug-ins càd mail+dbupdate
}
Vous en pensez quoi?
Merci

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

  • Posts: 81598
  • Thank you received: 13082
  • MODERATOR
11 years 10 months ago #52816

C'est la méthode que nous utilisons d'habitude dans ces cas là.
Vous pouvez par exemple retrouver cela dans le plugin de paiement cardsave.

The following user(s) said Thank You: BruceThePriest

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

  • Posts: 7
  • Thank you received: 0
11 years 10 months ago #52969

ok
bon j'ai mis de côté la notification pour l'instant...
Donc quand je reviens de Saferpay je reviens sur la fonction onPaymentNotification.
J'appelle la vérification de paiement Saferpay => ok
Maintenant j'ai 2 problèmes:
1) je retrouve bien la commande dans la base de données avec:
$orderClass = hikashop_get('class.order');
$dbOrder = $orderClass->get($orderid);
if(empty($dbOrder)){
$this->putInLog(">Could not load any order for your notification ");
return false;
}
...plus tard dans le code j'ai
$order->order_status = $element->payment_params->verified_status;
$order->history->history_notified=1;
$order->mail_status=$statuses[$order->order_status];
$orderClass->save($order);
Et là la commande ne change pas de statut dans la base...

2) J'utilise donc dans le code une redirection $app->redirect vers la
$success_url = HIKASHOP_LIVE.'index.php?option=com_hikashop&ctrl=checkout&task=after_end&order_id='.$order->order_id;
pour afficher à nouveau la boutique.
Et là le panier n'est pas vidé...je ne sais quelle fonction il faut utiliser pour le vider. J0ai vud dans CardSave des fonctions du genre ob_start(); mais elle ne sont pas appelées lorsqu'on fait une redirection.

Merci

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

  • Posts: 81598
  • Thank you received: 13082
  • MODERATOR
11 years 10 months ago #52976

1.
Attention aux noms des variables.
$order != $dbOrder
Vérifiez bien que vous mettez l'id de l'order dans $order avant de faire le save, sinon le système ne pourra mettre à jour l'order sans l'id de l'order...

2. Si vous regardez le fichier components/com_hikashop/controllers/checkout.php dans la fonction after_end, il y a le code:
$class = hikashop_get('class.cart');
$class->cleanCartFromSession();
Donc le système prend en charge automatiquement le vidage du panier.
Je ne vois pas pourquoi ca ne serait pas le cas pour vous. Il faudrait débug un peu pour voir pourquoi cleanCartFromSession n'arrive pas à vider le cart.

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

Time to create page: 0.088 seconds
Powered by Kunena Forum