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

Langage PHP Discussion :

Paypal IPN socket


Sujet :

Langage PHP

  1. #1
    Membre régulier
    Inscrit en
    Février 2003
    Messages
    171
    Détails du profil
    Informations forums :
    Inscription : Février 2003
    Messages : 171
    Points : 77
    Points
    77
    Par défaut Paypal IPN socket
    Bonjour a tous,

    Cela fait trois jours que j'eassai de trouver pourquoi je n'arriva pas a obtenir une reponse du serveur SANDBOX de Paypal.

    Un peu de code...
    Code : 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
    <?php 
    $IdFichier = fopen("logs_.txt", "w");
    fputs ($IdFichier, "Début de fichier log\n");
    //permet de traiter le retour ipn de paypal
    $email_account = "cocote_1395659534_biz@titi.com";
    $req = 'cmd=_notify-validate';
     fputs ($IdFichier, "------------------------------------------------------------\n");
    foreach ($_POST as $key => $value) {
        $value = urlencode(stripslashes($value));
    	fputs ($IdFichier, "Key : ".$key." Req : ".$value."\n\n");
        $req .= "&$key=$value";
    }
    fputs ($IdFichier, "\n\n------------------------------------------------------------\n");
     
    $header = "POST /cgi-bin/webscr HTTP/1.0\r\n";
    $header .= "Host: www.sandbox.paypal.com:443\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);
    fputs ($IdFichier, "\n\n------------------------------------------------------------\n");
    $chaine="Erreur :".$errno." - errstr : ".$errstr."\n";
    fputs ($IdFichier, $chaine);
    fputs ($IdFichier, "\n\n------------------------------------------------------------\n"); 
    $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['var'],$var);
    $data=serialize($_POST);
    $chaine="status Paiement : ".$payment_status."\n";
    $chaine=$chaine."email_account : ".$email_account."\n";;
    $chaine=$chaine."receiver_email : ".$receiver_email."\n";;
    $chaine=$chaine.$data."\n\n";
    fputs ($IdFichier, $chaine);
    if (!$fp) {
    fputs ($IdFichier, "socket a false\n");
     
    } else {
    fputs ($fp, $header . $req);
    while (!feof($fp)) {
        $res = fgets ($fp, 1024);
    	fputs ($IdFichier, "On est dedans...\n");
    	fputs ($IdFichier, $res);
        if (strcmp ($res, "VERIFIED") == 0) {
    		fputs ($IdFichier, "VERIFIED...\n");
            // vérifier que payment_status a la valeur Completed
            if ( $payment_status == "Completed") {
                   if ( $email_account == $receiver_email) {
    				   fputs ($IdFichier, "email_account == receiver_email...\n");
                    /**
                     * C'EST LA QUE TOUT SE PASSE
                     * PS : tjrs penser a vérifier la somme !!
                     */
                    /**
                     * FIN CODE
                     */
                   }
            }
            else {
                    // Statut de paiement: Echec
            }
            exit();
       }
        else if (strcmp ($res, "INVALID") == 0) {
    		// Transaction invalide
    		fputs ($IdFichier, "Transaction invalide...\n");
        }
    }
    fclose ($fp);
    fclose($IdFichier);
    }
     
    ?>
    $fp est a false et $errno =0 , $errstr="";

    Quelqu'un a une petite idée ?

    Merci pour votre aide

  2. #2
    Expert éminent
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2010
    Messages : 3 929
    Points : 7 762
    Points
    7 762
    Par défaut
    Dans mon souvenir, PayPal fournissait un toolkit en PHP pré-configuré pour dialoguer avec les serveurs de paiement, pourquoi as-tu essayé de le faire toi-même ?

    Voir le toolkit sur le site de paypal

  3. #3
    Membre régulier
    Inscrit en
    Février 2003
    Messages
    171
    Détails du profil
    Informations forums :
    Inscription : Février 2003
    Messages : 171
    Points : 77
    Points
    77
    Par défaut
    Bonjour,

    Le script que j'utilise est fourni par paypal, il semblerai que depuis le 1 Février les entêtes ont changés.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    // renvoyer au systeme PayPal pour validation
     
    $header .= "POST /cgi-bin/webscr HTTP/1.1\r\n";
    $header .= "Content-Length: ".strlen($req)."\r\n";
    $header .= "Content-Type: application/x-www-form-urlencoded\r\n";
    $header .= "Host: www.sandbox.paypal.com\r\n";
    $header .= "Connection: close\r\n\r\n";;
     
    $fp = fsockopen ('www.sandbox.paypal.com', 80, $errno, $errstr, 30);
    cette fois $fp contient quelque chose :
    dans le while, la variable $res vaut :

    $res=HTTP/1.0 302 Found
    res=Location: https://www.sandbox.paypal.com
    res=Server: BigIP
    res=Connection: close
    res=Content-Length: 0

    Mais jamais, au desespoir VERIFIED !


  4. #4
    Membre averti

    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2011
    Messages
    205
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2011
    Messages : 205
    Points : 409
    Points
    409
    Billets dans le blog
    1
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $res=HTTP/1.0 302 Found
    res=Location: https://www.sandbox.paypal.com
    Une 302 est une redirection temporaire, l'url fournie étant la nouvelle url.
    De ce que je vois, elle est en HTTPS, contrairement à l'ancienne (vu que tu tapais sur le port 80).
    Essaies d'attaquer l'url en https (port 443, de mémoire) ?

  5. #5
    Membre régulier
    Inscrit en
    Février 2003
    Messages
    171
    Détails du profil
    Informations forums :
    Inscription : Février 2003
    Messages : 171
    Points : 77
    Points
    77
    Par défaut
    Bonjour,

    quand je fais :

    $fp = fsockopen ('ssl://www.sandbox.paypal.com', 443, $errno, $errstr, 30);

    La socket est vide...

Discussions similaires

  1. [PayPal][IPN] Afficher les variables $_POST
    Par beegees dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 1
    Dernier message: 16/04/2012, 11h24
  2. Paypal IPN: Problème avec fsockopen
    Par ilalaina dans le forum E-Commerce
    Réponses: 2
    Dernier message: 23/03/2011, 16h39
  3. Paypal IPN : notify_url n'est jamais exécutée
    Par ilalaina dans le forum E-Commerce
    Réponses: 8
    Dernier message: 05/11/2010, 15h18
  4. Paypal IPN et PDT ?
    Par TallyHo dans le forum Langage
    Réponses: 2
    Dernier message: 18/05/2009, 14h23

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