Page 1 sur 1

Faire un système de paiement ( paypal ) pour une annonce

Posté : 06 juil. 2014, 14:20
par cindy381
Bonjour,
J'ai réalisé un petit formulaire qui permet aux visiteur de poster une annonce mais j'aimerais rajouter un champ pour faire "payer" le post des annonces, c'est un prix unique à 2euros, je ne vois pas comment faire, si quelqu'un à déjà fait ça ou si vous avez un bon tuto je prends :)
en cas voici tout de même le formulaire:
<?php
// Testons si le fichier a bien été envoyé et s'il n'y a pas d'erreur
  

$dossier = 'img/annonce/';
$fichier = basename($_FILES['photo']['name']);
$taille_maxi = 1000000;
$taille = filesize($_FILES['photo']['tmp_name']);
$extensions = array('.png', '.gif', '.jpg', '.jpeg');
$extension = strrchr($_FILES['photo']['name'], '.'); 
//Début des vérifications de sécurité...
if(!in_array($extension, $extensions)) //Si l'extension n'est pas dans le tableau
{
     $erreur = 'Veuillez vérifier que le format de votre photo soit de type png, gif, jpg, jpeg, ';
}
if($taille>$taille_maxi)
{
     $erreur = 'Le fichier est trop gros...';
}
if(!isset($erreur)) //S'il n'y a pas d'erreur, on upload
{
     //On formate le nom du fichier ici...
     $fichier = strtr($fichier, 
          'ÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÒÓÔÕÖÙÚÛÜÝàáâãäåçèéêëìíîïðòóôõöùúûüýÿ', 
          'AAAAAACEEEEIIIIOOOOOUUUUYaaaaaaceeeeiiiioooooouuuuyy');
     $fichier = preg_replace('/([^.a-z0-9]+)/i', '-', $fichier);
     if(move_uploaded_file($_FILES['photo']['tmp_name'], $dossier . $fichier)) //Si la fonction renvoie TRUE, c'est que ça a fonctionné...
     {
          echo 'Téléchargement effectué avec succès !';
     }
     else //Sinon (la fonction renvoie FALSE).
     {
          echo 'Echec du téléchargement !';
     }
}
else
{
     echo $erreur;
}

if( empty( $erreurs)  ){

   $req = $bdd->prepare('INSERT INTO publicite ( id_departements, photo, titre, description, phone, email, website, street, postcode, city)
 
  VALUES (:id_departements, :photo, :titre, :description, :phone, :email, :website, :street, :postcode, :city )');
   
   
   
     $retour= $req->execute(array(
          'id_departements'=>$_POST['departements'],
          'photo'=>$_FILES['photo']['name'],
          'titre'=>$_POST['titre'],
          'description'=>$_POST['description'],
          'phone'=>$_POST['phone'],
          'email'=>$_POST['email'],
          'website'=>$_POST['website'],
          'street'=>$_POST['street'],
          'postcode'=>$_POST['postcode'],
          'city'=>$_POST['city']
    ));
if( $retour ===false) echo "Problème lors de l'insertion";
       
}else{//le tableau ne contient
 echo "<p> renseignez les champs vides</p>";
}

}//fin de la soumission du formulaire


?>
 

	<div class="row">
    <div class="col-md-6 col-md-offset-2 col-sm-8 col-sm-offset-2">
 
 <br>

        <form class="ins_con"  action="ma_pub.php" method="post" enctype="multipart/form-data" onSubmit="return(VerifForm(this))">
   
		<h4>POSTER</h4>
        
         <br>
         
        <label for="departement">Departement </label>
        <select class="form-control" name="departements" id="departement">
     <?php foreach ($bdd->query("SELECT * from departements order by nom") as $dep):?>
        <option value="<?php echo $dep['departement_id']; ?>"><?php echo $dep['nom'];?></option>
     <?php endforeach; ?>
        </select>
     

     <!-- titre-->
     <label>Votre acitivité :</label>
     <input class="form-control" type="text" name="titre" value="<?php if(isset($_POST['titre'])) echo $_POST['titre'];?>" />
     <div class="error"><?php if(isset($erreurs['titre'])) echo $erreurs['titre'];?></div>
 
     
     
   
     
      <!-- titre -->
     <label>Email :</label>
     <input class="form-control" type="text" name="email" value="<?php if(isset($_POST['email'])) echo $_POST['email'];?>" />
     <div class="error"><?php if(isset($erreurs['email'])) echo $erreurs['email'];?></div>
     
   
     
      <!-- Ville-->
      <label>Ville *</label>
      <input class="form-control" type="text" name="city" value="<?php if(isset($_POST['city'])) echo $_POST['city'];?>" />
      <div class="error"><?php if(isset($erreurs['city'])) echo $erreurs['city'];?></div>
     
     
       <!-- Ville -->
      <label>Rue</label>
      <input class="form-control" type="text" name="street" value="<?php if(isset($_POST['street'])) echo $_POST['street'];?>" />
      <div class="error"><?php if(isset($erreurs['street'])) echo $erreurs['street'];?></div>
     
      <!-- Code postal-->
      <label>Code postal *</label>
      <input class="form-control" type="text" name="postcode" value="<?php if(isset($_POST['postcode'])) echo $_POST['postcode'];?>" />
      <div class="error"><?php if(isset($erreurs['postcode'])) echo $erreurs['postcode'];?></div>
     
     
      <!-- Sous-titre-->
      <label>website</label>
      <input class="form-control" type="text" name="website" value="<?php if(isset($_POST['website'])) echo $_POST['website'];?>" />
      <div class="error"><?php if(isset($erreurs['website'])) echo $erreurs['website'];?></div>

       <!-- Description-->
      <label>Detail</label>
       <input class="form-control" type="text" name="description" value="<?php if(isset($_POST['description'])) echo $_POST['description'];?>" />
      <div class="error"><?php if(isset($erreurs['description'])) echo $erreurs['description'];?></div>
   
      <label>Télephone</label>
      <input class="form-control" type="text" name="phone" value="<?php if(isset($_POST['phone'])) echo $_POST['phone'];?>" />
      <div class="error"><?php if(isset($erreurs['phone'])) echo $erreurs['phone'];?></div>
             
      <label>Photo</label>
      <input  name="photo" type="file"/> 
       
   <br>
    <input class="btn-u" type="submit" value="ENVOYER">
    </form>
     

 
    </div>
