Bonjour,
Je suis en train de développer un site Internet pour un client qui a écrit un e-book et qui souhaite vendre celui-ci via PayPal.
Pour l'instant j'en suis encore à la phase de test avec la SandBox. Niveau transaction, le compte acheteur est bien débité et le compte vendeur, crédité. Le soucis c'est que ma page de notification de paiement (IPN) n'est pas appelée. En effet, peu importe le résultat, j'ai fait en sorte qu'il y ai une trace dans un fichier de log. Or ce fichier de log reste vide. J'ai tenté d'appeler cette page directement : il n'y a aucune erreur et j'ai bien quelque chose qui s'inscrit dans les logs. J'ai bien activé la notification dans les préférences du compte vendeur. L'adresse de la page est bien renseignée (dans les préférences du compte vendeur, et dans le formulaire sur la page d'achat). De plus, PayPal m'indique dans "Historique des notifications instantanées de paiement" que la page IPN a bien été appelée...
Voici le code de ma page IPN que j'ai simplifié :
Voici le détail de l'IPN qui s'affiche dans PayPal :
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 <?php if ( $fp = fsockopen('www.sandbox.paypal.com', 80, $errno, $errstr, 30) ) { $req = 'cmd=_notify-validate'; foreach ($_POST as $key => $value) { $value = urlencode(stripslashes($value)); $req .= "&{$key}={$value}"; } // renvoyer au système PayPal pour validation $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"; fputs($fp, $header . $req); while ( !feof($fp) ) { $res = fgets($fp, 1024); if ( strcmp($res, "VERIFIED") == 0 ) { if ( $_POST['payment_status'] == 'Completed' ) { if ( verifier_TXN_ID($_POST['txn_id']) ) { if ( $_POST['receiver_email'] == 'email.vendeur@domaine.com' ) { if ( enregistrer_dans_BDD($_POST) ) { if ( envoi_ebook($_POST) ) // OK ! else { // erreur lors de l'envoi du mail contenant l'e-book } } else { // erreur lors de l'enregistrement en BDD } } else { // email vendeur incorrect } } else { // transaction déjà traitée } } else { // paiement incomplet } } else { // non vérifié } } fclose($fp); } else { // erreur HTTP } // enregistrement des résultats dans fichier de log ?>
L'URL de la page est de la forme : http://www.mon-domaine.com/paypal_notify_url.php
C'est la première fois que j'intègre PayPal à un site web donc je ne connais pas encore très bien. J'ai suivis les instructions de ce tuto :
http://www.wikistuce.info/doku.php/a..._site_marchand
... et j'ai réorganisé (optimisé) le code à ma manière.
Par ailleurs, j'aurais besoin de quelques explications sur cette page IPN car il y a un truc que je n'ai pas vraiment saisi. Un des buts de la page IPN, si j'ai bien compris, est de vérifier que les données sont bien valides. Par exemple vérifier si la transaction n'a pas déjà été traitée. Or à aucun moment on ne renvoie quelque chose à PayPal pour lui indiquer de ne pas prendre en compte le paiement si cette condition n'a pas été vérifiée... et de même pour toutes les autres vérifications (si l'e-mail du vendeur est correcte, si l'enregistrement en BDD a bien été effectué, etc.).
Merci de votre attention et de votre aide !
Partager