smile Posté 10 Novembre 2004 Posté 10 Novembre 2004 Salut, je suis en train de configurer paypal, j'ai ajouté un lien de retour sur mon site si le paiement est accepté, mais je souhaiterai avoir une trace de la transaction, l'enregistré dans ma table. Donc ajouté une variable de retour sécurisé, comment fait-on là ?
smile Posté 10 Novembre 2004 Auteur Posté 10 Novembre 2004 Je suis en train de lire la doc, apparement il faut lire les infos depuis Paypal pour savoir le statut de la transaction avec l'utilisation tx et ensuite renvoyer par la methode POST, j'en suis là pour le moment
AvenueDuWeb Posté 10 Novembre 2004 Posté 10 Novembre 2004 Salut, Alors voici un code que tu peux utiliser pour récupérer des infos : // read the post from PayPal system and add 'cmd'$req = 'cmd=_notify-synch';$tx_token = $_GET['tx'];$auth_token = "icilecodequetefilepaypal";$req .= "&tx=$tx_token&at=$auth_token";// post back to PayPal system to validate$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";$fp = fsockopen ('www.paypal.com', 80, $errno, $errstr, 30);// If possible, securely post back to paypal using HTTPS// Your PHP server will need to be SSL enabled// $fp = fsockopen ('ssl://www.paypal.com', 443, $errno, $errstr, 30);if (!$fp) {// HTTP ERROR} else {fputs ($fp, $header . $req);// read the body data $res = '';$headerdone = false;while (!feof($fp)) {$line = fgets ($fp, 1024);if (strcmp($line, "\r\n") == 0) {// read the header$headerdone = true;}else if ($headerdone){// header has been read. now read the contents$res .= $line;}}// parse the data$lines = explode("\n", $res);$keyarray = array();if (strcmp ($lines[0], "SUCCESS") == 0) {for ($i=1; $i<count($lines);$i++){list($key,$val) = explode("=", $lines[$i]);$keyarray[urldecode($key)] = urldecode($val);}// 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$firstname = $keyarray['first_name'];$lastname = $keyarray['last_name'];$itemname = $keyarray['item_name'];$amount = $keyarray['payment_gross'];$emailclient = $keyarray['payer_email']; Après tout ça rien ne t'empêche de faire une requête sur le numéro de l'item par exemple... Personnellement, j'enregistre les infos d'abord dans ma base, puis le client fait son paiement par paypal et là j'update ma table en mettant que le paiement a bien été effectué. Voilà ! @+
smile Posté 10 Novembre 2004 Auteur Posté 10 Novembre 2004 Oui je viens de mettre en place le script, j'ai une page de test de 1 euros et si tout se passe bien je devrais recuperer les infos, qui voudrait faire un test ? je peux pas moi, on peut ensuite annuler la transaction... AvenueDuWeb ca te dit
AvenueDuWeb Posté 11 Novembre 2004 Posté 11 Novembre 2004 Perso pour les tests j'ai créé un deuxième compte avec une 2ème adresse mail. Car des tests j'ai dû en faire 50 au moins ;o) ! Mais si tu veux que je teste une fois ou deux pourquoi pas... Envoie-moi l'adresse de test par mp ! @+
steph Posté 11 Novembre 2004 Posté 11 Novembre 2004 Salut, Pour tester ses transactions ipn sans passer par paypal il existe un simulateur : http://www.eliteweaver.co.uk/testing/ipntest.php J'ai un morceau e code qui marchait il y a quelques temps, il devrait encore marcher ... // 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";$header .= "Content-Type: application/x-www-form-urlencoded\r\n";$header .= "Content-Length: " . strlen($req) . "\r\n\r\n";if ($postmode == 1){ $domain = "www.paypal.com"; }elseif ($postmode == 2){ $domain = "www.eliteweaver.co.uk"; // Il faut peut-être changer cette adresse par www.eliteweaver.co.uk/cgi-bin/webscr // A tester si ça marche pas }$fp = fsockopen ($domain, 80, $errno, $errstr, 30);// Standard - Instant Payment Notifiction Variables$receiver_email = $_POST['receiver_email'];$business = $_POST['business'];$item_name = $_POST['item_name'];$item_number = $_POST['item_number'];$quantity = $_POST['quantity'];$invoice = $_POST['invoice'];$custom = $_POST['custom'];$option_name1 = $_POST['option_name1'];$option_selection1 = $_POST['option_selection1'];$option_name2 = $_POST['option_name2'];$option_selection2 = $_POST['option_selection2'];$num_cart_items = $_POST['num_cart_items'];$payment_status = $_POST['payment_status'];$pending_reason = $_POST['pending_reason'];$payment_date = $_POST['payment_date'];$settle_amount = $_POST['settle_amount'];$settle_currency = $_POST['settle_currency'];$exchange_rate = $_POST['exchange_rate'];$payment_gross = $_POST['payment_gross'];$payment_fee = $_POST['payment_fee'];$mc_gross = $_POST['mc_gross'];$mc_fee = $_POST['mc_fee'];$mc_currency = $_POST['mc_currency'];$tax = $_POST['tax'];$txn_id = $_POST['txn_id'];$txn_type = $_POST['txn_type'];$for_auction = $_POST['for_auction'];$memo = $_POST['memo'];$first_name = $_POST['first_name'];$last_name = $_POST['last_name'];$address_street = $_POST['address_street'];$address_city = $_POST['address_city'];$address_state = $_POST['address_state'];$address_zip = $_POST['address_zip'];$address_country = $_POST['address_country'];$address_status = $_POST['address_status'];$payer_email = $_POST['payer_email'];$payer_id = $_POST['payer_id'];$payer_status = $_POST['payer_status'];$payment_type = $_POST['payment_type'];$notify_version = $_POST['notify_version'];$verify_sign = $_POST['verify_sign'];if (!$fp) { // Connection au serveur impossible} else { fputs($fp, $header . $req); while(!feof($fp)) { $res = fgets($fp, 1024); if (!strcmp($res,"VERIFIED") || !strcmp($res,"PENDING")) { // Check that txn_id has not been previously processed // Because ipn.php will be called once when PENDING and another one // when the payment will be VERIFIED //TODO // check for receiver_email and amount if($receiver_email==$paypal_email && ($payment_gross==$total_ammount || $total_ammount=="0")) { // process payment // Paiement accepté } else { // Paiement refusé } } else if(!strcmp($res,"INVALID") || !strcmp($res,"FAILED")) { // log for manual investigation //TODO } } fclose ($fp);} Ce code est assez vieux et il n'est surement pas exempt de bug(s) Utilisez le comme bon vous semble. A+ Steph
smile Posté 11 Novembre 2004 Auteur Posté 11 Novembre 2004 (modifié) Merci Steph, j'ai fait des tests avec Avenueduweb, merci à toi Avenueduweb ca fonctionne pas pour le moment (FAIL), je sais pas encore si ca vient du code ou d'une mauvaise config de mon compte, je vais m'en occuper dans la journée. Modifié 11 Novembre 2004 par smile
smile Posté 11 Novembre 2004 Auteur Posté 11 Novembre 2004 Bon et bien ca fonctionne niveau verif Paypal J'aimerai remercier aussi Dan qui m'a aidé à faire des tests aujourd'hui Il reste encore des ajustements à faire, d'ailleurs Dan si t'es libre demain, ca ne serait pas de refus
Sujets conseillés
Veuillez vous connecter pour commenter
Vous pourrez laisser un commentaire après vous êtes connecté.
Connectez-vous maintenant