Bonjour, Si je poste c'est que je ne sais plus comment faire pour faire marcher cette API. <?php
if(isset($_POST)){
file_put_contents('logPOST.txt', print_r($_POST,true));
}
//permet de traiter le retour ipn de paypal
$email_account = "xxx";
$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://www.sandbox.paypal.com', 443, $errno, $errstr, 30); // je vais essayer de tester avec le port 80 on ne sait jamais
$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) {
file_put_contents('log.txt', 'Erreur de socket ssl');
} else {
fputs ($fp, $header . $req);
while (!feof($fp)) {
$res = fgets ($fp, 1024);
if (strcmp ($res, "VERIFIED") == 0) { // Ici que s'arrête l'envoie de mail pour debug
// vérifier que payment_status a la valeur Completed
if ( $payment_status == "Completed") {
if ( $email_account == $receiver_email) {
if( $payment_currency == "EUR" ){
/**
* C'EST LA QUE TOUT SE PASSE
* PS : tjrs penser à vérifier la somme !!
*/
file_put_contents('log.txt', print_r($_POST,true));
$dns = 'mysql:host=xxx;dbname=xxx';
$utilisateur = 'xxx';
$motDePasse = 'xxx';
$db = new PDO( $dns, $utilisateur, $motDePasse );
$req = $db->query('SELECT * FROM buy WHERE id = '.$custom['id'].' LIMIT 1');
$d = $req->fetch(PDO::FETCH_ASSOC);
if(!empty($d)){
$uid=$custom['id'];
$data=serialize($_POST);
$req = $db->query('SELECT * FROM offers WHERE price = '.$payment_amount.' LIMIT 1');
$c = $req->fetch(PDO::FETCH_ASSOC);
$offre_id = $c['id'];
$offre_duration = $c['duration'];
$offre_price = $c['price'];
//Mise à jour de la durée des abonnements par rapport au prix
if($payment_amount == '5'){ $offre_duration == '1';}
if($payment_amount == '10'){ $offre_duration == '2';}
if($payment_amount == '15'){ $offre_duration == '3';}
if($payment_amount == '20'){ $offre_duration == '4';}
//on mets à jour la balance du joueur
$db->query('UPDATE buy SET expiration_exclu = DATE_ADD(NOW(), INTERVAL '.$offre_duration.' WEEK) 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.txt', 'Le paiement a bien été confirmé');
$to = 'xxx';
$subject = 'Payement réussi';
$message = 'Le payement Paypal a réussi';
$headers = 'From: xxx' . "\r\n" .
'Reply-To: xxx' . "\r\n" .
'X-Mailer: PHP/' . phpversion();
mail($to, $subject, $message, $headers);
}else{
file_put_contents('log.txt', 'Le paiement ne correspond à aucune offre');
}
/**
* FIN CODE
*/
}
}
}
else {
// Statut de paiement: Echec
file_put_contents('log.txt', 'Echec du paiement');
}
exit();
}
else if (strcmp ($res, "INVALID") == 0) {
file_put_contents('log.txt', 'Transaction invalide'); // J'arrive donc toujours ici
file_put_contents('log2.txt', print_r($_POST,true));
}
}
fclose ($fp);
} Pour débuguer le code je m'envoie des mails après chaque étape du code et j'ai fini par voir qu'après ce if je n'ai plus rien if (strcmp ($res, "VERIFIED") == 0) { Et que juste avant, je reçois bein un mail me disant que le code s'execute.... Vous avez une idée car moi honnêtement, je suis vidé depuis 2 jous de recherche sur google et ici Merci à tous ceux qui m'aideront. Anthony
... View more