Aller au contenu

Paypal : configuration


Sujets conseillés

Posté

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à ?

Posté

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

Posté

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à ! @+

Posté

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

Posté

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 ! @+

Posté

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

Posté (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é par smile
Posté

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

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...