Précédent   Forum des professionnels en informatique > PHP > PHP & SGBD
PHP & SGBD Forum d'entraide sur les SGBD avec PHP. Avant de poster : FAQ BDD, toutes les FAQ PHP, cours BDD et sources BDD
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 19/01/2012, 18h19   #1
Invité de passage
 
haja ikalangita
Inscription : mars 2010
Messages : 8
Détails du profil
Informations personnelles :
Nom : haja ikalangita

Informations forums :
Inscription : mars 2010
Messages : 8
Points : 0
Points : 0
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 :
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 :
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.
ikalangitahaja est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/02/2012, 20h02   #2
Membre du Club
 
Inscription : septembre 2007
Messages : 402
Détails du profil
Informations forums :
Inscription : septembre 2007
Messages : 402
Points : 68
Points : 68
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 .
cuisto44000 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/02/2012, 12h12   #3
Membre du Club
 
Inscription : septembre 2007
Messages : 402
Détails du profil
Informations forums :
Inscription : septembre 2007
Messages : 402
Points : 68
Points : 68
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 :
<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 :
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 :
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 ?
cuisto44000 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/02/2012, 12h08   #4
Invité de passage
 
haja ikalangita
Inscription : mars 2010
Messages : 8
Détails du profil
Informations personnelles :
Nom : haja ikalangita

Informations forums :
Inscription : mars 2010
Messages : 8
Points : 0
Points : 0
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 :
<input type="hidden" name="hosted_button_id" value="ULYRKF64CKPZW">
?

Merci
ikalangitahaja est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/02/2012, 12h33   #5
Membre du Club
 
Inscription : septembre 2007
Messages : 402
Détails du profil
Informations forums :
Inscription : septembre 2007
Messages : 402
Points : 68
Points : 68
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à ^^
cuisto44000 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/02/2012, 12h35   #6
Invité de passage
 
haja ikalangita
Inscription : mars 2010
Messages : 8
Détails du profil
Informations personnelles :
Nom : haja ikalangita

Informations forums :
Inscription : mars 2010
Messages : 8
Points : 0
Points : 0
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
ikalangitahaja est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/02/2012, 13h39   #7
Invité de passage
 
haja ikalangita
Inscription : mars 2010
Messages : 8
Détails du profil
Informations personnelles :
Nom : haja ikalangita

Informations forums :
Inscription : mars 2010
Messages : 8
Points : 0
Points : 0
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?
ikalangitahaja est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 02h43.


 
 
 
 
Partenaires

Hébergement Web