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 et IPN


Sujet :

E-Commerce

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    71
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 71
    Points : 26
    Points
    26
    Par défaut Paypal et IPN
    Bonjour,
    Je développe un site sur lequel on peut s'abonner pour x euros par mois afin d'accéder à un contenu.
    J'ai suivi la démarche de création du bouton par paypal voici mon form :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    <form action="https://www.paypal.com/cgi-bin/webscr" method="post">
    
    <input type="hidden" name="return" value="http://www.monsite.com/paiement_ok.php">
    <input type="hidden" name="cancel_return"  value="http://www.monsite.com/paiementAnnule.php"  />
    <input type="hidden" name="notify_url" value="http://www.monsite.com/notify.php">
    <input type="hidden" name="hosted_button_id" value="8F2DVAVQYSXEA">
    <input type="hidden" name="cmd" value="_s-xclick">
    <input type="hidden" name="item_name" value="Abonnement mensuel acces aux videos">
    <input type="hidden" name="amount"  value="19.90" />
    <input type="hidden" name="a3" value="19.90">
    <input type="hidden" name="p3" value="1">
    <input type="hidden" name="t3" value="M">
    <input type="hidden" name="src" value="1">
    <input type="hidden" name="no_note" value="1">
    <input type="hidden" name="currency_code"  value="EUR" />
    <input type="hidden" name="lc" value="FR" />
    <input name="bn" type="hidden" value="PP-BuyNowBF" />  
    <input type="hidden" name="business" value="monmail@gmail.com" />
    <input type="hidden" name="custom" value="<?php echo $_SESSION['id']; ?> "/>
    <input type="image" src="https://www.paypal.com/fr_FR/FR/i/btn/btn_subscribeCC_LG.gif" border="0" name="submit" alt="PayPal - la solution de paiement en ligne la plus simple et la plus sécurisée !">
    <img alt="" border="0" src="https://www.paypal.com/fr_FR/i/scr/pixel.gif" width="1" height="1">
    </form>
    Le traitement se fait donc sur le fichier notify.php dont voici pour le moment le code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    function VerifIXNID($txn_id)
    {
    	$req = mysql_query("select txnid from paypal_payment_info where txnid='".$txn_id."'");
    	$nbr = mysql_num_rows($req); 
    	
    	if ($nbr == 0)
    	{
    		return 0;
    	}
    	else
    	{
    		return 1;
    	}
    }
    
    // lire le formulaire provenant du système PayPal et ajouter 'cmd'
        $req = 'cmd=_notify-validate';
         
        foreach ($_POST as $key => $value) {
            $value = urlencode(stripslashes($value));
            $req .= "&$key=$value";
        }
    	
    // renvoyer au système PayPal pour validation
        $header .= "POST /cgi-bin/webscr HTTP/1.0\r\n";
        $header .= "Content-Type: application/x-www-form-urlencoded\r\n";
        $header .= "Content-Length: " . strlen($req) . "\r\n\r\n";
    	$fp = fsockopen ('www.paypal.com', 80, $errno, $errstr, 30);
    	
    	$item_name  = $_POST['item_name'];
        $item_number = $_POST['item_number'];
        $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'];
        $payer_email = $_POST['payer_email'];
        $user_id = $_POST['custom'];
    	
    	$first_name = $_POST['first_name'];
    	$last_name = $_POST['last_name'];
    	$address_street = $_POST['address_street'];
    	$address_city = $_POST['address_city'];
    	$address_state = $_POST['address_state'];
    	$address_zip = $_POST['address_zip'];
    	$address_country = $_POST['address_country'];
    	$mc_fee = $_POST['mc_fee'];
    	$memo = $_POST['memo'];
    	$payment_type = $_POST['payment_type'];
    	$payment_date = $_POST['payment_date'];
    	$pending_reason = $_POST['pending_reason']; // Raison pour laquelle le paiement a été placé en attente.
    	$reason_code = $_POST['reason_code'];
    	$tax = $_POST['tax'];
    	$fecha = date("m")."/".date("d")."/".date("Y");
    
    	
    	if (!$fp) {
        // ERREUR HTTP
        } else {
            fputs ($fp, $header . $req);
            while (!feof($fp)) {
                $res = fgets ($fp, 1024);
                if (strcmp ($res, "VERIFIED") == 0) {
                    // transaction valide
    				// vérifier que payment_status a la valeur Completed
                    if ( $payment_status == "Completed") {
                        // vérifier que txn_id n'a pas été précédemment traité: Créez une fonction qui va interroger votre base de données
    						$req = mysql_query("select txnid from paypal_payment_info where txnid='".$txn_id."'");
    						$res = mysql_num_rows($req); 
    						mysql_query("UPDATE membres SET abo='1'"); 
    						
                        if (VerifIXNID($txn_id) == 0) {
                            // vérifier que receiver_email est votre adresse email PayPal principale
                            if ( "monmail@gmail.com" == $receiver_email) {
                                // vérifier que payment_amount et payment_currency sont corrects
                                // traiter le paiement
    							$strQuery = mysql_query("INSERT INTO paypal_payment_info(paymentstatus, buyer_email, firstname, lastname, street, city,state, zipcode, country, mc_gross, mc_fee, memo, paymenttype, paymentdate, txnid, pendingreason, reasoncode, tax, datecreation, custom) 
    								VALUES ('".$payment_status."','".$payer_email."','".$first_name."','".$last_name."','".$address_street."','".$address_city."','".$address_state."','".$address_zip."','".$address_country."','".$mc_gross."','".$mc_fee."','".$memo."','".$payment_type."','".$payment_date."','".$txn_id."','".$pending_reason."','".$reason_code."','".$tax."','".$fecha."','".$custom."')");
    							
    
                             }
                  else {
                    // Mauvaise adresse email paypal
                  }
                }
                else {
                    // ID de transaction déjà utilisé
                        }
                }
              else {
                        // Statut de paiement: Echec
              }
                }
                else if (strcmp ($res, "INVALID") == 0) {
                    // Transaction invalide               
                }
            }
            fclose ($fp);
        }
    Mais je ne comprends pas, rien ne marche et ma table membres ne se met pas à jour...Je suis un peu perdu, si quelqu'un peut m'aider.

    Merci.

  2. #2
    Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2010
    Messages : 2
    Points : 2
    Points
    2
    Par défaut
    Salut, j'avais exactement le même problème, as-tu trouvé une solution.

    Cela fait un moment que je bute sur la question, en vain! Ça me rendrait vraiment service.

    merci d'avance

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Août 2007
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 19
    Points : 26
    Points
    26
    Par défaut
    Bonjour, en ce qui concerne L'IPN il faudrait que tu fasse un log, dans un fichier txt par exemple pour mieux pouvoir debugger.
    Il se peut qu'il y ait aussi une erreur php dans ton code d'IPN, ce qui empecherais la mise a jour de ta table


    Par contre, si tu veut faire des paiements recurrents via paypal, il faut que tu utilise Express Checkout (ca prend un compte pro)
    Plus d'infos ici (en anglais)

  4. #4
    Candidat au Club
    Inscrit en
    Août 2009
    Messages
    2
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Août 2009
    Messages : 2
    Points : 2
    Points
    2
    Par défaut
    Bonjour,

    Je rencontre un problème de réception de l'IPN. J'ai déjà vérifier mon script IPN et j'ai contrôler la valeur de "notify_url" il pointe bien sur ma page de traitement IPN. Dans les paramètres de mon compte vendeur, j'ai aussi contrôler l'URL pour les notification c'est le même que pour "notify_url".

    Quand j'appelle ma page IPN "manuellement" le code s'exécute correctement. Je fais mes tests avec sandbox. Quand je simule un paiement, j'arrive bien sur la page de PayPal mais quand je clique sur payer, ma page IPN n'est pas appelée. Elle est appelée uniquement quand je clique sur le bouton "Retour vers mon site". Les URL des paramètres "cancel_return" et "return" pointent bien vers leur page respective et non vers ma page IPN.

    Est-ce que vous avez déjà rencontré un problème similaire ? Toute informations sera la bienvenue, d'avance merci !

  5. #5
    Candidat au Club
    Inscrit en
    Août 2009
    Messages
    2
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Août 2009
    Messages : 2
    Points : 2
    Points
    2
    Par défaut
    Problème résolu, j'utilisais un fichier texte pour contrôler la valeur de retour ipn et depuis que j'ai mis en place une DB pour stocker ces valeur, ça fonctionne nickel. Merci et dsl pour ceux qui aurait perdu du temps par rapport à ma question.

Discussions similaires

  1. [PayPal] Page IPN non appelée
    Par Bioteck dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 7
    Dernier message: 11/03/2014, 00h06
  2. [PayPal] IPN HS : échanges avec la HotLine
    Par Toulousaing dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 13
    Dernier message: 27/11/2012, 21h23
  3. [PHP 5.3] Script Paypal pour IPN
    Par cantador dans le forum Langage
    Réponses: 3
    Dernier message: 16/04/2012, 09h51
  4. Panier Paypal personnalisé + IPN
    Par maxland dans le forum E-Commerce
    Réponses: 0
    Dernier message: 26/02/2010, 16h07
  5. Paypal : comment fonctionne l'IPN ?
    Par TheDoci dans le forum E-Commerce
    Réponses: 0
    Dernier message: 21/08/2008, 10h43

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