Bonjour, ayant suivi le tutoriel sur L'API de Paypal, je me suis lancé dans un petit projet, mais impossible de comprendre pourquoi rien ne se passe lorsque l'URL de notification est appelée.
Et SI elle est appelée d'ailleurs...
Pourtant tout me semble correct !
Mon code :
<form action="https://www.sandbox.paypal.com/cgi-bin/webscr" method="post">
<input name="amount" type="hidden" value="10" />
<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="perdredupoids-facile.com" />
<input name="cancel_return" type="hidden" value="perdredupoids-facile.com" />
<input name="notify_url" type="hidden" value="payment.php" />
<input name="cmd" type="hidden" value="_xclick" />
<input name="business" type="hidden" value="contact-facilitator@perdredupoids-facile.com" />
<input name="item_name" type="hidden" value="CE QUE JE VENDS" />
<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="var1=1&var2=lol" />
<input type="submit" value="S'abonner" class="btn primary">
payment.php :
<?php
//permet de traiter le retour ipn de paypal
$email_account = "contact-facilitator@perdredupoids-facile.com";
$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);
$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) {
session_start();
include 'config.php';
$bdd = new PDO('mysql:host='.$host.';dbname='.$db, $db_user, $db_password);
$req = $bdd->prepare("SELECT * FROM users WHERE username = :username");
$req->execute(array('username' => $_SESSION['pseudo']));
$user = $req->fetch(PDO::FETCH_OBJ);
echo $_POST['amount'];
$pay = $bdd->prepare("UPDATE users SET solde = :amount WHERE username = :username");
$pay->execute(array(
'amount' => $_POST['amount'],
'username' => $_SESSION['pseudo']));
/**
* C'EST LA QUE TOUT SE PASSE
* PS : tjrs penser à vérifier la somme !!
*/
/**
* FIN CODE
*/
}
}
else {
// Statut de paiement: Echec
}
exit();
}
else if (strcmp ($res, "INVALID") == 0) {
// Transaction invalide
}
}
fclose ($fp);
}
Si quelqu'un pouvait m'aider, ça serait génial O_O
En fait, j'ai résolu le problème, depuis, je suis passé à Paypal ExpressCheckout :)
J'ai un autre problème, depuis ---> x) http://www.grafikart.fr/forum/topics/16833#last
Verifie ta configuration au nieveau de paypal pour la page de callback, si tout est bon vas y à grand coup de var_dump pour savoir exactement ce qui est retourné par paypal.