IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

E-Commerce Discussion :

Paypal comment bien traiter l'IPN


Sujet :

E-Commerce

  1. #1
    Membre régulier
    Homme Profil pro
    Inscrit en
    Novembre 2007
    Messages
    274
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2007
    Messages : 274
    Points : 114
    Points
    114
    Par défaut Paypal comment bien traiter l'IPN
    Bonjour à tous,

    Voilà j'ai installer sur un site marchand le paiement via paypal, bon avec un peu de chipotage j'ai enfin pu l'intégré correctement et le paiement via paypal est fonctionnel sur la sandbox

    Maintenant je me focalise sur l'IPN plus précisément comment bien sécurisé et vérifier la validté du paiement

    ce que je pense :

    1 - Vérifier la provenance (l'utilisateur doit arriver de paypal et de null par d'autre)

    2 - Vérifier le montant de la transaction paypal par rapport au montant de la commande réel

    3 - Vérifier que l'email_receiver est bien mon e-mail paypal principal

    4 - Vérifier que la référence paiement correspond bien à la référence commande (item_name)

    Ma question est donc est-ce que celà suffit ?
    ensuite si maintenant les différente vérification sont fausse comment renvoyé à paypal une annulation de paiement et rediriger l'utilisateur sur une page lui indiquant l'erreur et celà est-il possible depuis la page de l'IPN appelée par paypal ?

    Pour être plus clair, comment mettre en place une bonne vérification sécurisé IPN ?

    d'avance merci de vos contribution
    Cordialement
    Spliffer

  2. #2
    Membre habitué
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    310
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 310
    Points : 132
    Points
    132
    Par défaut
    Salut,

    Premièrement, ton script IPN doit etre 'caché', du moins à une adresse difficile a deviner. Ainsi personne extérieur à paypal ne peut accéder à ce fichier.
    Ensuite, coté IPN, j'utilise ces variables :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    $payment_status = $_POST['payment_status'];
    $payment_amount = $_POST['mc_gross'];
    $payment_currency = $_POST['mc_currency'];
    $txn_id = $_POST['txn_id'];
    $receiver_email = $_POST['receiver_email'];
    $custom = $_POST['custom'];
    $host = gethostbyaddr($_SERVER['REMOTE_ADDR']);
    Ce script peut bien sur etre plus exhaustif mais il ne faut pas tomber dans la parano non plus !

    Un point important est le $host (ou l'ip si tu préfère) en effet paypal accède à ton fichier par le host 'notify.paypal.com'. Donc déjà tu peux tester cette variable et éxécuter le reste du script si et seulement si l'IP/Host est Paypal.

    $payment_status : completed ou echeck signifie que l'argent est bien sur ton compte, tu peux donc considérer le transfert comme OK. Il peut aussi etre 'pending' là il ne faut rien envoyer, c'est souvent le cas lorsque l'acheteur rapatrie des fonds depuis un compte en banque 'physique' vers paypal, cela prend plusieurs jours. Au bout de qq jours donc l'IPN sera re-accéder automatiquement par paypal afin de mettre le statut en 'completed'.

    $payment_amount : le prix de ton objet

    $payment_currency : 'EUR' pour euros, attention certains malins pouraient payer la bonne somme mais dans une devise ridicule

    $txn_id : le numero de transaction UNIQUE. Je fais donc une vérification dans ma bdd pour voir si cette transaction n'existe pas déjà..

    $receiver_email : ton email principal dans paypal, celle où tu reçois l'avis de paiement

    $_POST['custom'] : si besoin un champ personel que tu rajoute dans le html ; de mon coté c'est une clé unique qui me prouve que l'objet existe bien etc.

    Voilà, c'est pas grand chose, certains diront qu'ils faut 200 variables pour etre totalement sur, mais honnêtement :
    - si ton fichier php se trouve dans un truc genre : www.monsite/ds43Ffs87dfs/QS1_sml-vbn/notify.php ( => indevinable donc inaccessible pour le commun des mortels)
    - tu vérifie que celui qui accède au fichier est bien paypal.com (ip/host)
    - le paiement est bien completed / bon prix / bonne devise


    si maintenant les différente vérification sont fausse comment renvoyé à paypal une annulation de paiement et rediriger l'utilisateur sur une page lui indiquant l'erreur et celà est-il possible depuis la page de l'IPN appelée par paypal ?
    C'est à toi de traiter ces cas là dans ton php. Il n'est pas possible de dire à paypal les erreurs, car paypal ne fait qu'une requete vers ton fichier en lui passant les paramètres du paiement, ensuite lui il s'en fout de savoir que le prix ne correspond pas au prix indiqué dans ta base de données, ou bien que tu as fait une erreur dans ta requete sql qui empeche la MAJ en bdd... tu vois ce que je veux dire ? Il n'existe pas de dialogue avec paypal, il ne peut rien recevoir de ta part, car pour cela il faudrait qu'il ai lui aussi un script de réception.. bref.
    N'oublie pas que IP*N* = "notification" il te notifie d'un paiement, c'est tout.
    De plus je pense que Paypal envoie les données à ton fichier en meme temps qu'il affiche "merci pour votre paiement...".

    Par contre, paypal redirigera l'acheteur sur l'url de ton choix, ainsi tu pourra donner les raisons de l'erreur sur cette page.


    En espérant avoir été clair.. Bon courage

  3. #3
    Membre régulier Avatar de la_chouette
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    183
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 183
    Points : 121
    Points
    121
    Par défaut
    Vérifier le type de paiement virement/immédiat et si il est terminer ou en attente... (Seulement dans le cas de produit numérique)
    La vitesse de la lumière étant supérieure à celle du son, beaucoup de gens sont brillants jusqu'à ce qu'ils ouvrent leur bouche.

Discussions similaires

  1. Comment bien déboguer son code ?
    Par D[r]eadLock dans le forum Débuter
    Réponses: 47
    Dernier message: 02/04/2024, 16h06
  2. [PostgreSQL] [Transaction] Comment bien le traiter ?
    Par gui80 dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 02/02/2010, 16h18
  3. Paypal : comment fonctionne l'IPN ?
    Par TheDoci dans le forum E-Commerce
    Réponses: 0
    Dernier message: 21/08/2008, 10h43
  4. Comment bien utiliser ce forum ?
    Par Alcatîz dans le forum Pascal
    Réponses: 0
    Dernier message: 21/04/2004, 16h37
  5. Comment bien gerer la mémoire avec les TStringList?
    Par david_chardonnet dans le forum Langage
    Réponses: 5
    Dernier message: 18/06/2003, 09h57

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo