Précédent   Forum du club des développeurs et IT Pro > Webmasters - Développement Web > Général Conception Web > E-Commerce
E-Commerce Forum d'entraide sur le commerce électronique sur le Web, et sur les paiements en ligne
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 19/11/2012, 12h06   #1
pixel016
Invité régulier
 
Inscription : septembre 2010
Messages : 106
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 106
Points : 5
Points : 5
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 :
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
pixel016 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/11/2012, 08h35   #2
max-mag
Membre confirmé
 
Inscription : décembre 2006
Messages : 339
Détails du profil
Informations forums :
Inscription : décembre 2006
Messages : 339
Points : 242
Points : 242
A tout hasard, la condition "if (strcmp ($res, "VERIFIED") == 0) {" est elle remplie ?
__________________
Prestataires, inscrivez vous dans l'annuaire e-commerce des prestataires - foe.hn : un raccourcisseur d'url fun, avec API
max-mag est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/11/2012, 11h22   #3
pixel016
Invité régulier
 
Inscription : septembre 2010
Messages : 106
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 106
Points : 5
Points : 5
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 ...
pixel016 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/11/2012, 12h38   #4
pixel016
Invité régulier
 
Inscription : septembre 2010
Messages : 106
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 106
Points : 5
Points : 5
Désolé de relancer le sujet mais personne à une petite idée ?
pixel016 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 21h45.


 
 
 
 
Partenaires

Hébergement Web