IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

E-Commerce Discussion :

Paypal et script IPN


Sujet :

E-Commerce

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    223
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 223
    Points : 47
    Points
    47
    Par défaut Paypal et script IPN
    Bonjour à tous,

    Voici mon petit (enfin gros) soucis :

    J'ai besoin d'envoyer un mai contenant une clé de déverrouillage extraite d'une base de donnée une fois un paiement via paypal effectué.
    Bien sur il faut que l'envoi se fasse uniquement si le paiement a bien été effectué.

    Pour cela j'utilise donc l'IPN de Paypal.
    J'ai donc crée une page ipn.php comme celle ci :

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    <?php
     
    // STEP 1: Read POST data
     
    // reading posted data from directly from $_POST causes serialization
    // issues with array data in POST
    // reading raw POST data from input stream instead.
    $raw_post_data = file_get_contents('php://input');
    $raw_post_array = explode('&', $raw_post_data);
    $myPost = array();
    foreach ($raw_post_array as $keyval) {
      $keyval = explode ('=', $keyval);
      if (count($keyval) == 2)
         $myPost[$keyval[0]] = urldecode($keyval[1]);
    }
    // read the post from PayPal system and add 'cmd'
    $req = 'cmd=_notify-validate';
    if(function_exists('get_magic_quotes_gpc')) {
       $get_magic_quotes_exists = true;
    }
    foreach ($myPost as $key => $value) {       
       if($get_magic_quotes_exists == true && get_magic_quotes_gpc() == 1) {
            $value = urlencode(stripslashes($value));
       } else {
            $value = urlencode($value);
       }
       $req .= "&$key=$value";
    }
     
     
    // STEP 2: Post IPN data back to paypal to validate
     
    $ch = curl_init('https://www.paypal.com/cgi-bin/webscr');
    curl_setopt($ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);
    curl_setopt($ch, CURLOPT_POST, 1);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $req);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 1);
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2);
    curl_setopt($ch, CURLOPT_FORBID_REUSE, 1);
    curl_setopt($ch, CURLOPT_HTTPHEADER, array('Connection: Close'));
     
    // In wamp like environments that do not come bundled with root authority certificates,
    // please download 'cacert.pem' from "http://curl.haxx.se/docs/caextract.html" and set the directory path
    // of the certificate as shown below.
    // curl_setopt($ch, CURLOPT_CAINFO, dirname(__FILE__) . '/cacert.pem');
    if( !($res = curl_exec($ch)) ) {
        // error_log("Got " . curl_error($ch) . " when processing IPN data");
        curl_close($ch);
        exit;
    }
    curl_close($ch);
     
     
    // STEP 3: Inspect IPN validation result and act accordingly
     
    if (strcmp ($res, "VERIFIED") == 0) {
        // check whether the payment_status is Completed
        // check that txn_id has not been previously processed
        // check that receiver_email is your Primary PayPal email
        // check that payment_amount/payment_currency are correct
        // process payment
     
        // 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'];
     
        $to = "monmail@gmail.com";
        $headers = "From: ".$payer_email;
        $message = "Test de l'ipn !!!";
        $subject = "SANDBOX PAYPAL";
     
        mail($to, $subject, $message, $headers);
     
    } else if (strcmp ($res, "INVALID") == 0) {
        // log for manual investigation
    }
    ?>

    Ici j'essai juste de faire un test en envoyant un mail. Hors je ne reçois rien du tout.

    Le paiement se fait via un bouton "Acheter" Paypal que j'ai configuré :
    Dans la rubrique variables avancées j'ai mis notify_url=http://www.monwebsite.com/ipn.php

    Voila donc quand je fais un test avec la sandbox je ne reçois pas de mail.
    J'ai aussi fais un test en "production" et aucun mail ne part.

    Si vous avez une idée cela m'aiderai beaucoup.

    Merci

  2. #2
    Membre confirmé

    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 464
    Points : 474
    Points
    474
    Par défaut
    A tout hasard, la condition "if (strcmp ($res, "VERIFIED") == 0) {" est elle remplie ?

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    223
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 223
    Points : 47
    Points
    47
    Par défaut
    En fait après un test en utilisant l'IPN simulator de la Sandbox Paypal (https://www.x.com/developers/paypal/...ide/IPNTesting) j'ai le message d'erreur suivant :

    IPN delivery failed. HTTP error code 403: Forbidden

    Si je me trompe pas cela signifie que l'ipn n'est pas transmis à mon script php hébergé sur mon serveur (ovh).
    Du coup je ne sais pas quoi faire ...

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    223
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 223
    Points : 47
    Points
    47
    Par défaut
    Désolé de relancer le sujet mais personne à une petite idée ?

Discussions similaires

  1. [PHP 5.3] Script Paypal pour IPN
    Par cantador dans le forum Langage
    Réponses: 3
    Dernier message: 16/04/2012, 10h51
  2. Réponses: 0
    Dernier message: 24/02/2009, 23h25
  3. PayPal, problème avec IPN
    Par HwRZxLc4 dans le forum E-Commerce
    Réponses: 0
    Dernier message: 10/12/2008, 21h54
  4. Paypal : comment fonctionne l'IPN ?
    Par TheDoci dans le forum E-Commerce
    Réponses: 0
    Dernier message: 21/08/2008, 11h43

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo