Aller au contenu

Besoin d'aide pour la fonction IPN de PayPal


Sujets conseillés

Posté

Bonjour à tous,

J'ai besoin d'aide pour faire fonctionner l'IPN sur Sandbox car je n'y arrive pas et je ne vois pas ce qui me manque.

Voici le code utilisé pour mon paiement:

<form action="https://www.sandbox.paypal.com/fr/cgi-bin/webscr" method="post">
<input type="hidden" name="cmd" value="_xclick">
<input type="hidden" name="business" value="email_du_compte_vendeur_sur_sandbox">
<input type="hidden" name="item_name" value="Option Premium">
<input type="hidden" name="item_number" value="{$ad.ID}">
<input type="hidden" name="currency_code" value="EUR">
<input type="hidden" name="amount" value="2">
<input type="hidden" name="no_note" value="1">
<input type="hidden" name="return" value="http://www.mon-site.com/member.php">
<input type="hidden" name="notify_url" value="http://www.mon-site.com/paypal_premium.php">
<input type="image" src="http://www.sandbox.paypal.com/fr_FR/i/btn/x-click-but01.gif" name="submit" alt="Effectuez vos paiements via PayPal : une solution rapide, gratuite et sécurisée">
</form>

il devrait donc y avoir un retour automatique lorsque le paiement est effectué (return) mais il ne se fait pas, c'est mon premier problème...

Ensuite PayPal n'envoye pas les infos sur ma page de traitement (notify_url) donc je ne peux pas tester mon script, pourquoi il n'envoie rien ?

Voici un aperçu de mon script, pourriez vous me dire si il manque quelque chose pour gérer les données de PayPal ?

<?
session_start();
include_once("admin/inc.php");
$pagename = $sitename;
include_once("header_inc.php");

$tplList=new TplLoad;

// 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.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'];

if (!$fp) {
// HTTP ERROR
} else {
fputs ($fp, $header . $req);
while (!feof($fp)) {
$res = fgets ($fp, 1024);

if (strcmp ($res, "VERIFIED") == 0)
{
if ($payment_status=="Completed")
{
q("update $ads_tbl set ad_is_premium = 1 where ad_id= $item_number");
// Get time for premium ad
$currTime = time();
$periodPremium = 3600;
$premiumExpire = $currTime + $periodPremium;
q("update $ads_tbl set ad_premium_expire = $premiumExpire where ad_id= $item_number");
q("update $ads_tbl set ad_premium_warn = 1 where ad_id= $item_number");

echo "<blockquote>".LA_MEMBER_MAKE_PREM_DONE."</blockquote>";
}
elseif ($payment_status<>"")
{
//error
}
}
else if (strcmp ($res, "INVALID") == 0)
{
echo "<blockquote>".LA_PREMIUM_ERROR."</blockquote>";
}
}
fclose ($fp);
}

include_once("footer_inc.php");
?>

Merci d'avance de bien vouloir m'éclairer un peu.

Posté (modifié)

SVP, quelqu'un peut m'orienter ? les comptes fictifs sont désormais correctements configurés, l'IPN est activé, le transfert de données désactivé, la redirection après paiement est OK, tout semble bon et pourtant... SANDBOX n'envoye pas les infos sur ma page de traitement (paypal_premium.php) car je ne reçois aucun des emails qui doivent être envoyés si j'ai une réponse de Paypal, peu importe laquelle.

Voici mon script de test, pourriez vous me dire ce qu'il manque SVP ou bien si l'url www.sandbox.paypal.com est correcte, laquelle utilisez vous.

Merci d'avance

<?
session_start();
include_once("admin/inc.php");
$pagename = $sitename;
include_once("header_inc.php");

$tplList=new TplLoad;

// 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 ('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'];

if (!$fp) {
// HTTP ERROR
} else {
fputs ($fp, $header . $req);
while (!feof($fp)) {
$res = fgets ($fp, 1024);

if (strcmp ($res, "VERIFIED") == 0)
{
if ($payment_status=="Completed")
{
$sujet="VERIFIED IPN";
$texte="IPN est ok";
$from="nom_AT_site.com";
$adresse="receveur_AT_site.fr";

sendEmail($adresse, $from, $sujet, $texte);
}
elseif ($payment_status<>"")
{
$sujet="STATUT IPN AUTRE";
$texte="IPN est autre";
$from="nom_AT_site.com";
$adresse="receveur_AT_site.fr";

sendEmail($adresse, $from, $sujet, $texte);
}
}

else if (strcmp ($res, "INVALID") == 0)
{
$sujet="IPN INVALID";
$texte="IPN est invalide";
$from="nom_AT_site.com";
$adresse="receveur_AT_site.fr";

sendEmail($adresse, $from, $sujet, $texte);
}
}
fclose ($fp);
}

include_once("footer_inc.php");
?>

Modifié par Dax

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...