Bonjour (bonsoir), donc voilà après des heures de recherches et de recherches, je ne trouve pas la solution au problème suivant:
Donc voilà, après avoir fait exactement la même chose que le tuto sur Paypal, il s'avère que j'ai un problème persistant.
En effet, la page ipn n'est pas appelée j'ai enregistré un texte dans un log pour savoir si la page est appelée lors du paiement et rien.
J'ai changé les paramètres du vendeur en acceptant les notify_url, j'ai vérifié si Paypal pouvait accéder mon url local...
Même si je supprime la page ipn la transaction se fait sans soucis, on dirait qu'elle ne sert à rien !

ipn.php :(code barbant mais juste la première ligne devrait être au moins appelée car il n'ya pas de condition ou autre)

<?php 
//permet de traiter le retour ipn de paypal
file_put_contents('log.txt', "APELLE MOI ?");
$email_account = "[MON EMAIL]@gmail.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) {
                /**
                 * C'EST LA QUE TOUT SE PASSE
                 * PS : tjrs penser à vérifier la somme !!
                 */

                file_put_contents('log.txt', print_r($_POST,true));
            $req=$bdd->query('SELECT * FROM premium_offers WHERE price='.$payment_amount.' LIMIT 1');
            $d=$req->fetch(PDO::FETCH_ASSOC);
            if (!empty($d)) { #S'il y aune offre correspondante
                $data=serialize($_POST);
                $duration=$bdd'duration'];
                $uid=$_SESSION'id'];
                $bdd->query('UPDATE espmembre SET Premium_expiration = date_add(NOW(), INTERVAL'.$duration.' MONTH
                    ) WHERE id='.$uid ); // ON met à jour la date d'expiration
                $bdd->query("INSERT INTO orders SET user_id=$uid, amount=$payment_amount, created=NOW(),datas='$data'"); //On met la facture avec les données 
                file_put_contents('log.txt', "Le payment a bien été éffectué");
            }
            else{
                file_put_contents('log.txt', "Aucune offre correspondante"); #Sinon pas d'offre correspondante

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

Formulaire:

<form action="https://www.sandbox.paypal.com/cgi-bin/webscr" method="post">
            <select name="amount"><?php
                while ($d=$req->fetch()) { ?>
                <option value="<?php echo $d'price'];?>"><?php echo $d'name'].$d'price'].'€'; ?></option>
                <?php

                }
                ?>
            </select>
    <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="http://[MON IP]/Site/Premium/success.php" />
    <input name="cancel_return" type="hidden" value="http://[MON IP]/Site/Premium/cancel.php" />
    <input name="notify_url" type="hidden" value="http://[MON IP]/Site/Premium/ipn.php" />
    <input name="cmd" type="hidden" value="_xclick" />
    <input name="business" type="hidden" value="[MON EMAIL]@gmail.com" />
    <input name="item_name" type="hidden" value="Compte premium" />
    <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="usss=1" />
    <input type="submit" value="S'abonner" id="btn primary">
</form>

Si vous avez eu le même soucis ou si vous avez une solution je suis preneur merci !

1 réponse


Lordo
Auteur

Bon après un test IPN il s'avère que Paypal n'arrivait pas à accéder à mon URL pourtant il arrive à interagir
avec success.php. J'ai donc mis mon site en ligne sur un hébergeur gratuit et il a réussi à communiquer avec ma page IPN,
je vais voir comment faire pour ouvrir les ports ça doit être ça le problème enfin bref, je ne mets pas le sujet comme
[Résolu] car je n'ai pas encore trouvé de solutions si vous avez une solution, vous...