Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 14 sur 14
  1. #1
    Membre régulier
    Homme Profil pro
    Programmeur fou
    Inscrit en
    octobre 2010
    Messages
    142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Programmeur fou

    Informations forums :
    Inscription : octobre 2010
    Messages : 142
    Points : 76
    Points
    76

    Par défaut Paypal et IPN HS : echanges 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 :
    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é)

  2. #2
    Membre régulier
    Homme Profil pro
    Programmeur fou
    Inscrit en
    octobre 2010
    Messages
    142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Programmeur fou

    Informations forums :
    Inscription : octobre 2010
    Messages : 142
    Points : 76
    Points
    76

    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 :
    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 :
    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 :
    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...

  3. #3
    Membre confirmé
    Homme Profil pro Guillaume
    Développeur Web
    Inscrit en
    décembre 2010
    Messages
    142
    Détails du profil
    Informations personnelles :
    Nom : Homme Guillaume
    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 : 142
    Points : 239
    Points
    239

    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 :
    $fp = fsockopen ('ssl://www.paypal.com', 443, $errno, $errstr, 30);
    Le reste est quasiment identique au code posté au dessus

  4. #4
    Membre régulier
    Homme Profil pro
    Programmeur fou
    Inscrit en
    octobre 2010
    Messages
    142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Programmeur fou

    Informations forums :
    Inscription : octobre 2010
    Messages : 142
    Points : 76
    Points
    76

    Par défaut

    tu peux me l'envoyer stp ?

    prenom.nom@gmail.com

    merci.

    D.

  5. #5
    Invité de passage
    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 :
    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 :
    $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 :
    $header = "POST /cgi-bin/webscr HTTP/1.1\r\n";
    ...en tout cas, chez moi ça ne fonctionne pas avec ça !

  6. #6
    Membre régulier
    Homme Profil pro
    Programmeur fou
    Inscrit en
    octobre 2010
    Messages
    142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Programmeur fou

    Informations forums :
    Inscription : octobre 2010
    Messages : 142
    Points : 76
    Points
    76

    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

  7. #7
    Invité de passage
    Homme Profil pro sylvain schraepen
    autre
    Inscrit en
    août 2012
    Messages
    2
    Détails du profil
    Informations personnelles :
    Nom : Homme sylvain schraepen
    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 :
    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 régulier
    Homme Profil pro
    Programmeur fou
    Inscrit en
    octobre 2010
    Messages
    142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Programmeur fou

    Informations forums :
    Inscription : octobre 2010
    Messages : 142
    Points : 76
    Points
    76

    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.

  9. #9
    Invité de passage
    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
    Invité de passage
    Homme Profil pro sylvain schraepen
    autre
    Inscrit en
    août 2012
    Messages
    2
    Détails du profil
    Informations personnelles :
    Nom : Homme sylvain schraepen
    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 régulier Avatar de monlou
    Profil pro
    Inscrit en
    janvier 2010
    Messages
    305
    Détails du profil
    Informations personnelles :
    Âge : 61
    Localisation : Canada

    Informations forums :
    Inscription : janvier 2010
    Messages : 305
    Points : 87
    Points
    87

    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
    Invité de passage
    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 :
    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 régulier
    Homme Profil pro
    Programmeur fou
    Inscrit en
    octobre 2010
    Messages
    142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Programmeur fou

    Informations forums :
    Inscription : octobre 2010
    Messages : 142
    Points : 76
    Points
    76

  14. #14
    Invité de passage
    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 :
    fputs ($fp, $header . $req);
    de place, je l'ai mise avant la récupération des données "POST" et cela fonctionne super.

    merci

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •