Jump to content
Johann974

Intégration module de paiement externe sous prestashop

Recommended Posts

Bonjour à tous :) ,

 

Je suis entrain d’essayer d'intégrer un module de paiement externe sous prestashop.

 

Pour cela, j'ai besoin de récupérer des variables précise, mais je ne sais pas dans quel fichier et par quel méthod.

 

Voici la liste des variables dont j'ai besoin :

 

Le code de la devise utiliser (exemple 840 pour le dollard);

Le montant final de la commande ( juste avant de choisir le mode de paiement);

Le numéro de commande;

La langue du client (exemple "en" pour l'anglais)

Et le nom et prénom du client;

 

J'avoue que je me perd énormément dans tous les fichier php de prestashop :( .

 

Je vous remercie par avance de votre aide à tous,

 

 

Share this post


Link to post
Share on other sites

Bonjour,

Prenez exemple sur des modules de paiement déjà existants.
Grâce aux accroches spécifiques 'payment', vous pourrez bénéficier dans vos traitements des variables courantes qui y sont rattachées.
méthodes module : hookPayment / hookPaymentReturn

N'oubliez pas de créer un feedback indépendant pour assurer les retours réels de votre API de paiement, car le hookPaymentReturn ne suffit pas vraiment à créer un transaction aboutie.

 

A+

 

  • Like 1

Share this post


Link to post
Share on other sites

Merci de ta réponse en tout cas, ça m'aide beaucoup pour m'orienter dans un premier temps.

 

Le module que la banque m' a fourni est sous forme de fichier php simple sur lesquelles je dois dans un premier temps comprendre le fonctionnement et tester leur interconnexion.

 

Par contre dois je obligatoirement transformer leur module en module prestashop pour qu'ils fonctionne?

 

D'avance merci,

Share this post


Link to post
Share on other sites

Par contre dois je obligatoirement transformer leur module en module prestashop pour qu'ils fonctionne?

 

Oui et non,

 

oui : vous respectez les standards et les conventions préconisés par l'API PrestaShop dans son environnement modulaire (rappel du modèle MVC : Module View Controller)

 

non : en php / sql, tout est envisagable, et si vous préférez rendre votre script indépendant, vous pouvez.

 

Maintenant, c'est un énorme conseil, créez ce module, car vous aller bénéficier de toutes les méthodes, fonctionnalités d'intégrations de votre code, directement au coeur du fonctionnement de PrestaShop. Le MVC vous propose l'usage des hooks, afin d'injecter vos propres directives php aux emplacements stratégiques liés à votre traitement (cf ma réponse précédente).

 

Enfin, vous pourrez utiliser l'ensemble du context et des classes php disponible par l'API, pour sécuriser, et vous aider à développer plus rapidement.

 

A+

  • Like 1

Share this post


Link to post
Share on other sites

Ok  je vais tester tout çà et me lancer dans la création du module Prestashop.

Je pense certainement avoir d'autres questions au fur et à mesure de mon avancement.

Merci en tout cas de m'avoir aiguillé sur les marches à suivre.

 

A++

Share this post


Link to post
Share on other sites

Bonjour DevNet,

 

J'ai ecouté ton conseil et je me suis inspiré de Payzen pour developper mon module de paiement.

Je suis arrivé à envoyer les informations dans la page https de la banque et celà à bien enregistré le paiement.

Sauf que... je n'arive pas à mettre à jour la commande du client dans le BO de prestashop.

Après validation du paiement rien n'est précisé dans mon BO que le client à validé une commande.

 

Je souhaiterais avoir un peu d’aide concernant un script php permettant de faire cette mise à jour car je n'arrive pas à trouver ce script dans les fichiers de payzen pour m'en inspirer.

 

Dans mon cas, pour que mon paiement soit validé je dois avoir ma variable $vadorder== « 00 ». La mise à jour de cette variable s’effectue grâce à la méthode POST. 

 

Ce qui me donne :

 

< ?php

$vadorder=$_POST[« vads_order »] ;

If($vadorder== « 00 »)

{

Script de mis à jour de la commande client dans le BO de prestashop ;

}

 

?>

 

Si besoin, je peux envoyer d'autres variable comme l'orderId etc....

 

N’hésitez pas à me demander plus d’infos si je n’ai pas été très clair.

 

D’avance merci pour votre aide :) et surtout Joyeuses Fêtes,

Share this post


Link to post
Share on other sites

Salut,

 

Comme dans la plupart des systèmes de paiement, vous avez créé un formulaire (auto ou pas) vers la plateforme sécurisée de paiement de votre banque. Ce formulaire doit mettre en POST l'ensemble des informations utiles au traitement du paiement (sécurisé, je l'espère pour vous).

 

Parmi ces informations, et comme pour l'ensemble des systèmes de paiement en ligne, vous pouvez fournir à l'API sur laquelle vous communiquez votre POST de paiement un champ de type feedback url. Il correspond non pas à l'url de redirection après un paiement réussi (bon pour la navigation du client), mais plutôt la vraie url qui sera traitée en 'sous-marin' par leur serveur de l'API de transactions après le traitement du paiement. Il vous envoi le retour réel de l'état de ce paiement (succès, erreur, non paiement, etc.).

 

Cette url est donc très très importante. Elle doit effectivement déboucher sur le traitement de l'état de la commande en cours dans votre API PrestaShop.

