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

PHP & Base de données Discussion :

Intégrer paypal sur son site


Sujet :

PHP & Base de données

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 16
    Points : 9
    Points
    9
    Par défaut Intégrer paypal sur son site
    Bonjour à tous,

    Je vous écris ici car je galère sur une intégration de paypal sur mon site.
    Comme sur le titre ci-dessus, j'ai intégré paypal sur mon site perso, quand je fais un test pour voir si le paiement se déroule bien, je clique sur mon bouton "acheter" puis je suis redirigé sur paypal à l'aide de ce script :

    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
    <form action="https://www.paypal.com/cgi-bin/webscr" method="post">
    			<input name="cmd" type="hidden" value="_xclick">
    			<input name="business" type="hidden" value="acheteur@gmail.com">
    			<input name="item_name" type="hidden" value="Inscription à MonSite">
    			<input name="amount" type="hidden" value="<?php //echo $totalSum;?> ">
    			<input name="currency_code" type="hidden" value="EUR">
    			<input name="no_shipping" type="hidden" value="1">
    			<input name="return" type="hidden" value="http://www.monsite.com/pagePaypal.php">
    			<input name="last_name" type="hidden" value="<? //echo $nom; ?>">
    			<input name="first_name" type="hidden" value="<? //echo $prenom; ?>">
    			<input name="address1" type="hidden" value="<? //echo $adresse;?>">
    			<input name="address2" type="hidden" value="<? //echo $adresse2 ?>">
    			<input name="city" type="hidden" value="<? //echo $ville; ?>">
    			<input name="zip" type="hidden" value="<? //echo $cp;?>">
    			<input name="country" type="hidden" value="FR">
    			<input name="email" type="hidden" value="<? echo $email;?>">
    			<input name="custom" type="hidden" value="<? echo $idUnique?>">
    			<input name="night_phone_a" type="hidden" value="<? //echo $tel;?>0000000000">
    			<input type="submit" name="Submit" class="envoyer" value="Accéder au Règlement">	
    		</form>
    Là tout déroule nickel, et mon compte acheteur est débité de la somme demandée (je ne teste pas sur le sandbox car j'ai deux vrais comptes paypal avec des vrais argents dessus pour effectuer le test).

    Par contre mon compte vendeur n'est pas crédité mais dans le tableau "activités récentes" qui récapitule les argents reçus, paypal affiche que j'ai reçu un paiement à une telle date mais dans "etat de commande/actions" il m'affiche illico "effectuer un remboursement" comme les captures ci-dessous.





    Deuxièmement la notification de paiement configuré dans le compte du vendeur ne marche pas (code ci-dessous):

    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
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
     
    <?php
     
    $req = 'cmd=_notify-validate';
     
    foreach ($_POST as $key => $value) 
     
    {
     
      $value = urlencode(stripslashes($value));
     
      $req .= "&$key=$value";
     
    }
     
    $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 ('ssl://ipnpb.paypal.com', 443, $errno, $errstr, 30);
     
     
    $payment_status = $_POST['payment_status']; // Si Completed : tout est OK sinon aïe, aïe !
    $payment_amount = $_POST['mc_gross'];
     
    // Identifiant de la transaction
    $txn_id = $_POST['txn_id'];
    $receiver_email = $_POST['receiver_email'];
    $payer_email = $_POST['payer_email'];
    $first_name = $_POST['first_name'];
    $last_name = $_POST['last_name'];
     
    // On récupère notre identifiant unique
    $idUnique = $_POST['custom'];
     
    // Raison pour laquelle le paiement a été placé en attente.
    $pending_reason = $_POST['pending_reason'];
     
    // Devise de paiement
    $payment_currency = $_POST['mc_currency'];
     
    if (!$fp) 
    {
    // ERREUR HTTP
    }
    else
    {
    fputs ($fp, $header . $req);
    while (!feof($fp))
    {
       $res = fgets ($fp, 1024);
     
       if (strcmp ($res, "VERIFIED") == 0)
       {
    /*
    
    Afin d'éviter tout problème de paiement, il faut vérifier les paramètres suivants :
    Vérifier que payment_status est Completed
    Vérifier que txn_id n'a pas été précédemment traité
    Vérifier que receiver_email est votre adresse email PayPal principale
    Vérifier que payment_amount et payment_currency sont corrects
    Traiter le paiement
    A partir de là, Paypal ne fournit plus de code ... C'est à nous de jouer. On va donc vérifier que chaque condition est OK, puis modifier la base.
    */
     
    /* CONNECTION A LA BASE DE DONNEES */
    $conn = @mysql_connect( "localhost", "bistic", "******") or die ( "erreur: connexion à la base" );
    $rs = @mysql_select_db( "bisticbase", $conn) or die ( "erreur: base de données" );
     
    switch ($payment_status)
       {
          case "Completed" : // Le paiement est Completed
     
    	  // idTransaction = dejà dans la bdd ?
              $query = mysql_query("SELECT * FROM xhtml WHERE idTransaction= '$txn_id'");
              $data = mysql_fetch_object($query);
    		if ($data)
     
        // Si l'Id de Transaction est déjà dans la base de données on attribue 1 à $erreur.
                 $erreur = 1;
     
        // email business = ok ?
               if ($receiver_email != "vendeur@gmail.com")
     
                 $erreur = 2;
     
     
     
        // montant reglé = tarif du service ?
     
              if ($payment_amount != 10)
     
                 $erreur = 3;
     
        // devise pour régler = devise acceptée ?
        // On avait définit l'Euro comme devise dans Tuto II.
     
              if ($payment_currency != "EUR")
     
                 $erreur = 4;
    /*
    
    Voilà, maintenant qu'on a vérifié toutes les conditions, il ne reste plus qu'à mettre à jour la base de données, pour activer le compte de l'utilisateur qui vient de payer.
    
    */
              if (!isset($erreur))
              { 
            // Il n'y pas d'erreurs. S'il y a des erreurs vous devez en prévoir la gestion.
     
            $query = "UPDATE xhtml SET idTransaction='$txn_id', autorisation='1', date = NOW() WHERE idUnique='$idUnique'";
            mysql_query($query);
    /*
    
    Pour faire encore plus chic, vous pouvez même envoyer un E-mail au client pour lui confirmer que son paiement a été accepté et que son compte est activé. Ca ne fonctionne que si votre serveur est paramétré pour envoyer les mails...
    
    */
               }
             break;
          }
    }
    else if (strcmp ($res, "INVALID") == 0) 
     
    {
      // consigner pour enquête manuelle
    }
    }
    fclose ($fp);
    }
    ?>
    Est ce que someone peut m'aider ? ou a déjà ce genre de problème sur paypal? je pose surtout la question : pourquoi mon compte vendeur n'est pas crédité de la somme mais peut seulement effectuer un remboursement, alors que mon compte acheteur est débité de la somme.

    Merci aux âmes bienveillantes.

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    450
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 450
    Points : 123
    Points
    123
    Par défaut
    Bonjour, as-tu trouvé une solution pour ton intégration paypal?, moi aussi j'ai posté un sujet sur le forum mais pas de réponses, j'avais utilisé la meme methode que toi, sauf que ce code html de paiement paypal ne permet pas de payer par cb directement, il faut créer un compte paypal obligatoirement .

    J'ai donc opté pour l'option de créer un bouton pour chaque tarif different pour mes paiements à l'aide de la gestion de création de boutons acheter sur mon compte de test sandbox, j'ai 14 boutons en tout, j'ai fais en sorte que telk ou tel bouton s'affiche selon le choix ... bref ...

    Cette methode permet le paiement soit paypal, soit par carte bancaire sans pour autant créer un compte paypal, bref ce qu'il me fallait, le compte acheteur est bien débité, le compte vendeur est bien crédité, mais ... l' ipn sa marche pas .....

    J'ai pourtant ajouté en variable lors de la creation de mes boutons dans le champ prévu pour celà dans la partie n°3 :
    notify_url=http://www.monsite.com/ipn.php ... j'ai mis un envoi de mail sur cette page pour voir si elle etait effectivement appelée, et apriori non même pas ...

    Si quelqu'un pouvait nous aider svp, serieusement, sa parait super simple au départ cette solution paypal, mais finalement ... c'est pas facile .

    Merci, par avance .

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    450
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 450
    Points : 123
    Points
    123
    Par défaut
    Je viens de faire le test : garder le meme code que toi, en ajoutant _s-xclick aulieu de _xclick ... là déjà, sa me donne une page avec possibilité de paiement CB ou paypal, c'est déjà un bon point pour moi, pas besoin de faire en sorte d'afficher tel ou tel bouton ... enfin il m'a fallu ajouter le code html
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <input type="hidden" name="hosted_button_id" value="ULYRKF64CKPZW">
    pour que sa marche, donc on est bien invité à payer, la transaction se passe bien, mais pourquoi la page IPN n'est toujours pas appelée ?

    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 action="https://www.sandbox.paypal.com/cgi-bin/webscr" method="post">
                <input type="hidden" value="<?php echo $prix; ?>" name="amount" />
                <input name="currency_code" type="hidden" value="EUR" />
                <input name="shipping" type="hidden" value="0.00" />
                <input name="tax" type="hidden" value="0.00" />
                <input name="return" type="hidden" value="http://www.site.com/confirmation.php" />
                <input name="cancel_return" type="hidden" value="http://www.site.com/annulation.php" />
                <input name="notify_url" type="hidden" value="http://www.site.com/composants/abonnements/donneespaypal.php" />
                <input name="cmd" type="hidden" value="_s-xclick" />
                <input name="business" type="hidden" value="sel123_1326042703_biz@hotmail.fr" />
                <input name="item_name" type="hidden" value="<?php echo $item_name; ?>" />
                <input name="no_note" type="hidden" value="1" />
                <input name="lc" type="hidden" value="FR" />
                <input type="hidden" name="hosted_button_id" value="ULYRKF64CKPZW">
                <input name="bn" type="hidden" value="PP-BuyNowBF" />
                <input name="custom" type="hidden" value="<?php echo $uniqid; ?>" />
                <input alt="Effectuez vos paiements via PayPal : une solution rapide, gratuite et sécurisée" name="submit" src="https://www.paypal.com/fr_FR/FR/i/btn/btn_buynow_LG.gif" type="image" /><img src="https://www.paypal.com/fr_FR/i/scr/pixel.gif" border="0" alt="" width="1" height="1" />
    		</form>
    j'ai inspecté l'élément pour voir si toutes les infos sont bien transmises dans les value dans mon navigateur, et oui .
    Donc le paiement se fait, impeccable, mais la page ipn n'est pas appelée, et dans confirmation.php, sa me met accès refusé :

    confirmation.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
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
     
    <?php
    // read the post from PayPal system and add 'cmd'
    $req = 'cmd=_notify-validate';
     
    foreach ($_POST as $key => $value) {
    $value = urlencode(stripslashes($value));
    $req .= "&$key=$value";
    }
     
    // 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 ('ssl://www.sandbox.paypal.com', 443, $errno, $errstr, 30);
     
    // assign posted variables to local variables
    $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'];
    $first_name = $_POST['first_name'];
    $last_name = $_POST['last_name'];
    $address_street = $_POST['address_street'];
    $address_city = $_POST['address_city'];
    $address_zip = $_POST['address_zip'];
    $txn_id = $_POST['txn_id'];
    $custom = $_POST['custom'];
    $id_user=$_SESSION['id'];
    $state="valide";
    $date=date("d/m/Y");
    $offre=$_SESSION['offre'];
     
    if (!$fp) {
     
    } else {
    fputs ($fp, $header . $req);
    while (!feof($fp)) {
    $res = fgets ($fp, 1024);
    if (strcmp ($res, "VERIFIED") == 0) {
    // check the payment_status is Completed
    // check that txn_id has not been previously processed
    // check that receiver_email is your Primary PayPal email
    // check that payment_amount/payment_currency are correct
    // process payment
    $host="host";
    $user="user";
    $pass="pass";
     
    mysql_connect($host,$user,$pass);
    mysql_select_db($user);
    $query=mysql_query("SELECT * FROM paypal WHERE payement_status='Pending' AND custom='$custom'");
    $num=mysql_num_rows($query);
    if ($num==1)
    	{
    	$assoc=mysql_fetch_assoc($query);
    	$id=$assoc['id'];
    	echo '<h1>Validation de la commande</h1><div>Merci <strong>'.$_SESSION['pseudo'].'</strong> pour votre commande, Récapitulatif :<br><br><strong>Status du paiement :</strong> accepté<br><strong>identifiant transaction choisistonartisan.com :</strong> '.$assoc['custom'].'<br><strong>identifiant transaction Paypal :</strong> '.$assoc['id_paypal'].'<br><strong>Type :</strong> '.$assoc['item_name'].'<br><strong>Prix :</strong> '.$assoc['amount'].' euros<br><strong>Acces aux offres :</strong> '.$assoc['nbr_offres'].'<br><strong>Mail du paiement :</strong> '.$payer_email.'<br><strong>Nom prénom :</strong> '.$first_name.' '.$last_name.'<br><strong>Adresse :</strong> <br>'.$address_street.'<br>'.$address_city.'<br>'.$address_zip.' </div>';
    	}
    }
    else if (strcmp ($res, "INVALID") == 0) {
    echo '<div id="info_false">Acces refusé !</div>';
    }
    }
    fclose ($fp);
    }
     
     
    ?>
    Sa réagis comme si il n'y avait pas eu de paiement, hors si ... donc voilà ou j'en suis, en esperant qu'une âme charitable puisse éclairer nos lanternes .
    Je sais que paypal avait changé son port, serais-ce de nouveau le cas ?

  4. #4
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 16
    Points : 9
    Points
    9
    Par défaut
    Slt, merci pour la réponse, j'ai pas encore trouvé la solution pour la transaction et ... ipn.

    sinon j'ai testé ton code mais tu peux me dire comment générer value sur

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <input type="hidden" name="hosted_button_id" value="ULYRKF64CKPZW">
    ?

    Merci

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    450
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 450
    Points : 123
    Points
    123
    Par défaut
    c'est l'identifiant du bouton, par conséquent, il faut le créer dans ton compte paypal ... sa te donnera alors l'identifiant bouton

    Sinon, avec cette methode, j'ai reussi à resoudre mon problème, sa marche, et mes données sont bien enregistrées dans ma base de données ...

    J'avais une erreur j'avais oublié un $ dans mon script ipn, ce pourquoi rien ne marchait ... voilà ^^

  6. #6
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 16
    Points : 9
    Points
    9
    Par défaut PAYPAL
    ravi pour toi, sinon est ce que tu peux me filer ton exemple de code ipn? pour que je vois de plus près, je suis fatigué de chercher l'erreur, ça m'a pris trop de temps

  7. #7
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 16
    Points : 9
    Points
    9
    Par défaut paypal
    desolé pour te déranger encore, j'ai crée un bouton paypal, mon problème c'est que lors de la création du bouton paypal me demande directement le prix de l'objet à vendre, n'est il pas possible de récupérer ce prix via ma variable? et comment faire?

Discussions similaires

  1. problème pour intégrer des boutons paypal sur un site php
    Par moricette17 dans le forum Langage
    Réponses: 1
    Dernier message: 30/06/2011, 17h05
  2. [Services] Obtenir la méteo sur son site
    Par arnolem dans le forum Services
    Réponses: 5
    Dernier message: 29/01/2007, 16h07
  3. [phpBB] Réutiliser les classes du forum phpBB sur son site
    Par SebOmaX dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 14
    Dernier message: 21/05/2006, 23h19
  4. [SimpleXML] Insérer un flux sur son site
    Par SnickeursMan dans le forum Bibliothèques et frameworks
    Réponses: 3
    Dernier message: 18/12/2005, 22h58
  5. [CKEditor] Qui utilise FCKeditor sur son site php pour config ?!
    Par guy2004 dans le forum Bibliothèques & Frameworks
    Réponses: 62
    Dernier message: 26/10/2005, 18h24

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