Résolu Probleme php protection (paypal)

Statut
N'est pas ouverte pour d'autres réponses.

realblock

Banni
Inscription
7 Juillet 2013
Messages
208
Réactions
22
Points
2 486
RGCoins
0
Bonsoir
smile.png


Donc voilà mon problème :
Il y a peu de temps, j'ai mis en place un systeme d'achat de "points" supplémentaires pour un jeu en ligne en PHP.
Ce script fonctionnait via le systeme de micro paiement nommé Allopass et bloquait l'accès à ma page "achat-ok.php", qui ajoutait les points achetés au compte de l'utilisateur si celui-ci n'avait pas effectué d'achat téléphonique et validé son code, ce qui empêchait par exemple les actualisation indésirables de cette page. J'utilisais alors le script de "RECALL" fournit par allopass.

Aujourd'hui, je souhaite reproduire ce script mais en utilisant un autre mode de payement : Paypal. Malheureusement Paypal ne propose pas ce genre de sécurité et ne bloque pas les accès indésirables à ma page "achat-ok.php" "protégée" par mon script paypal. Je cherche donc un code me permettant de "bloquer" cet accès "illimité" sans possibilité de hack par faille.

Je n'ai trouvé aucune réponse à ma question jusqu'à ce jour. J'espère que vous pourrez m'aider.

A Bientôt
langue.png
!
 
Non du tout , c'est un systeme de credit , si la personne paie via paypal , celle ci est redirigé sur une page ou sa lui ajoute les crédits mais le probleme est que celle ci n'est pas proteger , il suffit de refresh l'url pour avoir credit en illimité ... Je voudrai combler cette faille avec un script protection ou une condition php ? Du genre si l'utilisateur provient de paypal il a les credits sinon erreur .. Fin je sais pas . Je ne veux pas qu'il ai les credits sans payer
 
Bonsoir
smile.png


Donc voilà mon problème :
Il y a peu de temps, j'ai mis en place un systeme d'achat de "points" supplémentaires pour un jeu en ligne en PHP.
Ce script fonctionnait via le systeme de micro paiement nommé Allopass et bloquait l'accès à ma page "achat-ok.php", qui ajoutait les points achetés au compte de l'utilisateur si celui-ci n'avait pas effectué d'achat téléphonique et validé son code, ce qui empêchait par exemple les actualisation indésirables de cette page. J'utilisais alors le script de "RECALL" fournit par allopass.

Aujourd'hui, je souhaite reproduire ce script mais en utilisant un autre mode de payement : Paypal. Malheureusement Paypal ne propose pas ce genre de sécurité et ne bloque pas les accès indésirables à ma page "achat-ok.php" "protégée" par mon script paypal. Je cherche donc un code me permettant de "bloquer" cet accès "illimité" sans possibilité de hack par faille.

Je n'ai trouvé aucune réponse à ma question jusqu'à ce jour. J'espère que vous pourrez m'aider.

A Bientôt
langue.png
!
Regarde la

Apres je sais pas si sa va t'aider ;)
 
Si peut être mais comment s'y prendre ^^
Hum, peut-être avec une variable de session qui s'incrémente lorsque tu actualises la page. Si elle vaut 1 ça veut dire que le mec a payé une fois. Si elle vaut plus de 1, le mec a actualisé la page. Et quand tu retournes sur la page du paiement, tu remets cette variable à 0 ? Ça doit certainement buguer, mais peut-être qu'en modifiant un peu tu peux avoir un truc propre :)
 
Hum, peut-être avec une variable de session qui s'incrémente lorsque tu actualises la page. Si elle vaut 1 ça veut dire que le mec a payé une fois. Si elle vaut plus de 1, le mec a actualisé la page. Et quand tu retournes sur la page du paiement, tu remets cette variable à 0 ? Ça doit certainement buguer, mais peut-être qu'en modifiant un peu tu peux avoir un truc propre :)
salut mec c'est pas con ce que tu dit mais je ne sais pas comment m'y prendre .... Mais sa pourrait resoudre mon systeme^^
 
Je suis prêt a payer si quelqu'un m'aide ..
Je t'aurais bien aidé, même gratuitement, mais actuellement j'ai des exams et pas vraiment le temps de me pencher sur le problème ! Si t'es patient, d'ici 2/3 semaines je pourrais te recontacter ! Sinon tu peux trouver de bons codeurs sur le forum :)
 
Comme donné par le lien ci dessus : , cela permet de mettre une protection sur les achats en utilisant le IPN :

Code:
<?php
//email pour prévenir le vendeur
$mailTo="Moi <[email protected]>";

//permet de traiter le retour ipn de paypal
// 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";

//www.sandbox.paypal.com pour la phase de test
//www.paypal.com pour la phase réel.
$fp = fsockopen ('www.sandbox.paypal.com', 80, $errno, $errstr, 30);

// affecter les variables publiées aux variables locales
$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'];

$headerMail= "Content-Type:text/html;charset=iso-8859-1\n";//permet d'envoyer les message au format html
$headerMail.= "Content-Transfer-Encoding: 8bit\n";//permet d'envoyer les message au format html
$headerMail.="From: me";//pour répondre au message

//on prépare le texte de l'email
$textMail="
<strong>Détail de la commande</strong><br />
Commande numéro:".$item_number."<br />
prix: ".$payment_amount." &euro;
";

if (!$fp) {
// ERREUR HTTP
}
else {
fputs ($fp, $header . $req);
while (!feof($fp)) {
$res = fgets ($fp, 1024);
if (strcmp ($res, "VERIFIED") == 0) {
//on envoi un email pour prévenir qu'une commande a ete passee
mail($mailTo,"Une nouvelle commande à été réglée",$textMail,$headerMail);

// C'est ici que vous devrez traiter la commande (enregistrement bdd etc..)
// vérifier que payment_status est Terminé
// 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
}
else if (strcmp ($res, "INVALIDE") == 0) {
// consigner pour étude manuelle
}
}
fclose ($fp);
}
?>

afin de vérifier si la personne a bien payer !

Edit remplaces SandBox par : $fp = fsockopen (' ', 80, $errno, $errstr, 30);
 
Statut
N'est pas ouverte pour d'autres réponses.
Retour
Haut