?>

Re: Faire un système de paiement ( paypal ) pour une annonce

Posté : 06 juil. 2014, 14:34
par moogli
salut,


google te fournit pas mal d'info comme : http://fr.openclassrooms.com/informatiq ... r-paypal-1

ou pas mal d'autre https://www.google.fr/webhp#q=paypal%20php


@+

Re: Faire un système de paiement ( paypal ) pour une annonce

Posté : 06 juil. 2014, 20:30
par cindy381
J'ai regardé les liens et j'ai donc intégrer le code pour un paiment via paypal.
Par contre je voudrais juste savoir comment procéder pour rajouter dans ma premier ligne du formulaire.

<form action="https://www.sandbox.paypal.com/cgi-bin/webscr" method="post">

Car mon formulaire pour le moment à déjà un attribut action qui est celui ci: ( donc juste comment rajouter la ligne du dessus dans mon bout de code)
<form class="ins_con" action="ma_pub.php" method="post" enctype="multipart/form-data" onSubmit="return(VerifForm(this))">

Problème insertion base de donnée avec PAYPAL

Posté : 09 juil. 2014, 13:43
par cindy381
Salut,
voilà j'ai fait un code pour faire une insertion en bdd ( paypal nous permet de retracer des historique de commande mais mois je préfère comme ça ).
Mon soucis est que en bdd je devrais avoir un trace dans ma table orders mais aucune insertion en bdd, Le paiement est bien effectué.
J'ai mis mes tables en bas de page peut être que le problème viens de là, je pense

Voici le formulaire, page pub.php
<?php session_start (); ?>
<?php
$db = new PDO('mysql:host=***************;dbname=**********','****','******');
$db->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_WARNING);
$req = $db->query('SELECT * FROM users WHERE id=1');
while($d = $req->fetch(PDO::FETCH_ASSOC)){
	$_SESSION['User'] =$d;
}
?>
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>Document sans titre</title>
<link rel="stylesheet" href="css/bootstrap.css">
<link rel="stylesheet" href="css/bootstrap.min.css">
<link rel="stylesheet" href="css/font-awesome.min.css">
<link rel="Stylesheet" type="text/css" href="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.9/themes/base/jquery-ui.css" />
</head>

<body>

<div class="container">

<nav>Connecté en tant que <?php echo $_SESSION['User']['name']; ?></nav>

<h1>Choisir une formule d'abonement</h1>

<form action="https://www.sandbox.paypal.com/cgi-bin/webscr" method="post">
<select name="amount">
<?php
$req = $db->query('SELECT * FROM offers');
while($d = $req->fetch(PDO::FETCH_ASSOC)){
	?>
    <option value="<?php echo $d['price']; ?>"><?php echo $d['name'];?> -<?php echo $d['price'];?> Euros</option>
	<?php
}
?>
</select>
<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.lasortie.fr/succes.php" />
<input name="cancel_return" type="hidden" value="URL_ANNULATION" />
<input name="notify_url" type="hidden" value="URL_NOTIFICATION_PAIEMENT" />
<input name="cmd" type="hidden" value="_xclick" />
<input name="business" type="hidden" value="[email protected]" />
<input name="item_name" type="hidden" value="offre publicitaire" />
<input name="no_note" type="hidden" value="1" />
<input name="lc" type="hidden" value="FR" />
<input name="bn" type="hidden" value="PP-BuyNowBF" />
<input name="custom" type="hidden" value="user_id=1" />
<input type="submit" value="S'abonner" class="btn primary">
</form>

</div>



</body>
[javascript]<script src="js/jquery.js"></script>
<script type="text/javascript" src="js/bootstrap.js"></script>
<script type="text/javascript" src="js/bootstrap.min.js"></script>[/javascript]


