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

EDI, CMS, Outils, Scripts et API PHP Discussion :

[PayPal] IPN HS : échanges avec la HotLine


Sujet :

EDI, CMS, Outils, Scripts et API PHP

  1. #1
    Membre actif
    Homme Profil pro
    Programmeur fou
    Inscrit en
    Octobre 2010
    Messages
    339
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aveyron (Midi Pyrénées)

    Informations professionnelles :
    Activité : Programmeur fou

    Informations forums :
    Inscription : Octobre 2010
    Messages : 339
    Points : 216
    Points
    216
    Par défaut [PayPal] IPN HS : échanges avec la HotLine
    Bonjour à tous,

    Comme chacun sait maintenant, le script php appelé par l'IPN de Paypal ne fonctionne plus depuis qq mois (novembre 2011 selon mes recherches sur Internet).

    Il y a des centaines de messages à ce sujet dans les forums et aucune réponse.

    Ayant besoin de résoudre ce problème, j'ai passé trois jours dessus mais les scripts trouvés ici ou là chez PaypalDev, PaypalTech ou dans des tutos ne fonctionnent pas, et tous pour la même raison (pas de données reçues dans le $_POST quelque soient les paramétrages du compte vendeur). J'ai donc loggué un appel à la ligne chaude de Paypal hier et reçu une réponse ce matin :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Bonjour Toulousaing,
     
    Merci de nous avoir contactés. Vous avez d’autres questions ? Vous
    trouverez toutes vos réponses en cliquant sur le lien "Service
    Clientèle" en bas de chaque page PayPal ou en nous appelant gratuitement
    depuis un poste fixe au 0800 942 890.
     
    Cordialement,
     
    Service clientèle
    PayPal
    Du FDG total, quoi...

    J'ai donc appelé, et j'ai eu un gugus en ligne. Je lui explique le problème du $_POST vide et il me répond : "il peut y avoir un délai avant de recevoir un email de notification". J'ai essayé de lui expliquer que là n'était pas le problème puisque c'est MON script php qui est censé envoyer cet email, il n'a pas compris. (normal, je pense qu'à la hotline il y a des spécialistes de 1er niveau, or c'est bien un problème de programmation).

    Je lui ai expliqué que je souhaitais parler à un programmeur, il m'a dit qu'il allait "escalader" mon problème et que l'on me recontactera.

    Stay tuned.

    En attendant, un début de tuto mis à jour est dispo ici :
    http://www.ddtl.fr/monsite/Tutorial_..._MySQL_NIP.doc

    (c'est celui de Shaun Wourm de 2005 revu et illustré)
    à la retraite, occupé à apprendre Blender pour pondre des bagnôles pour FS22 (voir Papocle.fr)

  2. #2
    Membre actif
    Homme Profil pro
    Programmeur fou
    Inscrit en
    Octobre 2010
    Messages
    339
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aveyron (Midi Pyrénées)

    Informations professionnelles :
    Activité : Programmeur fou

    Informations forums :
    Inscription : Octobre 2010
    Messages : 339
    Points : 216
    Points
    216
    Par défaut
    Bon, j'ai trouvé.

    En continuant à chercher des exemples de code "qui marchent" j'ai trouvé ça sur https://www.paypaltech.com/SG2/ :

    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
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
     
    <?php
    // Revision Notes
    // 11/04/11 - changed post back url from https://www.paypal.com/cgi-bin/webscr to https://ipnpb.paypal.com/cgi-bin/webscr
    // For more info see below:
    // https://www.x.com/content/bulletin-ip-address-expansion-paypal-services
    // "ACTION REQUIRED: if you are using IPN (Instant Payment Notification) for Order Management and your IPN listener script is behind a firewall that uses ACL (Access Control List) rules which restrict outbound traffic to a limited number of IP addresses, then you may need to do one of the following: 
    // To continue posting back to https://www.paypal.com  to perform IPN validation you will need to update your firewall ACL to allow outbound access to *any* IP address for the servers that host your IPN script
    // OR Alternatively, you will need to modify  your IPN script to post back IPNs to the newly created URL https://ipnpb.paypal.com using HTTPS (port 443) and update firewall ACL rules to allow outbound access to the ipnpb.paypal.com IP ranges (see end of message)."
     
     
    // 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";
     
    	// If testing on Sandbox use: 
    	// $header .= "Host: www.sandbox.paypal.com:443\r\n";
    $header .= "Host: ipnpb.paypal.com:443\r\n";
    $header .= "Content-Type: application/x-www-form-urlencoded\r\n";
    $header .= "Content-Length: " . strlen($req) . "\r\n\r\n";
     
    	// If testing on Sandbox use:
    	//$fp = fsockopen ('ssl://www.sandbox.paypal.com', 443, $errno, $errstr, 30);
    $fp = fsockopen ('ssl://ipnpb.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'];
     
    //set email variables
    $From_email = "From: vendeur@vendeur.com";
    $Subject_line = "Votre achat";
     
    $email_msg = "Thanks for purchasing my item. Your order will be delivered in 3-4 days. We appreciate your business.";
    $email_msg .= "\n\nThe details of your order are as follows:";
    $email_msg .= "\n\n" . "Transaction ID: " .  $txn_id ;
    $email_msg .= "\n" . "Payment Date: " . $payment_date;
     
    if (!$fp) {
    // HTTP ERROR
    } else {
    fputs ($fp, $header . $req);
    while (!feof($fp)) {
    $res = fgets ($fp, 1024);
    if (strcmp ($res, "VERIFIED") == 0) {
    // check 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
     
    $mail_From = $From_email;
    $mail_To = $payer_email;
    $mail_Subject = $Subject_line;
    $mail_Body = $email_msg;
     
    mail($mail_To, $mail_Subject, $mail_Body, $mail_From);
     
     
    }
    else if (strcmp ($res, "INVALID") == 0) {
    // log for manual investigation
     
    $mail_From = $From_email;
    $mail_To = $receiver_email;
    $mail_Subject = "INVALID IPN POST";
    $mail_Body = "INVALID IPN POST. The raw POST string is below.\n\n" . $req;
     
    mail($mail_To, $mail_Subject, $mail_Body, $mail_From);
     
    }
    }
    fclose ($fp);
    }
    ?>
    Ceux qui suivent vont dire : "Ouais, c'est le même code que l'on trouve partout et qui marche pas".

    Ebé non, c'est pas le même code, et l'auteur a pris soin de l'écrire dès la première ligne de son source :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Revision Notes
    // 11/04/11 - changed post back url from https://www.paypal.com/cgi-bin/webscr to https://ipnpb.paypal.com/cgi-bin/webscr
    et 11/04/11 ce n'est pas le 11 avril, c'est le 4 novembre, en américain. Marrant, c'est justement à cette date que les scripts sont tombés en panne...

    Conclusion, les tests dans la Sandbox ne fonctionnent plus parce qu'il n'y a pas de ipnpb.sandbox.paypal.com et les scripts "réels" ne fonctionnent plus parce que maintenant Paypal demande aux scripts IPN de dialoguer avec une adresse différente...

    On aurait aimé le savoir !

    J'ai copié ce source sous le nom nip.php dans mon serveur, j'ai activé la NIP, j'ai donné l'adresse du script, j'ai réalisé un vrai achat (pour voir) et j'ai reçu mon message dans la minute qui suivait :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    Le 21/03/2012 10:09, vendeur@vendeur.com a écrit :
    > Thanks for purchasing my item. Your order will be delivered in 3-4 days. We appreciate your business.
    >
    > The details of your order are as follows:
    >
    > Transaction ID: 55N46318AB7232457
    > Payment Date: 02:04:00 Mar 21, 2012 PDT
    >
    Voili voilà. Maintenant, je peaufine le tuto et je publie l'info. J'espère que je vais avoir une médaille...
    à la retraite, occupé à apprendre Blender pour pondre des bagnôles pour FS22 (voir Papocle.fr)

  3. #3
    Membre actif
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2010
    Messages
    144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Décembre 2010
    Messages : 144
    Points : 241
    Points
    241
    Par défaut
    J'ai un script permettant de récupérer les IPN qui tourne depuis janvier 2011, j'ai pas fais de modifications dessus et il fonctionne toujours.

    Mon fsockopen :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $fp = fsockopen ('ssl://www.paypal.com', 443, $errno, $errstr, 30);
    Le reste est quasiment identique au code posté au dessus

  4. #4
    Membre actif
    Homme Profil pro
    Programmeur fou
    Inscrit en
    Octobre 2010
    Messages
    339
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aveyron (Midi Pyrénées)

    Informations professionnelles :
    Activité : Programmeur fou

    Informations forums :
    Inscription : Octobre 2010
    Messages : 339
    Points : 216
    Points
    216
    Par défaut
    tu peux me l'envoyer stp ?

    prenom.nom@gmail.com

    merci.

    D.
    à la retraite, occupé à apprendre Blender pour pondre des bagnôles pour FS22 (voir Papocle.fr)

  5. #5
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Août 2012
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2012
    Messages : 2
    Points : 2
    Points
    2
    Par défaut
    Bonjour,

    J'exhume plus ou moins ce sujet, car c'est le seul que j'aie trouvé qui réponde clairement au chemin de croix que j'ai dû parcourir sur le web pour trouver des infos non contradictoires et claires...

    En effet, de la part de PayPal, qui a (a priori) toutes les raisons d'être précis dans les consignes de développement, absolument AUCUNE réponse ne m'est donnée...

    J'avais comme beaucoup mis au point un site marchand occasionnel fonctionnant avec PayPal et son IPN. Je dois en refaire un sur le même modèle, mais là, crac, grrrrrosse galère !

    Après bien des tentatives, j'ai quelque chose qui fonctionne en Sandbox avec le code suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    $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 .= "Host: ipnpb.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);
    Comme indiqué dans le post précédent de Toulousaing, j'ai essayé avec :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $header .= "Host: www.sandbox.paypal.com:443\r\n";
    ...mais ça n'a pas fonctionné !

    Bref, là en tout cas ça fonctionne en Sandbox, mais je me demande à quelle sauce je vais être mangé quand je passerai le site in vivo ! Car en effet, là encore les infos sont contradictoires : certains disent 'ssl://www.paypal.com' d'autres préfèrent 'ssl://ipnpb.paypal.com'. Quelqu'un a plus d'infos sur le sujet ?

    Je serai curieux de savoir qui a trouvé la fameuse info sur ipnpb.paypal.com et surtout, OÙ

    Merci pour votre aide.


    Edit : ah oui, parmi les nombreuses infos contradictoires que j'ai pu trouver, j'ai vu chez certains qu'il fallait mettre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $header = "POST /cgi-bin/webscr HTTP/1.1\r\n";
    ...en tout cas, chez moi ça ne fonctionne pas avec ça !

  6. #6
    Membre actif
    Homme Profil pro
    Programmeur fou
    Inscrit en
    Octobre 2010
    Messages
    339
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aveyron (Midi Pyrénées)

    Informations professionnelles :
    Activité : Programmeur fou

    Informations forums :
    Inscription : Octobre 2010
    Messages : 339
    Points : 216
    Points
    216
    Par défaut
    J'ai fignolé le tuto
    http://www.ddtl.fr/monsite/Tutorial_..._MySQL_NIP.doc
    Il fonctionne, tout y est, il faut que j'enlève la mention "version provisoire"
    j'ai même déjà reçu des remerciements
    à la retraite, occupé à apprendre Blender pour pondre des bagnôles pour FS22 (voir Papocle.fr)

  7. #7
    Candidat au Club
    Homme Profil pro
    autre
    Inscrit en
    Août 2012
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : autre

    Informations forums :
    Inscription : Août 2012
    Messages : 2
    Points : 3
    Points
    3
    Par défaut
    Citation Envoyé par Toulousaing Voir le message
    J'ai fignolé le tuto
    http://www.ddtl.fr/monsite/Tutorial_..._MySQL_NIP.doc
    Il fonctionne, tout y est, il faut que j'enlève la mention "version provisoire"
    j'ai même déjà reçu des remerciements
    Bonjour,

    j'ai un peu parcouru votre tuto qui ma foi est tres bien expliqué.
    Toutefois, comment fait on pour récupérer les données (IPN) d'articles (item_name) si on a plusieurs item dans le panier?

    example:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    for ($i=0 ;$i < $nbArticles ; $i++) {
        $index = $i +1;
        echo '<input type="hidden" name="item_name_'.$index.'";
        value="'.htmlspecialchars($_SESSION['panier']['nom_article'][$i]).'"><br/>';
     
        echo '<input type="hidden" name="amount_'. $index . '";
        value="'.htmlspecialchars($_SESSION['panier']['prix_article'][$i]).'"><br/>';
     
        echo '<input type="hidden" name="quantity_'. $index .'";
        value="'.htmlspecialchars($_SESSION['panier']['quantite_article'][$i]).'"><br/>';
    }
    Pcq l'exemple que vous donnez c'est si on a un seul article dans le panier ou je me trompe?

    Merci d'avance de votre aide

  8. #8
    Membre actif
    Homme Profil pro
    Programmeur fou
    Inscrit en
    Octobre 2010
    Messages
    339
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aveyron (Midi Pyrénées)

    Informations professionnelles :
    Activité : Programmeur fou

    Informations forums :
    Inscription : Octobre 2010
    Messages : 339
    Points : 216
    Points
    216
    Par défaut
    Je ne l'ai jamais fait.
    Effectivement, c'est un paragraphe à ajouter au tuto.
    Pose plutôt ta question dans le forum des utilisateurs Paypal, tu auras plus de lecteurs de ta question : https://www.paypal-community.com/t5/...-site/bd-p/ipp
    Il te faut te connecter à ton compte PP avant de pouvoir accéder au lien.
    Bonne chance et tiens-moi au courant de la réponse, que je puisse l'ajouter au tuto.
    Merci.
    à la retraite, occupé à apprendre Blender pour pondre des bagnôles pour FS22 (voir Papocle.fr)

  9. #9
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Août 2012
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2012
    Messages : 2
    Points : 2
    Points
    2
    Par défaut
    Ok, donc pour la version réelle, ce sera "ipnpb.paypal.com".

    Super tuto, merci beaucoup !

  10. #10
    Candidat au Club
    Homme Profil pro
    autre
    Inscrit en
    Août 2012
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : autre

    Informations forums :
    Inscription : Août 2012
    Messages : 2
    Points : 3
    Points
    3
    Par défaut
    Citation Envoyé par Toulousaing Voir le message
    Je ne l'ai jamais fait.
    Effectivement, c'est un paragraphe à ajouter au tuto.
    Pose plutôt ta question dans le forum des utilisateurs Paypal, tu auras plus de lecteurs de ta question : https://www.paypal-community.com/t5/...-site/bd-p/ipp
    Il te faut te connecter à ton compte PP avant de pouvoir accéder au lien.
    Bonne chance et tiens-moi au courant de la réponse, que je puisse l'ajouter au tuto.
    Merci.
    Bonjour,

    Merci pour ta réponse mais le soucis c'est que je n'ai pas de compte paypal...

    ==>> ICI

    il y a bien une discution concernant l'envois des données d'un panier à plusieurs articles mais je me pose vraiment la question comment fait on pour récupérer les données IPN... si qqn pouvait m'aider ...

    Merci

  11. #11
    Membre habitué Avatar de monlou
    Homme Profil pro
    Inscrit en
    Janvier 2010
    Messages
    363
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : Canada

    Informations forums :
    Inscription : Janvier 2010
    Messages : 363
    Points : 144
    Points
    144
    Par défaut merci beaucoup Toulousaing pour ce tuto
    je n'arrivais pas a comprendre pourquoi mes transactions fonctionnait dans mon compte Paypal mais que je n'arrivais pas a recevoir le $_POST dans le script de NIP

    ca fait environ 3 semaines que j'ai débuter a installer une solution de paiement Paypal par de recherches interminables et comme tu l'a si bien dit: `''aucune réponse``.

    il ne me restait que de solutionner ce probleme .

    et le service a la clientele de Paypal !!!!!!!
    ayoye!!! c'est l'enfer !!!

    du jamais vu auparavant!!!

    merci encore une fois
    Ils ne savaient pas que c'était impossible, alors ils l'ont fait!
    Mark Twain.

  12. #12
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Novembre 2012
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2012
    Messages : 2
    Points : 2
    Points
    2
    Par défaut
    Bonjour,

    Tout d'abord milles merci pour ce tuto, après avoir perdu beaucoup de temps, j'ai pu un peu en rattraper. En revanche j'ai un petit soucis avec l'IPN, je n'ai pas de retour, la base ne se met pas à jour.

    dans le fichier NIP.php :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    $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); // réel
    après une tentaive infructueuse j'ai simplement remplacer ipnpb.paypal.com par www.sandbox.paypal.com, information trouver sur le site de sandbox.

    Mais malgré cela rien à l'horizon, même après une heure d’attente.

    J'ai moi même lancer le fichier nip.php, en cause de désespoirs, pour voir et il m'affiche invalide, alors que sur la sandbox et les compte paypal le paiement est vérifiée?

    Une idée ??

    TRES URGENT, ouverture du site samedi, merci d'avance de votre aide.

  13. #13
    Membre actif
    Homme Profil pro
    Programmeur fou
    Inscrit en
    Octobre 2010
    Messages
    339
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aveyron (Midi Pyrénées)

    Informations professionnelles :
    Activité : Programmeur fou

    Informations forums :
    Inscription : Octobre 2010
    Messages : 339
    Points : 216
    Points
    216
    à la retraite, occupé à apprendre Blender pour pondre des bagnôles pour FS22 (voir Papocle.fr)

  14. #14
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Novembre 2012
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2012
    Messages : 2
    Points : 2
    Points
    2
    Par défaut
    Citation Envoyé par Toulousaing Voir le message
    Merci mais je viens de le faire fonctionner, j'ai changé la ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    fputs ($fp, $header . $req);
    de place, je l'ai mise avant la récupération des données "POST" et cela fonctionne super.

    merci

Discussions similaires

  1. Paypal IPN: Problème avec fsockopen
    Par ilalaina dans le forum E-Commerce
    Réponses: 2
    Dernier message: 23/03/2011, 16h39
  2. animation qui change avec le temps
    Par ralf91 dans le forum Flash
    Réponses: 0
    Dernier message: 12/06/2008, 14h20
  3. Réponses: 1
    Dernier message: 23/04/2008, 09h40
  4. Réponses: 1
    Dernier message: 18/09/2006, 02h41

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