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

EDI, CMS, Outils, Scripts et API PHP Discussion :

[PayPal] Transfert de données de paiement et notification de paiement


Sujet :

EDI, CMS, Outils, Scripts et API PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    100
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 100
    Par défaut [PayPal] Transfert de données de paiement et notification de paiement
    Bonjour à tous,

    Je suis à la recherche de quelqu'un qui sait comment mettre en place ces 2 fonctionnalités de paypal, indispensables pour gerer sa base de données.

    http://www.paypal.fr/ipn

    http://www.paypal.fr/pdt


    Ils proposent des scripts en PHP sur paypal (super) mais.. ca marchre pô! Pourant ca a pas l'air difficile, ou alors c'est moi qui suis un gros boulet (!), mais je ne pense pas.

    Quelqu'un a-t-il deja mis en place ca pour son site??

    Merci

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    100
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 100
    Par défaut
    Salut,

    Bon ben finalement je m'en suis sorti, du coup je viens vous faire partager mon code, ca pourra toujours servir à d'autres..

    Je travaille avec un panier paypal.

    Alors il y a 3 étapes à respecter.

    • Création des boutons
    • Transfert des données de paiment
    • Notification instantannée de paiement


    La création des boutons est assez simple et bien faite sur paypal. Il suffit de suivre les instructions. On se retrouve avev un truc comme ca :

    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
     
    <form target="paypal" action="https://www.paypal.com/cgi-bin/webscr" method="post">
    <input type="image" src="https://www.paypal.com//fr_FR/i/btn/x-click-but22.gif" border="0" name="submit" alt="Effectuez vos paiements via PayPal : une solution rapide, gratuite et sécurisée">
    <img alt="" border="0" src="https://www.paypal.com/fr_FR/i/scr/pixel.gif" width="1" height="1">
    <input type="hidden" name="add" value="1">
    <input type="hidden" name="cmd" value="_cart">
    <input type="hidden" name="business" value="xxxx@gmail.fr">
    <input type="hidden" name="item_name" value="mon objet">
    <input type="hidden" name="item_number" value="6">
    <input type="hidden" name="custom" value="<?echo$_SESSION['ID']?>">
    <input type="hidden" name="amount" value="15.00">
    <input type="hidden" name="no_shipping" value="0">
    <input type="hidden" name="return" value="http://www.monsite.fr/mapage.php">
    <input type="hidden" name="cancel_return" value="http://www.monsite.fr/mapage.php">
    <input type="hidden" name="no_note" value="1">
    <input type="hidden" name="currency_code" value="EUR">
    <input type="hidden" name="lc" value="FR">
    <input type="hidden" name="bn" value="PP-ShopCartBF">
    </form>
    Voila, notez qu'il y a un champ appelé "custom" qui permet de passer une variable personnelle. Bien pratique..

    voila, donc une fois que c'est fait, le client se retrouve sur payl et regle ses achats.

    C'est la qu'interviennent NIP et TDP.

    Alors, dans l'ordre:

    Notification instantanné de paiment: Tout d'abord, il faut activer l'option dans les preferences du compte et spécifier une adresse de retour. Dans mon cas j'ai créé une page que j'ai nommé NIP.php qui ne sert qu'à ca.
    Lorsque le client clique sur "payer" sur paypal, paypal envoie a l'adresse spécifiée tous les détails de la transaction. Cette opération se fait en arriere plan, de "facon caché" et n'apparait jamais à l'écran. La liste de toutes les variables que l'on peut récupérer est la.

    http://www.solutionspaypal.fr/Ressou...reference.html


    C'est via cette page nip.php que l'on met à jour sa base de données. Voici mon script de NIP.php

    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
    <?php
    session_start();
     
     
    //Notification instantané de paiment NIP
    // lire la publication 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);
     
    // affecter les variables publiées aux variables locales
    $item_number = $_POST['item_number'];
    $txn_id = $_POST['txn_id'];
    $num_cart_items = $_POST['num_cart_items'];
    $custom = $_POST['custom'];
     
    if (!$fp) {
    // ERREUR HTTP
    mail_erreur_http($txn_id,$mail);
     
    } else {
     
    fputs ($fp, $header . $req);
    while (!feof($fp)) {
    $res = fgets ($fp, 1024);
     
     
     
    if (strcmp ($res, "VERIFIED") == 0) {
    $txn_id = $_POST['txn_id'];
    $num_cart_items = $_POST['num_cart_items'];
    $custom = $_POST['custom'];
     
     
     
    for ($k=1; $k<=$num_cart_items;$k++){
    $item_number = $_POST['item_number'.$k.''];
    if(($item_number==1)||($item_number==2)||($item_number==6)||($item_number==12)){
    //traitement de la tache
     
    }}
    }
     
     
    else if (strcmp ($res, "INVALID") == 0) {
     
    mail_erreur_invalid($txn_id,$mail);
    }
    }
    fclose ($fp);
    }
     
     
    ?>
    Quand il y a plusieurs objets dans un panier, le premier objet se nomme : item_name_1 et item_number_1 ( item_name_x et item_number_x)

    Sur IPn vous recevez alors :

    [item_name1] => mon objet

    [item_number1] => 1


    Transfert de données de paiement: Une fois que l'utilisateur a pyé, il est redirigé vers votre site. La aussi, paypal renvoie les données de la transaction en variables POST. Cela permet de faire un récapitulatif sur votre site de la transaction. Par contre, il ne faut pas se servir de cette fonction pour mettre à jour votre base de données. Si le client ne rebvient pas sur votre site, la mise à jour ne se fera pas!

    voici le script à mettre sur la page spécifié dans les variables "return" et "cancel_return":


    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
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
     
    <?php
     
    if(isset($_GET['tx'])){
     
    // read the post from PayPal system and add 'cmd'
    $req = 'cmd=_notify-synch';
     
    $tx_token = $_GET['tx'];
    //$auth_token : Entrez votre "jeton" d'identification qui vous est scpécifié sur votre compte paypal
    $auth_token = "kuyvchghfgjhfxklgjhxkldfhgxkldfgdfg";
    $req .= "&tx=$tx_token&at=$auth_token";
     
    // post back to PayPal system to validate
    $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_currency = $_POST['mc_currency'];
    $txn_id = $_POST['txn_id'];
    $receiver_email = $_POST['receiver_email'];
    $payer_email = $_POST['payer_email'];
    $custom = $_POST['custom'];
    $num_cart_items = $_POST['num_cart_items'];
    $amount = $_POST['mc_gross'];
     
     
    if (!$fp) {
    // HTTP ERROR
     
    //VERIFICATION
    echo"error HTTP!";
     
    } else {
    fputs ($fp, $header . $req);
    // read the body data 
    $res = '';
    $headerdone = false;
    while (!feof($fp)) {
    $line = fgets ($fp, 1024);
    if (strcmp($line, "\r\n") == 0) {
    // read the header
    $headerdone = true;
    //echo$headerdone;
    }
    else if ($headerdone)
    {
     
    // header has been read. now read the contents
    $res .= $line;
    }
    }
     
    // parse the data
    $lines = explode("\n", $res);
    $keyarray = array();
    if (strcmp ($lines[0], "SUCCESS") == 0) {
     
    for ($i=1; $i<count($lines);$i++){
    list($key,$val) = explode("=", $lines[$i]);
    $keyarray[urldecode($key)] = urldecode($val);
    }
     
    //print_r($keyarray);
     
     
    $num_cart_items = $keyarray['num_cart_items'];
    $firstname = $keyarray['first_name'];
    $lastname = $keyarray['last_name'];
    $txn_id = $keyarray['txn_id'];
    $amount = $keyarray['mc_gross'];
    $payment_date = $keyarray['payment_date'];
    $payment_currency = $keyarray['mc_currency'];
     
    echo ("<p><h3>Merci pour votre achat!</h3></p>");
    echo ("<b>Détails du paiment</b><br>\n");
    echo ("<li>Nom: $firstname $lastname</li>\n");
    echo ("<li>transaction numero: $txn_id</li>\n");
    echo ("<li>Coût de la transaction: $amount $payment_currency</li>\n");
    echo ("<li>date de la transaction: $payment_date</li>\n");
     
    for ($k=1; $k<=$num_cart_items;$k++){
    $variable_name = $keyarray['item_name'.$k.''];
    $quantity = $keyarray['quantity'.$k.''];
    echo"<li>objet acheté n°".$k."= ".$variable_name."</li>\n" ;
    echo"<li>Quantité acheté= ".$quantity."</li>\n"  ;
    }
     
     
    $payment_gross = $keyarray['payment_gross'];
    $custom = $keyarray['custom'];
     
     
     
    echo ("<p>La transaction s'est bien effectuée, un email de confirmation vous a été envoyé.<br> Vous devez vous identifez sur le site <a href='https://www.paypal.com'>www.paypal.com</a> pour voir les détails de cette transaction.<br>");
    }
    else if (strcmp ($lines[0], "FAIL") == 0) {
     
    //VERIFICATION
    echo"Il y a eu eu une erreur lors de la redirection depuis paypal. Vérifier que le paiment s'est bien effectué.";
     
    }
     
    }
     
    fclose ($fp);}
    Via ce code, l'utilisateur visualise sur votre site à vous les details de la transaction.

    En esperant que ca serve à d'autres..

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2005
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2005
    Messages : 58
    Par défaut
    Merci, celà m'aide énormément.

    Par contre, il ya quelque chose que je ne comprend pas, pourquoi redéfinir

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    $txn_id = $_POST['txn_id'];
    $custom = $_POST['custom'];
    lorsque le paiement est validé alors qu'ils ont déja été définies au début??

    Et sinon il y'a t il un moyen de tester des achats sans paiements?? j'ai bien trouvé http://developer.paypal.com/ mais il me semble qu'on ne peut pas tester les achats via notre site mais uniquement via leur site?..

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    8
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Calvados (Basse Normandie)

    Informations forums :
    Inscription : Juin 2003
    Messages : 8
    Par défaut
    très intéressant gussoner !!!!

    pour info paypal délivre un fichier zip ou tout est inclus et expliqué (en anglais , mais on se débrouille)

    je poserai juste la question : ou peut on faire la mise a jour de ma base de donner après le paiement !!!! j'ai peur que ce ne soit pas assez sécurisé pour le faire en ligne ....

    sinon pour répondre au test sans payer c'est tout a fait possible (je le fais sans problème)

    une fois enregistré sur le développer paypal il faut créer deux compte ( 1 compte Business (pour l'encaissement du site) et un compte personel pour le paiement

    dans votre script notifier l'adresse qui vous est délivrée comme compte paypal business
    et ne pas oublier de rediriger le formulaire sur : https://www.sandbox.paypal.com/cgi-bin/webscr

    mais tout ça est déjà paramétrer dans le zip fourni par paypal
    il faut juste utiliser les // pour faire son choix ...

    j'espère vous avoir été un peu utile

    a+ et bonne prog

    BONNE VENTE AUSSI

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 7
    Par défaut
    Bonjour,
    je cherche actuellement à mettre en place sur mon site un mécanisme de paiement avec Paypal. J'ai lu vos messages, repris le même code et les mêmes paramètres pour le compte Paypal.
    J'ai tout de même un souci avec cela, étape nécessaire pour utiliser la notification instantanée de paiement selon quelqu'un d'un autre forum :

    "Vérifier que l'adresse email ou les paiements sont envoyés est confirmée sur votre compte PayPal. Si l'adresse email sur le compte PayPal n'est pas confirmée, alors vous ne recevrez pas la Notification Instantanée de paiement".

    Est-ce que c'est ce que Paypal appelle avoir un compte mail "vérifié" ? Donc il faut passer par leur code à 4 chiffres, mécanisme qu'ils facturent 1 euro et quelques ? Ou alors cela n'a rien à voir ?
    Parce que ma page de NIP n'est jamais appelée par la sandbox Paypal (même si elle est bien configurée dans le compte sandbox). Et pourtant la vente se fait bien entre mon compte client de test et mon compte vendeur de test ...

    Merci pour votre aide.

  6. #6
    Membre averti
    Inscrit en
    Mars 2003
    Messages
    44
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Mars 2003
    Messages : 44
    Par défaut
    un autre tuto trouvé sur le web

    Tuto Paypal IPN

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [newbie] Transfert de données multibases
    Par Thierryx dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 11/07/2005, 09h35
  2. [C#] [Excel] Transfert de données
    Par bartoumi dans le forum Windows Forms
    Réponses: 3
    Dernier message: 11/04/2005, 14h08
  3. Transfert de données securisées via Internet ???
    Par franck06 dans le forum Développement
    Réponses: 3
    Dernier message: 22/11/2004, 17h16
  4. [Designer] Problème de transfert de données entre modul
    Par BILLYPATOU dans le forum Designer
    Réponses: 11
    Dernier message: 09/03/2004, 18h15
  5. Transfert de données vers My SQL
    Par zoso dans le forum Outils
    Réponses: 2
    Dernier message: 30/09/2003, 10h21

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