Page ipn.php
<?php
//permet de traiter le retour ipn de paypal
$email_account = "mon_adresse_@";
$req = 'cmd=_notify-validate';
 
foreach ($_POST as $key => $value) {
$value = urlencode(stripslashes($value));
$req .= "&$key=$value";
}
 // renvoyer au systeme Paypal pour validation

$header .= "POST /cgi-bin/webscr HTTP/1.0\r\n";
$header .= "Content-Type: application/x-www-form-urlencoded\r\n";
$header .= "Host: http://www.sandbox.paypal.com\r\n";  // http://www.paypal.com for a live site
$header .= "Content-Length: " . strlen($req) . "\r\n\r\n";
$fp = fsockopen ('ssl://www.sandbox.paypal.com', 443, $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'];
parse_str($_POST['custom'],$custom);

if (!$fp) {
 
} else {
fputs ($fp, $header . $req);
while (!feof($fp)) {
$res = fgets ($fp, 1024);
if (strcmp ($res, "VERIFIED") == 0) {
// vérifier que payment_status a la valeur Completed
if ( $payment_status == "Completed") {
if ( $email_account == $receiver_email) {
/**
* C'EST LA QUE TOUT SE PASSE
* PS : tjrs penser à vérifier la somme !!
*/
 
 file_put_contents('log', print_r($_POST,true));
 
$db = new PDO('mysql:host=****************;dbname=***************','*********','*********');
$req = $db->query('SELECT * FROM offers WHERE price='.$payment_amount.' LIMIT 1');
$d = $req->fetch(PDO::FETCH_ASSOC);
if(!empty($d)){
	
	$duration = $d['duration'];
	$uid = $custom['user_id'];
	$data = serialize($_POST);
	
	//On met à jour la date d'expiration
	$db->query('UPDATE users SET expiration = DATE_ADD(NOW(), INTERVAL '.$duration.' MONTH) WHERE id = '.$uid);
	
	//On sauvegarde la commande
	$db->query("INSERT INTO orders SET user_id=$uid, amount=$payment_amount, created=NOW(), datas='$data'");
	file_put_contents('log','Le paiement à bien était confirmé');
}else{
	file_put_contents('log','Le paiement ne correspond à aucune offre');
}

/**
* FIN CODE
*/
}
}
else {
// Statut de paiement: Echec
}
exit();
}
else if (strcmp ($res, "INVALID") == 0) {
// Transaction invalide
}
}
fclose ($fp);
}	
MES TABLES DANS PHP MY ADMIN

Voiçi ma table orders:
1 id int(11) UNSIGNED Non Aucune AUTO_INCREMENT
2 id_user int(11) Oui NULL
3 ammount int(11) Oui NULL
4 created datetime Oui NULL
5 datas text latin1_swedish_ci Oui NULL

Voiçi ma table offers
1 id int(11) Non Aucune
2 name varchar(255) latin1_swedish_ci Non Aucune
3 duration text latin1_swedish_ci Non Aucune
4 price text latin1_swedish_ci Non Aucune

Voiçi ma table users
1 id int(11) Non Aucune AUTO_INCREMENT
2 name varchar(255) latin1_swedish_ci Oui NULL
3 expiration datetime Oui NULL

Re: Faire un système de paiement ( paypal ) pour une annonce

Posté : 09 juil. 2014, 15:25
par damien_55
salut,

2 choses:

- 1/ prends l'habitude de proteger tes données concernant l'injection en mysql: mysql_real_escape_string; dés que tu inseres ou tu update, tu l'utilises.
//On met à jour la date d'expiration
        $db->query('UPDATE users SET expiration = DATE_ADD(NOW(), INTERVAL '.$duration.' MONTH) WHERE id = '.$uid);
       
        //On sauvegarde la commande
        $db->query("INSERT INTO orders SET user_id=$uid, amount=$payment_amount, created=NOW(), datas='$data'");
- dans ta requete insert, tu as user_id=$uid et datas='$data' ??
"INSERT INTO orders SET user_id='".mysql_real_escape_string($uid)."', amount='".mysql_real_escape_string($payment_amount)."', created=NOW(), datas= '".mysql_real_escape_string($data)."'"

Re: Faire un système de paiement ( paypal ) pour une annonce

Posté : 09 juil. 2014, 18:04
par cindy381
En bdd je récupère bien le fait du changement de la date d'expiration par rapport à la table USERS
mais ds ma table ORDERS rien ne de passe aucune entrée ?

Ma table en cas si ça peut aider .

id int(11) Non Aucune AUTO_INCREMENT
id_user int(11) Oui NULL
ammount int(11) Oui NULL
created datetime Oui NULL
datas text latin1_swedish_ci Oui NULL

Re: Faire un système de paiement ( paypal ) pour une annonce

Posté : 09 juil. 2014, 18:11
par cindy381
Problème résolu,
tt simplement que en fait j'avais mal saisie le nom de mes tables dsl pour le dérangement.
Merci à tous