Il convient donc au préalable que les variables envoyées par l'API de transaction en retour de ce POST feedback, correspondent bien à des informations que vous pouvez traiter : au minimum l'id du panier à modifier et l'id du client, pour passer en commande et la modifier avec le statut selon le retour (payée, erreur de paiement, etc.).

 

Par exemple, votre page de feedback peut être un controller page appelé feedback.php accessible depuis votre module. Il sera ainsi accessible en front par l'API de transaction à la fin de chaque paiement de la manière suivante : (assurez-vous de toute la sécurité nécessaire pour que votre script soit au minimum accessible par token privé, et non pas public)

http://www.domain.tld/index.php?fc=module&module=monmodulepaiement&controller=feedback&tokenSecu=70d0b395f08990f20c789eac1b14352b

avec comme paramètre des éléments envoyés leur du formulaire POST du hook de paiement de PrestaShop et aussi normalement retournés par l'API de transaction :

 

idCart = 124

idClient = 456

Nom = DUPONT

Prénom = JEAN

Total : 24.99

 

Key Sécu Perso = azerty (à ne pas envoyer dans le formulaire bien sur)

 

il faut envoyer le token suivant : un petit md5($idCart.$IdClient.$Nom.$Prenom.$Amount.$KeySecuPerso) qui donne 70d0b395f08990f20c789eac1b14352b

 

Bon tout ceci sont des exemples basiques et je ne peux pas non plus trop en dire sur les méthodes plus sécurisées sur les transactions de paiement, sinon on a plus qu'à mettre la clé sous la porte, et c'est notre savoir faire aussi :)

 

Pour vous aider sur la création d'un controller page : http://www.prestarocket.com/blog/creer-module-mvc-prestashop-1-5/

 

Une fois votre controller page feedback en place, vous devez bien sur ne pas oublier de filtrer et de tester son accès en fonction du token de sécurité. Quand cette étape est validée, alors passez votre idCart en Commande réelle, et assignée lui son statut en fonction des paramètres de retour de ce feedback envoyés par l'API de transcation (requête POST ou GET selon votre configuration perso dans votre compte vendeur dans l'API de transaction).

 

Sur le module "cheque", qui d'ailleur traite du controller page (attention pas de feedback pour lui, mais simple redirection après paiement), on peut voir :

$this->module->validateOrder((int)$cart->id, Configuration::get('PS_OS_CHEQUE'), $total, $this->module->displayName, NULL, $mailVars, (int)$currency->id, false, $customer->secure_key);

Ca peut vous aider ;)

 

Je suis désolé, mais je vais vraiment à l'essentiel, les rouages de votre code doivent bien sur prendre en compte beaucoup d'éléments supplémentaires.

 

Si ça peut quand même vous aiguiller, c'est déjà ça !

 

A+

Edited by DevNet (see edit history)
  • Like 1

Share this post


Link to post
Share on other sites

Merci d'avoir pris le temps de me répondre avec autant de précision.

 

En effet j'ai pu remarqué que les modules de paiement sécurisé fonctionne de cette manière, mais avoir la confirmation d'un pro dans le domaine me permet d'enlever les doutes, ce qui me permet d'avancer sereinement.

 

Je vais tester tout ça et je reviens vers toi dès que c'est ok pour moi.

 

Merci encore en tout cas :)

Share this post


Link to post
Share on other sites

Bonjour,

 

Je souhaite faire un test avec un script simple:

 

J'ai un fichier qui s'appel paymentmerch3.php, indépendant du module de paiment prestashop.

 

Après vérification de mon cartId  dans la base de donnée => 16 et du montant de la commande => 162 , j’exécute le code ci dessous et pourtant rien ne fonctionne.

 

Ai je oublié de déclarer quelque chose?

 

<?php

 require_once dirname(dirname(dirname(__FILE__))) . '/config/config.inc.php';
 require_once dirname(dirname(dirname(__FILE__))) . '/init.php';

 

$id_cart=16;

$id_state=2;

$amount=162;

$type="carte bleue";

$message="test";

 

PaymentModule::validateOrder($id_cart,$id_state,$amount,$type,$message);

 

?>

 

J'ai également un module qui permet de valider les panier après paiement  et qui fonctionne avec ces même paramètres.

Peut être le fait que le script soit exécuté dans le module même, ce qui n'est pas mon cas pour mon problème ci dessus.

 

D'avance merci

Share this post


Link to post
Share on other sites

Salut,

 

Moi personnellement je ne ferais pas une page standalone comme ça. Je passerai pas un controller de module front afin de bénéficier de toute l'API PrestaShop et d'enlever tout ce qui est inutile dans la classe ModuleFrontController.

 

Voici un exemple dans le cas où votre controller s'appelle feedback sur ./modules/monmodulepaiement/controllers/front/feedback.php et accessible en front par :

http://www.domain.tld/index.php?fc=module&module=monmodulepaiement&controller=feedback
<?php

class FeedbackModuleFrontController extends ModuleFrontController
{
	public $display_header = false;
	// public $display_column_left = true;
	// public $display_column_right = true;
	public $display_footer = false;

	public function init() { // lancer les init nécessaires en premier
		parent::init();
		
		// gérer ici vos traitements POST / GET <= Tools::getValue() 
	}
	
	public function display() { // pour faire vos rendus test ou non sur page
		// optionnel si redirection dans le init après traitement des POST / GET
	}
}

?>

A+

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...

Important Information

Cookies ensure the smooth running of our services. Using these, you accept the use of cookies. Learn More