Mise en place d'un paiement Paypal sur site marchand.

Créer un compte de developer.

Il faut dans un premier temps créer un compte développer sur Paypal, afin de simuler des comptes vendeur et acheteur. - Rendez-vous sur https://developer.paypal.com cliquez sur « signup » et remplissez le formulaire. Une fois le formulaire complété vous recevrez un mail de confirmation dans lequel il faudra cliquer sur un lien pour terminer votre inscription.

Votre compte developer est maintenant créé, il faut désormais ouvrir des comptes fictifs pour le vendeur et les acheteurs.

Connectez-vous à https://developer.paypal.com en utilisant le login et le mot de passe que vous avez indiqués précédemment. Cliquez sur le lien « enter sandbox » situé en haut à droite. Vous allez vous retrouver sur l'accueil de la « sandbox paypal ». Son aspect est identique à la page Paypal classique à l'exception d'un bandeau bleu en haut, vous indiquant que vous êtes connecté avec votre login (celui du compte developer.paypal).

Créer le compte vendeur, de test.

Nous allons commencer par créer le compte vendeur. Cliquez sur « ouvrez un compte » Sélectionnez votre langue et votre pays, puis cliquez sur « compte business ». Vous aurez ensuite un formulaire à compléter, vous demandant d'entrer des informations concernant votre société. Remplissez-le avec des informations fictives (mais cohérentes cela vous permettra de ne pas vous mélanger entre vos comptes acheteur et vendeur).

Il faudra ensuite compléter le formulaire concernant le compte Paypal du vendeur. Indiquez une adresse email (je vous conseille une adresse simple à retenir et indiquant bien que c'est le login du compte vendeur par exemple vendeur@domaine.com ) ainsi qu'un mot de passe. Terminez de compléter le formulaire et validez.

Vous verrez s'afficher une page vous indiquant qu'un email comportant un lien de validation vous a été envoyé. Inutile de vous précipiter sur votre boîte mail (surtout que vous n'avez pas forcément dû indiquer une adresse mail vous appartenant). Il faut retourner sur le « Paypal developer central » ( https://developer.paypal.com ) se connecter et cliquer sur « test Email ». Vous verrez apparaître le mail de confirmation envoyé par paypal ouvrez-le et copiez collez l'url indiquée dans votre navigateur. Entrez le mot de passe du compte vendeur et voilà vous venez de créer votre compte vendeur, de test.

Créer le compte acheteur, de test.

La démarche est la même que précédemment à part qu'il faut choisir un compte personnel. Je rappelle qu'il est intéressant d'indiquer comme email une adresse éloquente du type « acheteur@domaine.com »

Enregistrer une carte bancaire fictive

Connectez-vous à votre compte acheteur et cliquez sur « enregistrer une carte bancaire ». Un formulaire pré-rempli s'affichera, si le type de carte n'est pas indiqué choisissez « visa » et modifiez la date d'expiration pour qu'elle ne soit pas déjà dépassée, puis cliquez sur enregistrer.

Réglage du compte vendeur.

Nous allons ici, modifier quelques réglages du compte vendeur afin d'améliorer le confort et la sécurité tant des acheteurs que du vendeur.

Connectez-vous à votre compte vendeur , puis rendez-vous sur l'onglet « mon compte » ⇒ « préférences ». Cliquez sur « Préférences de réception de paiements » , dans la page qui s'affiche vérifiez que le bouton radio « Oui, bloquer les paiements multiples pour un numéro de demande de paiement unique » est bien coché, sinon cochez-le. Cette option permet d'éviter à vos clients de payer deux fois une facture à cause d'une mauvaise manipulation de leur part.

Retournez dans l'onglet « préférences » mais cette fois cliquez sur « préférences de réception de paiements sur le site ». Pour les options, « bloquer les paiements sur site marchand non cryptés » et « compte Paypal facultatif », cochez la case oui. La première option aura pour effet de refuser les paiements provenant de boutons Paypal non cryptés, ce qui vous protégera contre les fraudes. La seconde donnera la possibilité aux acheteurs d'utiliser soit leur compte Paypal soit leur carte bleue pour payer.

Voilà, vous avez désormais un compte acheteur capable de simuler des paiements en ligne et un compte vendeur capable de les recevoir.

Les certificats SSL.

Pour empêcher les personnes mal intentionnées de modifier les valeurs de vos commandes (et notamment le prix) il est nécessaire de crypter votre bouton « acheter maintenant ». Je vous passe les explications concernant le fonctionnement des clef ou des certificats, sachez simplement qu'il s'agit d'un système de cryptographie asymétrique. Vous trouverez plus d'explications sur wikipédia.

Créer votre clé privée et votre certificat public.

Paypal n'accepte que les certificats publics de type X.509. Pour créer votre clef et votre certificat, vous avez la possibilité d'utiliser OpenSSL ou d'aller sur ce site qui vous les fournira en quelques instants, en vous proposant de remplir un formulaire (évitez de donner la même adresse email que celle de votre compte vendeur pour ne pas prendre de risque).

Envoyer votre certificat à Paypal et récupérer le leur.

Une fois votre clef privée et votre certificat public récupérés, connectez-vous à votre compte vendeur. Aller dans « mon compte » ⇒ « préférences » ⇒ « Certificats de paiements sur site marchand ». Cette page vous montre les différents certificats publics que vous avez déjà envoyés à Paypal (pour l'instant à priori il n'y en a aucun). Cliquez sur « ajouter » puis sélectionnez votre certificat public (attention ! ne pas confondre avec la clef privée) et envoyez-le. Une fois l'upload terminé, Paypal vous affichera un ID de certificat correspondant au fichier que vous venez d'envoyer, notez-le quelque part nous en aurons besoin par la suite.

Toujours sur la même page vous verrez un bouton « télécharger », cliquez dessus pour récupérer le certificat public de Paypal.

Création du bouton crypté Paypal « payer maintenant ».

php
<?php
#Scrypt traduit et modifie par maniT4c
#Retrouvez le scrypt d'origine sur http://www.stellarwebsolutions.com/en/articles/paypal_button_encryption_php.php
 
#Defini le chemin de la racine pour OpenSSL
putenv("HOME=~");
 
# chemin vers la clef privee
$MY_KEY_FILE = "/mon_chemin/ma_clef.pem";
 
# chemin vers le certificat public
$MY_CERT_FILE = "/mon_chemin/mon_certificat.pem";
 
# chemin vers le certificat public de paypal
$PAYPAL_CERT_FILE = "/mon_chemin/paypal_cert_pem.txt";
 
# chemin vers openssl sur votre serveur
# pensez a verifier que openssl est active sur votre serveur avec la commande phpinfo()
$OPENSSL = "/usr/bin/openssl";
 
$form = array('cmd' => '_xclick',//indique a paypal qu'il s'agit d'un bouton payer maintenant
		'business' => 'vendeur@domaine.com',//adresse du vendeur (qui doit recevoir le paiement)
		'item_name' => '5 kilo de mandarine',  //nom de la commande
		'item_number' => '1', //numero de la commande
		'currency_code' => 'EUR', //Devise
		'amount' => '10', //montant a payer
		'lc' => 'FR', //langue de l'interface paypal
        'cert_id' => '72B3ENUM3MZGC', //identifiant de certificat donné par paypal
        'custom' => 'mes valeurs utiles pour le traitement',//variable permettant de recevoir diverses informations sur la page de retour
        'invoice' => '1',//valeur unique empechant les paiements accidentels (doit être differente pour chaque paiement)
        'charset' => 'utf-8',//Definit le charset utilisez
        'no_shipping' => '1', //Le client n'est pas invite a rentrer son adresse
        'cpp_header_image' => 'http://www.domaine.com/logo.jpg',//Adresse de l'image se trouvant en haut de la page de paiement (750x90px maxi) dans l'ideal cette image soit se trouver sur un serveur securisé pour eviter d'avoir un message indiquant que certaine parti de la page ne sont pas écurisée.
		'return' => 'http://www.domaine.com/boutique.php',//Adresse de retour lorsque l'utilisateur clique sur retouner a la boutique
		'cancel_return' => 'html://www.domaine.com/anul.php',//Adresse de retour pour les annulations
		'no_note' => '1',//Empeche l'utilisateur de rajouter des commentaires a son paiement.
		'notify_url' => 'http://www.manit4c.com/global/panier/ipn.php'//Url appelee par paypal lors du paiement, cette page permettra le traitement des commandes payees.
	);
	//on enregistre le formulaire crypte dans une variable
	$encrypted = paypal_encrypt($form);
 
//Cette fonction encrypte le formulaire il n'est pas necessaire de comprendre son fonctionnement
function paypal_encrypt($hash){
 
	global $MY_KEY_FILE;
	global $MY_CERT_FILE;
	global $PAYPAL_CERT_FILE;
	global $OPENSSL;
 
	if (!file_exists($MY_KEY_FILE)) {
		echo "ERROR: MY_KEY_FILE $MY_KEY_FILE not found\n";
	}
	if (!file_exists($MY_CERT_FILE)) {
		echo "ERROR: MY_CERT_FILE $MY_CERT_FILE not found\n";
	}
	if (!file_exists($PAYPAL_CERT_FILE)) {
		echo "ERROR: PAYPAL_CERT_FILE $PAYPAL_CERT_FILE not found\n";
	}
	if (!file_exists($OPENSSL)) {
		echo "ERROR: OPENSSL $OPENSSL not found\n";
	}
 
	//Assign Build Notation for PayPal Support
	$hash['bn']= 'StellarWebSolutions.PHP_EWP';
 
	$openssl_cmd = "$OPENSSL smime -sign -signer $MY_CERT_FILE -inkey $MY_KEY_FILE " .
                "-outform der -nodetach -binary | $OPENSSL smime -encrypt " .
                "-des3 -binary -outform pem $PAYPAL_CERT_FILE";
 
	$descriptors = array(
        	0 => array("pipe", "r"),
		1 => array("pipe", "w"),
	);
 
	$process = proc_open($openssl_cmd, $descriptors, $pipes);
 
	if (is_resource($process)) {
		foreach ($hash as $key => $value) {
			if ($value != "") {
				//echo "Adding to blob: $key=$value\n<br />";
				fwrite($pipes[0], "$key=$value\n");
			}
		}
		fflush($pipes[0]);
        	fclose($pipes[0]);
 
		$output = "";
		while (!feof($pipes[1])) {
			$output .= fgets($pipes[1]);
		}
		//echo "outpout=".$output;
		fclose($pipes[1]); 
		$return_value = proc_close($process);
		return $output;
	}
	return "ERROR";
};
?> 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
<head>
  <title>Paiement Paypal</title>
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  <meta http-equiv="Content-Language" content="fr" />
</head>
<body>
<!-- l'attribut action du formulaire doit rediriger vers www.sandbox.paypal.com pour la phase de test et vers www.paypal.com pour le réel -->
<form target="paypal" action="https://www.sandbox.paypal.com/fr/cgi-bin/webscr" method="post">
<input type="hidden" name="cmd" value="_s-xclick">
<!-- on affiche le formulaire crypté -->
<input type="hidden" name="encrypted" value="
<?php echo $encrypted; ?>">
<!-- Indique la source de l'image du bouton payer maintenant -->
<input type="image" src="http://images.paypal.com/images/x-click-but01.gif"
name="submit" alt="Effectuez vos paiements via PayPal : une solution rapide, gratuite
et sécurisée">
</form>
</body>
</html>

Création de la page de réception des données (IPN).

php
<?php
//email pour prévenir le vendeur
$mailTo="Moi <votreemail@domaine.com>";
 
//permet de traiter le retour ipn de paypal
// lire la publication du système PayPal et ajouter 'cmd'
$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";
 
//www.sandbox.paypal.com pour la phase de test
//www.paypal.com pour la phase réel.
$fp = fsockopen ('www.sandbox.paypal.com', 80, $errno, $errstr, 30);
 
// affecter les variables publiées aux variables locales
$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'];
 
$headerMail= "Content-Type:text/html;charset=iso-8859-1\n";//permet d'envoyer les message au format html
$headerMail.= "Content-Transfer-Encoding: 8bit\n";//permet d'envoyer les message au format html
$headerMail.="From: me";//pour répondre au message
 
//on prépare le texte de l'email
$textMail="
	<strong>Détail de la commande</strong><br />
	Commande numéro:".$item_number."<br />
	prix: ".$payment_amount." &euro;
";
 
if (!$fp) {
// ERREUR HTTP
} 
else {
	fputs ($fp, $header . $req);
	while (!feof($fp)) {
		$res = fgets ($fp, 1024);
		if (strcmp ($res, "VERIFIED") == 0) {
                        //on envoi un email pour prévenir qu'une commande a ete passee
			mail($mailTo,"Une nouvelle commande à été réglée",$textMail,$headerMail);
 
                        // C'est ici que vous devrez traiter la commande (enregistrement bdd etc..)
			// vérifier que payment_status est Terminé
			// vérifier que txn_id n'a pas été précédemment traité
			// vérifier que receiver_email est votre adresse email PayPal principale
			// vérifier que payment_amount et payment_currency sont corrects
			// traiter le paiement			
		}
		else if (strcmp ($res, "INVALIDE") == 0) {
			// consigner pour étude manuelle
		}
	}
	fclose ($fp);
}
?>

Test

Il ne vous reste plus qu'à afficher la page contenant le bouton Paypal, effectuer un paiement, et consulter votre messagerie pour voir si vous avez bien reçus l'email. Une foi que votre système sera totalement opérationnel il suffira de refaire la même chose mais cette foi en mode réel. Bon courage.

Ouvrir un compte paypal

Ouvrez un compte PayPal et acceptez dès aujourd'hui les paiements en ligne.

Générer rapidement des numéro de carte bancaire

La sandbox paypal a la facheuse tendance à ramer et à ne pas toujours vous générer automatiquement un numéro de carte bancaire. Voici une solution pour pallier à ce problème. Il suffit de créer une page html et à y copier le code suivant.

html4strict
<html>
<!--
générateur de numéros de cartes Visa à 16 chiffres
 
basé sur un code GPL de Graham King :
http://www.darkcoding.net/projects/credit-card-generator/
-->
<head>
<script type="text/javascript">
var visaPrefixList = new Array
( 
  "4539",
  "4556",
  "4916",
  "4532",
  "4929",
  "40240071",
  "4485",
  "4716",
  "4" 
);
 
function strrev(str)
{
  if (!str) return '';
  var revstr='';
  for (i = str.length-1; i>=0; i--)
    revstr+=str.charAt(i)
  return revstr;
}
 
function completed_number(prefix)
{
  var ccnumber = prefix;
 
  // generate digits
  while ( ccnumber.length < 15 )
    ccnumber += Math.floor(Math.random()*10);
 
  // reverse number and convert to int 
 
  var reversedCCnumberString = strrev( ccnumber );
 
  var reversedCCnumber = new Array();
 
  for ( var i=0; i < reversedCCnumberString.length; i++ )
    reversedCCnumber[i] = parseInt( reversedCCnumberString.charAt(i) );   
 
  // calculate sum    
 
  var sum = 0;
  var pos = 0;
 
  while ( pos < 15 )
  {
    odd = reversedCCnumber[ pos ] * 2;
 
    if ( odd > 9 )
      odd -= 9;
 
    sum += odd;
 
    if ( pos != 14 )
      sum += reversedCCnumber[ pos +1 ];
 
    pos += 2;
  }
 
  // calculate check digit
 
  var checkdigit = (( Math.floor(sum/10) + 1) * 10 - sum) % 10;
  ccnumber += checkdigit;
 
  return ccnumber;
}
 
function credit_card_number (prefixList)
{
  var randomArrayIndex = Math.floor (Math.random() * prefixList.length); 
  var randomPrefix = prefixList[ randomArrayIndex ];
 
  return completed_number (randomPrefix);
}
 
</script>
</head>
<body>
 
<h3>35 pseudo-cartes VISA :</h3>
 
<script type="text/javascript">
 
for (var n = 0; n < 35; n++)
{
  var visa = credit_card_number (visaPrefixList); 
  document.write ( visa + '<br/>');
}
 
document.write ( '<br/><h3>faire \'reload\' ...</h3><br/>');
 
</script>
 
</body>
</html>

Il vous suffira ensuite d'ouvrir cette page en local puis de copier l'un des code de CB proposez et de le coller dans le formulaire de paiement. PEnsez à rentrer une date d'expiration dans le futur et à mettre 000 comme cryptogramme visuel. Ps: j'ai trouvé ca sur le forum de paypal merci à l'auteur dont je n'ai plus le nom (dsl). Ps2: utilisez ces codes pour autre choses que la sandbox paypal ne vous ménera pas bien loin à part peut être en prison :)

Je viens de voir que IE6 n'aimait pas les commentaire dans le formulaire qui créé le bouton paypal. Donc je vous conseille de les supprimer sinon paypal risque de vous dire qu'il y à une erreur.

Discussion

eric, 25/10/2007 16:13:

je pense qu'il y a un problème a la fin du code je ne pense pas qu'un else if (qui devrait plutot elseif )fonctionne derriere une boucle while

.mais je peux me tromper…..

php
 
if (!$fp) {
 
// ERREUR HTTP
 
} 
 
else {
 
	fputs ($fp, $header . $req);
 
	while (!feof($fp)) {
 
		$res = fgets ($fp, 1024);
 
			//on envoi un email pour prévenir qu'une commande a ete passee
 
			mail($mailTo,"Une nouvelle commande à été réglée",$textMail,$headerMail);
 
 
 
                        // C'est ici que vous devrez traiter la commande (enregistrement bdd etc..)
 
			// vérifier que payment_status est Terminé
 
			// vérifier que txn_id n'a pas été précédemment traité
 
			// vérifier que receiver_email est votre adresse email PayPal principale
 
			// vérifier que payment_amount et payment_currency sont corrects
 
			// traiter le paiement			
 
		}
 
		else if (strcmp ($res, "INVALIDE") == 0) {
 
			// consigner pour étude manuelle
 
		}
 
	}
 
	fclose ($fp);
 
}
 
maniT4c, 26/10/2007 08:34:

Oups en effet j'ai oublier une ligne :) Je vien de la rajouter.

 
Koob, 28/10/2007 16:55:

Bonjour,

Merci beaucoup pour ce tutorial ;) ca m'a permis d'avancer dans mon projet. Par contre j'ai encore un pti souci, lorsque je clique sur le bouton “acheter maintenant” j'ai le message suivant sur l'adresse (https://www.sandbox.paypal.com/fr/cgi-bin/webscr), je suis en test actuellement :

“Certaines des informations requises sont manquantes ou incomplètes. Veuillez corriger les informations saisies, puis réessayer.”

merci d'avance pour votre aide.

 
maniT4c, 29/10/2007 08:20:

Il est possible que l'encodage de ton formulaire ne fonctionne pas. Verifit que ton serveur te permet d'utiliser openssl. Dans un premier temps tu peux mettre en place le paiement sans cryptage pour faire des test. Il suffit d'accepter les paiements non cryptés (à modifier dans les options paypal) et mettre directement ton formulaire sans le crypter. Si tu as toujours le même message cela signifie qu'en effet tu oublit un element (montant, etc..) il faut vérifier que les informations obligatoires sont bien présentes. Si tu n'as plus le message c'est bel et bien que le problème venait du cryptage du formulaire. En règle général si openSSL n'est pas accessible sur le serveur la variable $encrypted sera vide.

 
Koob, 29/10/2007 18:55:

Bonjour maniT4c,

Merci pour ton aide, j'ai bataillé hier comme un malade, j'ai donc testé la variable $encrypted qui était effectivement vide … donc j'ai bien analysé la classe paypal et j'ai fini par la testé en local (sous fedora) et là ca a marché ! J'ai contacté mon hébérgeur pour avoir plus d'infos et tu as trouvé, d'apres lui je n'ai pas accés à OpenSSL, donc je l'ai dans l'os :p La seul solution me dit-il, c'est de basculer sur du dédier.

Merci encore pour ton tuto et pour les infos de ce site en général.

Bonne continuation et merci encore.

 
maniT4c, 30/10/2007 09:02:

Personnellement j'ai tester sur un mutualisé chez OVH et j'avait accès a OpenSSL. (sur un 90plan de mémoire)

 
bastien, 02/11/2007 01:22:

Salut,

le script a l air bien mais je comprends pas où est le fichier “conf.php” qui est inclu dès la premiere ligne… j imagine que ca doit faire parti de ton code et en aucun cas du script… je me trompe ? en tous cas merci, car c'est pas Paypal qui va nous aider pour rendre les choses simples…

bonne nuit

Bastien

 
bastien, 02/11/2007 01:33:

Re,

en effet, tu as du oublier d'enlever le include('../conf.php') car il n'est pas présent dans le script d'origine.

Par contre, je suis en train d'améliorer le script pour qui il fonctionne avec un panier complet, contenant tous les articles, et pas seulement un seul article. Si jamais j'arrive à faire fonctionner ca, je pourrais te l'envoyer.

bonne nuit Bastien

 
maniT4c, 02/11/2007 09:34:

En effet le fichier conf.php fait parti de mon script perso, je l'ai retiré du code. pour ma part j'utilise le bouton payer maintenant de paypal sur le total d'un panier que j'ai développé précédemment.

 
bastien, 03/11/2007 15:55:

Slt,

je n'arrivais pas à faire fonctionner le script. En regardant sur l'original, j'ai vu que dans le formulaire, tu avais remplacé target=“_blank” par target=“paypal”. J'ai remis l'original et ca fonctionne. Si jamais d'autres personnes ont eu ce souci…

Par contre, je n'ai pas réussi à faire fonctionner ce cryptage sur un panier (_cart au lieu de _xclick). Paypal trouve une erreur dans le panier et je ne sais pas du tout où elle est. Le panier fonctionne bien sans cryptage mais si je passe la liste des objets dans le form que je vais crypter, ca fonctionne plus du tout. Si jamais qq a une idée.

bonne journée Bastien

 
maniT4c, 09/11/2007 17:11:

J'avoue ne jamais avoir essayé sur un panier (_cart) mais il me semblait que la méthode était assez similaire. Si tu trouve la solution a ton problème n'hésite pas à nous la faire partager. Bon courage.

 
Sébastien, 09/11/2007 14:48:

Il m'est impossible d'utiliser openssl, il me donne un code d'erreur. Je crois qu'il est innaccessible, comment je pourrais l'activer ? J'ai un serveur dédié.

 
maniT4c, 09/11/2007 17:14:

Dans un premier temps il faut que tu soit sur que tu n'as pas openSSL d'activer. Il suffit d'utilsier la commande phpinfo et tu devrait voir si openssl est activé. Ensuite pour le mettre en place sur ton serveur dédier, tu peux déja aller voir sur www.openssl.org pour avoir plus d'informations.

 
Sophie Josse, 20/11/2007 15:52:

Bonjour, Merci pour votre tutoriel très complet. Juste une petite question concernant le chemin pour ssl. Je suis sur un serveur mutualisé d'ovh, un 90 plan. Je ne sais pas trop quoi mettre. Merci d'avance pour votre réponse. Encore merci pour votre aide.

 
maniT4c, 21/11/2007 09:00:

Bonjour Sophie, Essai ce chemin ”/usr/bin/openssl”

 
Sophie Josse, 21/11/2007 10:49:

Bonjour ManiT4c, merci pour le chemin…. Ca semble passer. En revanche, ma page de test m'affiche bien le bouton paypal mais affiche également les 3 erreurs disant qu'il ne trouve pas les clefs : $MY_KEY_FILE $MY_CERT_FILE $PAYPAL_CERT_FILE Pourtant les chemins semblent bon. Quand je tape directement les adresses dans le browser, les clefs sont bien affichées. Peut etre faut -il les mettre dans un dossier particulier ? Merci d'avance, Sophie

 
sophie Josse, 22/11/2007 10:37:

J'ai trouvé la réponse à ma question : Il faut mettre le chemin relatif vers les clefs et non le chemin complet avec le http://...

En revanche dans la page ipn, au niveau traitement de données, si quelqu'un pouvait me donner une idée de script pour les actions suivantes, ce serait super sympa à lui. Merci d'avance, Sophie

C'est ici que vous devrez traiter la commande (enregistrement bdd etc..) vérifier que payment_status est Terminé

vérifier que txn_id n'a pas été précédemment traité vérifier que receiver_email est votre adresse email PayPal principale

vérifier que payment_amount et payment_currency sont corrects traiter le paiement

 
maniT4c, 28/11/2007 10:29:

Ce n'est pas évident de te donner un script tout fait cela depend de ta boutique de ta base de donnée, etc… Il faut surtout que tu comprenne ce que tu doit faire et que tu l'adapte à ta boutique. En thèorie tu as du sauvegarder la commande passé par le client dans une base de donnée (ou autre chose). Il faut alors vérifier que les informations renvoyée par paypal corresponde aux informations enregistré dans la base de donnée et agir en conséquence. (Valider la commande si tout est bon, ou avertir le propriétaire de la boutique qu'il y a eu un problème lors de la commande, etc..)

 
Pascal Magat, 28/11/2007 12:03:

Bonjour,

J'ai suivi le tuto à la lettre, mais voilà ce que j'ai quand j'essaie le bouton:

https://www.sandbox.paypal.com/fr/cgi-bin/webscr: Nous ne sommes pas parvenus à décrypter l'ID de certificat.

j'héberge le site aux US

Merci

 
maniT4c, 29/11/2007 09:49:

As tu vérifié que l'ID de certificat que tu as mis pour la variable 'cert_id' est bien l'ID que t'as fournis paypal lorsque tu as envoyé ton certificat public ?

 
chouchou, 13/12/2007 15:57:

Salut,

Vous avez réussi à le faire fonctionner avec un panier complet? Si quelqu'un à la solution, j'aimerais bien en profiter car là je patauge un peu…

Merci

 
maniT4c, 14/12/2007 08:21:

Je n'ai pas encore essayer et je ne pourrais pas le faire de suite. Mais dés que j'ai trouvé une solution je viendrait rédiger un article sur wiki. A moin bien sur que quelqu'un ai réussi et le courage avant moi de poster un article.

 
Florian, 19/12/2007 14:15:

Bonjour, Je suis étudiant en DUT Réseaux & Télécommunication et je suis en train de créer un site avec paypal. Donc merci beaucoup pour ce tuto.

J'ai juste un problème, quand je m'inscrit à cet adresse : https://developer.paypal.com , il ne me renvoit pas le mail de confirmation. Donc impossible de créer le compte et donc je ne peux pas insérer paypal pour mon site.

Merci d'avance pour votre aide.

 
maniT4c, 20/12/2007 08:35:

Bonjour Florian, J'ai eu le même problème que toi lors de mon inscription d'après le forum des developper paypal il fallait attendre.. mais 24h j'ai commencer à trouvé ca long alors j'ai tenter avec une nouvelle adresse et cette fois ca à fonctionné (j'ai jamais reçus mon premier mail de ma première inscription de toute facon). Donc le seul conseil que je peux te donner c'est d'essayer avec une autre adresse email. Bon courage !

 
Florian, 21/12/2007 20:12:

Bonjour,

Même avec une autre adresse, toujours rien recu.

Si quelqu'un peut m'aider svp.

Merci

 
maniT4c, 24/12/2007 13:35:

Je pense qu'il ne te reste plius qu'a essayer de les contacter et leur expliquer ton probleme. Vérifie bien quand m^me tes boite de spam etc…

 
danny coulombe, 27/12/2007 20:17:

Tres bonne explication. Je voudrais savoir si quelqun peut m'aider la dessus. je voudrais vendre des objets a un seul exemplaire avec un bouton paypal acheter maintenant. Est-il possible de désactiver ou de le rentre inutilsable apres que l'Acheteur eu acheter cette item. Je peut pas croire qu'il existe pas un moyen. merci de m'aider

 
maniT4c, 04/01/2008 12:14:

Essai en fixant une valeur unique pour chaque article que tu vent pour la variable invoice. Imaginons que tu vende une voiture si tu lui met comme “invoice” 2. Lorsque les clients arriveront sur paypal si le produit dont invoice vaut 2 à déja été acheter il refuseront le paiement.

Sinon l'autre solution est de te créé un système de gestion de stock qui affiche le bouton selon l'etat des stocks.

 
lon-va, 04/01/2008 00:33:

Bonjour,

Voilà j'utilise .. enfin j'essaye de faire marcher le bouton avec Wampsrv2 ssl etc fonctionne bien..

mais mon encrypted est vide.. je ne comprend pas pourquoi..

Mon openssl.exe est dans C:\wamp\bin\apache\apache2.2.6\bin donc j'ai mis $OPENSSL = “C:\wamp\bin\apache\apache2.2.6\bin”; faux ? et pour putenv(“HOME=~”); j'ai laisser comme ca.. faux aussi ?

j'en peux plus.. ca fait des heures que je suis dessus.. merci :)

 
maniT4c, 04/01/2008 12:11:

Verifi que openSSL est bien activé. De mémoire chez moi en local j'avait des problème avec openSSL j'ai rapidement décider de travailler directement sur mon serveur web.

 
lon-va, 04/01/2008 15:44:

oui oui il est activé.. je px pas encore utilisé sur un serveur web.

si qqn trouve.. merci

(j'ai aussi essayer de mettre le chemin relatif.. marche pas non plus..)

 
GeantVert, 15/01/2008 11:15:

Bonjour, j'ai le même souci que toi lon-va, donc je suis passé par l'outils paypal de création de bouton acheter maintenant. Cela marche presque … lorsque je clique 1ere page de paypal s'affiche avec soit on se connecte en membre paypal? soit on remplit un formulaire. Je me loggue (via SandBox), j'ai le récapitulatif de mon achat, et la j'appuie payer, et puis je tombe sur une page qui me demande de réessayer ou de retourner à l'index.Si quelqu'un à une idée.

 
joss, 20/02/2008 17:16:

Hello Comme les autres, je te remercie pour la rédaction de cet article, trés clair, mais bien entendu, j'ai un souci Je travaille sur la Sandbox. Comme tu le conseilles, j'obtiens certif et clé par le biais du site : http://www.stellarwebsolutions.com/certificates/stellar_cert_builder.php Et je télécharge le certif paypal sans oublier de copier le cert_id obtenu.

bien.

J'ai bien tout checké, dans mon certif perso, j'ai bien la même adresse email que celle du compte vendeur confirmé sur la Sandbox. Mais je tombe en permanence sur cette erreur lors du test :

Nous ne sommes pas en mesure de traiter cette transaction en raison d'un problème concernant l'adresse email PayPal fournie par le vendeur. Veuillez contacter le vendeur afin de résoudre ce problème. Si ce paiement (…)

Aurais-tu des indices de résolution concernant ce message d'erreur ?? J'ai tout bien respecté, et je dois passer en prod réelle le plus rapidement possible, je craque… (Note : j'avais installé openssl sur mon apache pour créer les clé et certif au nom de mon client, et je les garde sous le coude pour réaliser l'opération en réel dés que tout sera ok)

Merci d'avance car là, j'en peux plus…

joss

 
emile, 20/02/2008 21:43:

salut joss

contacte moi ici http://www.informatique-rodez.fr/tutorial-paypal-presentation/ je pourrai peut être t'aider car je viens moi aussi de finir d'installer paypal sur un site

 
emile, 21/02/2008 11:55:

joss pour t'aider sur le site en question va à la rubrique contact et donne moi un email valide! pour ke je puisse t'aider

 
emile, 05/03/2008 17:25:

un autre tuto pour cyrpter le bouton http://www.informatique-rodez.fr/cryptage-dynamique-en-php-des-boutons-paypal/

 
jerem, 30/03/2008 23:07:

bonjour à tous,

j'ai suivi les différents tuto, et j'ai un soucis au niveau de l'IPN, j'ai testé sur sandbox et lorsque le client paye ma base ne se met pas à jour, alors que le codre est bon je lai testé, j'ai juste l'impression que paypal n'envoie pas les données sur ma page ou est situé mon script IPN.

Quelqu'un a une idée?

J'ai inséré le lien dans l'option IPN des préférences du compte du vendeur.

 
maniT4c, 01/04/2008 11:42:

As tu essayé de lancer directement ta page ipn ? En mettant en dur les infos que devrais te renvoyer paypal. Si t'as BDD est mises à jour c'est déjà une bonne chose. Ensuite tu peux momentanément remplacer ton code de mise à jour de ta bdd par un code qui t'enverra un email contenant les infos renvoyé par paypal ça te mettra peut être sur la voie d'une eventuelle erreur de ta part. Perso lorsque j'ai eu des ptit problème avec mon script ipn je me suis envoyé des emails pour chaque étape (un email pour vérifier les données renvoyées par paypal, un email pour vérifier si l'enregistrement dans ma BDD avait fonctionné, etc..) c'est un peu fastidieux mais difficile de faire autrement. Ou alors tu te créé un fichier de log dans lequel tu écris les infos qui t'intéresse. C'est certainement plus rapide que la méthode de l'email.

 
spirit, 16/04/2008 15:49:

Serait-il possible selon toi de remplacer l'appel externe à openssl par un appel php direct (présenté sur php.net http://www.manuelphp.com/php/ref.openssl.php) ? Ca pourrait améliorer les perfs (noter que je n'ai pas - encore - testé le bout de code que tu donnes et je ne sais donc pas si c'est gourmand en temps de cryptage et donc de chargement).

En tous cas, très bon tuto, merci!

 
spirit, 16/04/2008 16:08:

Ah autre chose :-) Lors de la réponse IPN, dans le bout de code while (!feof($fp)) { $res = fgets ($fp, 1024);

Peut on une fois la chaine VERIFIED ou INVALID trouvée arrêter la boucle ?

 
Guillaume, 21/04/2008 10:54:

Bonjour, j'ai un petit problème, au niveau du bouton. Lorsque je clique sur le bouton je suis redirigé vers sandbox.paypal.com mais un message s'affiche, Je cite:“Un problème est survenu lors de vérification de la signature de votre commande sécurisée. Veuillez contacter votre vendeur” D'où peut venir ce problème? Merci. Sinon super tuto merci à toi

 
Danis, 02/05/2008 20:18:

Bonjour, j'ai suivi les étapes à la lettre, maintenant je suis bloqué, je ne sais pas comment créer le bouton paypal en l'introduisant dans mon site. J'ai de la difficulté à comprendre comment on fait. Merci.

 
comprendre le code, 03/06/2008 11:23:

bonjour je souhaiterais bien comprendre le code et ne pas faire un copier coller sans rien comprendre pourriez vous m'aider ?? alors voila ma question. a quoi sert le : fsockopen ? on recupere les varaible via post , pourquoi a ton besoin de se connecter au serveur pay pal. je crois que c pour leur renvoyer ce que nous avons recu c ca ? a quoi ca sert ? merci pour vos explications

 
help, 03/06/2008 16:08:

j ai créé un les comptes business et acheteur.

j ai créé mon fichier NIP.PHP

quand je simule un achat mon fichier php est bien appelé ….

j ouvre la connection →$fp = fsockopen ('www.sandbox.paypal.com', 80, $errno, $errstr, 30);

j envoie la requette : fputs ($fp, $header . $req);

mai la reponse de paypal n est jamais validate…. j ai alors decide d enregister la reponse de paypal pour comprendre

j ai enregsitre dnas une base $res —> $res = fgets ($fp, 1024);

voila ce que j ai :

HTTP/1.1 307 Temporary Redirect

Server: NS8.0.45.4

Location: https://www.sandbox.paypal.com/cgi-bin/webscr

Content Type: text/html

Cache Control: private

Connection: close

<head><body> This object may be found <a HREF=“https://www.sandbox.paypal.com/cgi-bin/webscr”>here</a> </body>

pourriez m expliquer pour quoi j ai cette reponse et pas un VALIDATE

merci merci a celui qui pourra m aider

 
Phil, 03/07/2008 09:52:

Bonjour, Merci pour cette aide précieuse, parce que côté explications chez Paypal, c'est imbuvable !!! J'ai juste un petit soucis, c'est que j'ai moi aussi le message : “Nous ne sommes pas parvenus à décrypter l'ID de certificat”. J'ai pourtant tout suivi à la lettre, mais rien à faire. Merci d'avance pour votre aide. Phil

 
VaN, 10/07/2008 19:55:

Bonjour,

Tout d'abord merci pour ce tuto bien fait, sur lequel je suis tombé après avoir bataillé avec la doc super mal foutue de paypal.

J'ai tout suivi à la lettre, crée un compte paypal, crée les comptes vendeur et acheteur, ajouté le script et le bouton crypté. Lorsque je clique dessus, il m'ammène vers https://www.sandbox.paypal.com/fr/cgi-bin/webscr mais ce n'est pas du tout la page de paiement, mais la page d'accueil de la SandBox Paypal : http://wir3d.net/bordel/paypal01.jpg

le code de mon formulaire est le suivant :

<form target=“_blank” action=“https://www.sandbox.paypal.com/fr/cgi-bin/webscr” method=“post”>

  
  <!-- on affiche le formulaire crypté -->
<input type="hidden" name="encrypted" value="
<?php echo $encrypted; ?>">
<!-- Indique la source de l'image du bouton payer maintenant -->

	<div id="actions">
	<a href="index.php" id="back"><img src="img/iconBack.gif" alt="" border="0" />Back to the shop</a>
      <!-- <input type="image" src="img/iconPaypal.gif" name="submit" id="paypal" /> -->
	<input type="image" src="img/iconPaypal.gif" name="submit" id="paypal" alt="Effectuez vos paiements via PayPal : une solution rapide, gratuite et sécurisée">
  </div>
  
  </form>
 
Mika, 16/09/2008 17:20:

Intéressant … Je garde ça sous la main !

 
romain, 22/09/2008 18:53:

Salut à tous, super tuto, sauf que j ai un petit soucis, il m est impossible de crypté de le bouton paypal

J ai bien l openssl sur le serveur et tout, mais toujours en erreur :

Voici le message :

ERROR: MY_KEY_FILE /*/.pem not found ERROR: MY_CERT_FILE /*/.pem not found ERROR: PAYPAL_CERT_FILE //***pem.txt not found ERROR: OPENSSL /usr/bin/openssl not found

une idée?

 
Aurore Ballé, 10/10/2008 12:36:

Bonjour !

Merci pour ce fabuleux tuto. Un seul soucis : dans votre tuto, vous ne parlez pas de la création dans “test account”, vous dites qu'il y a un lien “Cliquez sur le lien « enter sandbox » situé en haut à droite” sauf que je pense que paypal a changé ça…

J'ai donc cliqué sur “Manually create accounts.” ce qui me semble le plus proche de votre lien. J'ai créer un compte vendeur, j'ai recu le mail de test et j'ai validé le compte. Je recommence la manip avec un compte acheteur simple dans un premier temps puis “premier” dans un second temps, rien n'y fait, je ne recois pas le mail de confirmation !

Est ce normal ?

 
chris, 16/11/2008 20:36:

Bonsoir j'essaie de mettre en place le module de paiement de paypal http://www.solutionspaypal.fr/Pages/Telechargez-le-module-OSCommerce-PayPal.html malgre ce tuto, je n'y arrive pas.

j'ai toujours cette erreur malgre la mise en place des certificats et des cles :

An error occured when we tried to contact PayPal's servers.

(_disabled_) ()

je ne sais plus trop ou chercher …

de plus faut il que openssl soit active pour que cela fonctionne ?

merci pour votre aide cdlt CB

 
Maxime, 01/12/2008 22:21:

Le cryptage semble bien fonctionnez mais cela me renvoie toujours l erreur suivante

L'adresse email de l'entreprise ne figure pas dans le grand objet binaire crypté. Veuillez contacter votre vendeur.

je regarder sur le web et j ai rien trouver la dessus , quelqu un aurait eu ce probleme ??

pour me repondre meduim@nikkenqc.com

 
julien, 14/10/2009 19:47:

Slt jai le mot souci que tu as eu concernant la mise en place d'un paiement paypal. Jai aussi ce meme signal d'erreur : L'adresse email de l'entreprise ne figure pas dans le grand objet binaire crypté. Veuillez contacter votre vendeur.

Peux-tu m'aider stp ? Merci

Julien

 
Yaku, 22/12/2008 22:59:

J'ai passé beaucoup d'heures à chercher des infos et des tutos sur l'intégration en environnement test de Paypal… Et, je suis tombée sur cette page! J'ai suivi scrupuleusement toutes les instructions et tout à fonctionner du premier coup!

Merci beaucoup ;-)

 
Cyril, 03/01/2009 22:40:

Bonsoir, après bien des essais, j'ai trouvé que le code suivant ne fonctionne pas : if (strcmp ($res, “VERIFIED”) == 0) car en fait la réponse de paypal ressemble plutôt à cela : HTTP/1.1 200 OK Date: Sat, 03 Jan 2009 15:31:35 GMT Server: Apache Set-Cookie: cwrClyrK4LoCV(…)1230996695; domain=.paypal.com; path=/ Set-Cookie: cookie_check=yes; expires=Tue, 01-Jan-2019 15:31:35 GMT; domain=.paypal.com; path=/ Set-Cookie: navcmd=_notify-validate; domain=.paypal.com; path=/ Set-Cookie: navlns=0; expires=Fri, 29-Dec-2028 15:31:35 GMT; domain=.paypal.com; path=/ Set-Cookie: Apache=10.191.114.13.1230996695131150; path=/; expires=Fri, 21-Nov-02 09:03:19 GMT Vary: Accept-Encoding Transfer-Encoding: chunked Content-Type: text/html; charset=UTF-8

8 VERIFIED 0

Donc en définitive, il suffit de vérifier que la chaine VERIFIED existe ou pas : if (substr_count($res, “VERIFIED”)>0) …et là ça marche à tous les coups !

 
jacksparo, 14/02/2009 23:52:

slt je n'arrive a rien avc les 2 scripts : aucune mise a jr de la bdd, aucun renvoi de courrier ds ma boite mail. Pourtant je me connecte a paypal et je simule mon achat. Mon compte vendeur è configuré pr accepter des paiments nn cryptés, et g activé le renvoie d'ipn. je réalise mes test sous easyphp. Voici mes scripts, kelk1 pourè me dir ce ki cloche. merci

achat.html :

<body> <form method=“post” action=“item.php”>

<table>

    <!--DWLayoutTable-->
    <tr> 
      <td width="125"><b>N°siret/siren :</b></td>
      <td width="267"><input type="text" name="numsiret" maxlength="30" value=""></td>
    </tr>
    <tr> 
      <td><b>Raison sociale :</b></td>
      <td><input type="text" name="raison" maxlength="30" value=""></td>
	<td><input type="submit"></td>
    </tr>

</table> </form> </body>


item.php :

<body> <?php

  $identif = $_POST['numsiret'];
  $nom = $_POST['raison'];

?> <form action=“https://www.sandbox.paypal.com/???cgi-bin/webscr” method=“post”>

<input name=“cmd” value=“_xclick” type=“hidden” />

<input name="business" value="exemple_biz@gmail.com" type="hidden" /> 
<input name="item_name" value="Abonnement mensuel" type="hidden" /> 

<input name="amount" value="25.00" type="hidden" /> 
<input name="shipping" value="0.00" type="hidden" /> 
<input name="no_shipping" value="0" type="hidden" />
 
<input name="custom" value="<?php echo $identif."/".$nom;?>"   />

<input name="return" value="http://193.248.75.211/confirm_part.php" type="hidden" /> 
<input name="cancel_return" value="http://193.248.75.211/projet2/confirm_part.php" type="hidden" /> 
<input name="notify_url" value="http://193.248.75.211/projet2/test2/ipn.php" type="hidden" /> 

<input name="no_note" value="1" type="hidden" /> 
<input name="currency_code" value="EUR" type="hidden" /> 
<input name="tax" value="0.00" type="hidden" /> 
<input name="lc" value="FR" type="hidden" /> 
<input name="bn" value="PP-BuyNowBF" type="hidden" /> 
<input src="https://www.paypal.com/fr_FR/FR/i/btn/btn_buynow_LG.gif" name="submit" alt="Effectuez vos paiements via PayPal" border="0" type="image" /><img src="https://www.paypal.com/fr_FR/i/scr/pixel.gif" border="0" height="1" width="1" /> 
</form>

</body>


ipn.php :

<body> <?php email pour prévenir le vendeur $mailTo=“exemple@gmail.com”; permet de traiter le retour ipn de paypal lire la publication du système PayPal et ajouter 'cmd' $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”; www.sandbox.paypal.com pour la phase de test www.paypal.com pour la phase réel. $fp = fsockopen ('www.sandbox.paypal.com', 80, $errno, $errstr, 30); affecter les variables publiées aux variables locales $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']; $custom = $_POST['custom']; $headerMail= “Content-Type:text/html;charset=iso-8859-1\n”;permet d'envoyer les message au format html $headerMail.= “Content-Transfer-Encoding: 8bit\n”;permet d'envoyer les message au format html $headerMail.=“From: me”;pour répondre au message on prépare le texte de l'email $textMail=” <strong>Détail de la commande</strong><br /> Commande numéro:”.$item_number.”<br /> prix: ”.$payment_amount.” &euro; ”; if (!$fp) { ERREUR HTTP } else {

fputs ($fp, $header . $req);
while (!feof($fp)) {
	$res = fgets ($fp, 1024);
	if if (substr_count($res, “VERIFIED”)>0) {
                      //on envoi un email pour prévenir qu'une commande a ete passee
		mail($mailTo,"Une nouvelle commande à été réglée",$textMail,$headerMail);
                      // C'est ici que vous devrez traiter la commande (enregistrement bdd etc..)
		// vérifier que payment_status est Terminé
		// vérifier que txn_id n'a pas été précédemment traité
		// vérifier que receiver_email est votre adresse email PayPal principale
		// vérifier que payment_amount et payment_currency sont corrects
		// traiter le paiement
		

$user=“root”; $host=“localhost”; $password=””; $database=“tst”;

variable pour garder la valeur du premier enregistrement catégorie pour l'affichage $connexion = mysql_connect($host,$user,$password) or die (“Connexion au serveur impossible”); mysql_select_db($database,$connexion); $tableau = explode(”/”,$custom); $Member_ID=$tableau[0]; $nom_et=$tableau[1]; $vendeur=“insert into entreprise(identifiant, raison_sociale) values('$Member_ID', '$nom_et')”; mysql_query($vendeur); } else if (strcmp ($res, “INVALIDE”) == 0) { consigner pour étude manuelle

	}
}
fclose ($fp);

} ?> </body>

 
moi, 02/03/2009 18:04:

Bonjour,

Merci pour le code. Par contre j'ai un souci avec ipn.php, la simulation de paiement se passe correctement mais aucun mail n'est envoyé et le traitement sql demandé n'est pas fait. Si j'ai bien compris c'est paypal qui appelle le script mais moi comment je peux voir ce qui ne va pas sachant que je n'ai pas de message d'erreur qui s'affiche?

 
Dede, 04/03/2009 14:56:

Bonjour,

merci pour cette aide, j'ai déjà trouver un tuto similaire sur un autre site mais cela ne fonctionne pas ? Ni en bouton simple et encore moins avec un 'cmd' ⇒ '_cart'

Et il possible de crypter son bouton panier perso?

Merci

Dede

 
Inazo, 26/03/2009 17:46:

Bonjour,

Moi j'ai un soucis aussi lors de l'intégration. Mais avant méga merci pour le tuto car Paypal et leurs doc…

Donc mon soucis est le suivant, j'ai se message d'erreur :

“L'adresse email de l'entreprise ne figure pas dans le grand objet binaire crypté. Veuillez contacter votre vendeur.”

Une idée ?

Cordialement,

 
Emilie, 08/05/2009 15:00:

je ne sais pas si cela a été dit, mais tite erreur : il faut mettre foreach ($_POST as $key ⇒ $value) {

    $value = urlencode(stripslashes($value));
    $req .= "&amp;$key=$value";
    }

au lieu de foreach ($_POST as $key ⇒ $value) {

    $value = urlencode(stripslashes($value));
    $req .= "&$key=$value";
    }

et ui il manque juste le amp; perso ca me faisait une jolie erreur : Erreur 405 - Méthode de requ&eacirc;te non autorisée

The method specified in the Request-Line is not allowed for the resource identified by the Request-URI. The response MUST include an Allow header containing a list of valid methods for the requested resource.

voilà, si ça peut aider, perso j'y ai passé ma matinée :( à comparer trois tuto différents, et chercher les bugs de chacun.

par contre même si je n'ai plus d'erreurs visibles maintenant, je ne comprend pas bien à quoi sert le script avec l'ipn, d'après ce que j'ai compris il est censé renvoyé un mail à l'adresse que l'on spécifie avec recapitulatif de qui a acheté et quoi et a combien. mais je ne recois aucun mail, alors que sur les comptes de test paypal la transaction est bien effectuée des deux cotés. merci de votre aide. Emilie

 
Maxime, 16/09/2009 16:42:

Bonjour !

Super Tuto, j'ai réussi à mettre assez simplement en place un bouton Paypal :)

Je n'ai pas eu le courage de lire tous les com' mais j'apporte ma petite pierre à l'édifice: Pour créer un panier il faut: …

	'item_name_1' => 'mon item 1', 
	'amount_1' => '10',
	'item_name_2' => 'mon item 2',
	'amount_2' => '20',
	'upload' => 1,

sans oublier de modifier 'cmd' ⇒ '_cart' !

Votre bouton paiement direct se tranforme alors en bouton paiement panier :)

Bon courage à tous !

 
Frederik, 07/10/2009 20:42:

Super tuto, en revanche je n arrive pas a transformer le bouton paiement en bouton paiement panier. Paypal refuse mon panier! Avez vous un exemple qui fonctionne? merci!

 
julien, 14/10/2009 19:42:

Bonjour,

J'ai ce message d'erreur, quelqu'un peut-il m'aider svp ???

“L'adresse email de l'entreprise ne figure pas dans le grand objet binaire crypté. Veuillez contacter votre vendeur.”

Merci beaucoup. Julien

 
Megartaud, 04/12/2009 13:13:

Salut et merci pour ce super tuto par contre, j'ai un probleme pour le configurer : le fameux “Certaines des informations requises sont manquantes ou incomplètes. Veuillez corriger les informations saisies, puis réessayer.”

apres une longue lecture des différents postes, je suis allé tester les différentes variables, et il se trouve effectivement que $encrypted est vide.. seulement mon OPENSSL a l'air detre a la bonnne place (pas de message d'erreur)

Vous avez une idée ? je suis en mutualisé chez 1and1

Merci d'avance pour votre aide !

 
Thierry, 07/01/2010 18:03:

Bonjour.

Bonjour et bonne année 2010 à tous.

Je suis en train de tester mon premier site avec un bouton paypal “Acheter maintenant”. Lorsque je suis en mode test sur mon pc de développement et que je clic sur le bouton “acheter maintenant” je suis redirigé sur le site de paiement de paypal et tout est normal. Lorsque je fais la même chose sur mon site déployé en production, lorsque je clic sur le bouton, j'arrive sur la page d'accueil du site paypal. Comme si les paramètres n'étaient pas passés. Quelq'un saurait de quoi cela peut-il provenir ?

Merci pour votre aide.

Thierry

 
Olivier, 09/01/2010 14:29:

Ce n'est pas un problème avec l'adresse du compte 'business' ? n'as tu pas fait une erreur a ce niveau ??

 
seg, 22/04/2010 17:10:

Bonjour,

Ce tutoriel est très bien. Mais je n'arrive pas à trouver l'info que je cherche ou alors je suis pas doué pour chercher ;). Pour l'instant je n'ai pas fait la partie cryptée du bouton mais j'arrive à passer mes infos et avoir un retour avec insertion dans ma base. Le hic, je suppose que l'on doit se cantonner à la liste de variable qu'ils nous font passer. Moi je peux avoir 1 comme 10 articles à passer. Actuellement ils sont enregistrés en session mais comment faire passer plusieurs articles quand on n'a pas un nombre déterminé à l'avance ? me faut-il forcément passer par une table temporaire dans laquelle j'enregistrerai tous mes articles et que je validerai une fois la commande payé par paypal ?

Est ce la seule solution ?

Merci par avance pour vos réponses

 
SCISTRI, 11/05/2010 22:53:

seg, j'ai le même problème que toi, as-tu trouvé une solution ?

 
paypal compliquer, 15/05/2010 22:24:

Bonjour, je me lence dans le drop schipping.je voudrais savoir si c 'est la peine de prendre l option acheter maintenant? merci

 
Neossj, 17/06/2010 08:13:

Seg, perso ce que je fais :

lors de l'envoi du formulaire à paypal tu met un <input type=“hidden” name=“custom” value=“id_du_membre, et tout autre infos que paypal nous renverra par la suite une fois le paiement effectué” />

Si ta plusieurs valeur à affecté à “custom” sépare le tout par des ”-” ou “*” et par la suite tu les traitera avec un explode en php sur ta page ipn Ensuite une fois que j'ai l'id du gars qui a payé et que je suis sûr qu'il a payé, je lui met un “1” dans la bdd et si le gars à un “1” bah je fais ce qu'il faut pour lui et je remet ce “1” à “0”

Voila désolé si j'ai mal expliqué x) mais paypal facilite pas les choses. D'ailleurs j'en profite pour poser une autre question. Peut-on indiquer à paypal que notre page ipn c'est une adresse du style : http://test.com?traitement=paypal Car moi j'ai pas trouvé d'autre moyen que d'isoler ma page ipn, et donc de pas partager les mêmes sessions php qui était en cours, ainsi que les includes etc…

 
service paypal, 29/08/2010 11:15:

kalou.anges9@gmail.com

 
deli, 15/12/2010 19:25:

Bonsoir, un grand merci pour le tuto mais je n'arrive pas a crypter le bouton…

Et pourtant je prense que ssl est bien activé sur mon wampserver…

Auriez vous un tuto pour activer correctement openssl sur wamp ???

Merci d'avance

 
plumyop, 11/01/2011 17:34:

Bonjour,

Merci pour le tuto. J'ai comme beaucoup visiblement un problème avec openSSL. J'ai tenté un phpinfo() pour vérifier s'il était activé. Le résultat ne me semble pas clair. En effet, je reçois un énorme tableau avec plein de données, et je sais pas trop ou il faut regarder et surtout, je ne sais pas comment l'inteprêter. En tous cas, il n'y a qu'un seul endroit ou je vois qu'on parle de openSSL et il y est dit: cURL Information libcurl/7.19.5 OpenSSL/0.9.8k zlib/1.2.3 J'avoue que je ne sais pas très bien comment interprêter cela. Dois-je en déduire que openSSL est opérationel? Si oui, comment obtenir le chemin du fichier openssl? Si vous voulez plus d'infos sur mon phpinfo, voici le résultat de la commande: http://www.readyhome.com/pay/testssl.php

D'avance merci.


Je vais y arriver, je vais y arriver, je vais y arriver :)

 
ssm2017, 12/01/2011 06:02:

attention :

il y a 2 fois le champ “cmd”.

la premiere fois (celui chiffré), sa valeur doit etre : _xclick

et celui en clair, sa valeur doit etre : _s-xclick

 
ssm2017, 18/01/2011 09:24:

et le lien qu'il faut avoir pour eviter de galerer avec la clef ssl : https://cms.paypal.com/us/cgi-bin/?cmd=_render-content&content_ID=developer/e_howto_html_encryptedwebpayments#id08A3I0PD04Y

 
MrB, 21/01/2011 23:18:

Tout d'abord merci pour le tuto d'une grande, par contre j'ai une erreur toute con mais je trouve pas la solution, j'ai fait les certificats et j'ai récup l'ID que fournit paypal, mais quand je fais un essai sur le site paypal ça me marque une erreur comme quoi il reconnait pas l'id.

j'ai essayer avec un autre certif même problème….. la j'ai plus trop d'idée … si on peut m'aider, d'avance merci.

 
ugo, 05/03/2011 11:39:

Bonjour Pour le moment je n ai pas de problème : juste un grand merci pour ce tuto

 
Willink, 29/03/2011 22:18:

Nickel, c'est du tout bon sur un serveur 1and1, juste une petite question, comment on est censé controler le $txn_id ?

Doit-on l'enregistrer en base, ou dans un fichier, pour ensuite le ressortir lors de la commande suivante afin de faire la comparaison avec le nouveau ?

 
Nico, 18/05/2011 09:41:

Bonjour Pas de problème pour générer la clef mais une rediriger sur le site Paypal j'ai : ” Nous ne sommes pas parvenus à décrypter l'ID de certificat. ” J'ai refait l'opération en prenant un nouvel ID de certificat et toujours la même chose.

question con : Pour le formulaire en ligne du site 'stellarwebsolutions.com', faut il faire attention à ce que l'on remplit ou ça n'a aucunes incidences ?

Si quelqu'un sait d'où ça vient, je suis preneur, car je n'ai rien trouvé pouvant m'aider à sortir de cette impasse.

 
Fabien, 07/07/2011 08:58:

Bonjour, merci beaucoup pour ce tuto.

Pour des raison de sécurité mon hébergeur ne permet pas l'exécution de binaire tiers. La fonction proc_open(); est désactivée.

Cependant le module openssl pour php est disponible, sauriez vous comment faire le cryptage du formulaire mais en utilisant la commande openssl_open ? Ou alors connaitriez vous un tuto qui me permettrait de me familiariser avec la chose et ainsi adapter le code ?

Merci par avance pour votre aide :)

 
Fabien, 08/07/2011 12:27:

Finalement j'arrive a peu près à m'en sortir avec le SDK paypal (https://cms.paypal.com/us/cgi-bin/?cmd=_render-content&content_ID=developer/library_download_sdks). Ce sont des scripts qui utilisent les fonctions openssl de PHP.

Par contre petite interrogation, pour le bon fonctionnement du script je dois renseigner le mot de passe de mon certificat privé (voir doc http://php.net/manual/fr/function.openssl-pkcs7-sign.php) , alors que dans votre tuto ça n'apparait pas. Est ce normal ?

 
Sébastien, 26/08/2011 17:13:

Bonjour,

Merci de partager votre généreux tutorial ツ

J'ai tout suivi à la lettre, le cryptage s'éfféctue bien mais la Sandbox me retourne l''erreur suivante:

Nous ne sommes pas parvenus à décrypter l'ID de certificat.

J'ai bien sur essayer de refaire la clé ainsi que le certificat et l'identifiant de certificat donné par paypal est bien celui de la clé mais rien n'y fait…

Est ce que vous avez déjà eu ce problème la? et si vous comment l'avez vous debbuguer?

Autre question, si l'encryptage se fait cela veux dire que le chemin vers OpenSSL est bon?

Je suis prêt à aider en retour celui qui m'aidera à sa juste valeur

Merci d'avance

 
FAGET, 24/11/2011 02:27:

Bonjour et merci pour les infos ci dessus. J'ai un petit soucis avec le callback.

$fp = fsockopen (“$test_url”, 80, $errno, $errstr, 30); if ( $fp ) {

 fputs ($fp, $header . $req);
 while (!feof($fp))
 {
      $res = fgets ($fp, 1024);
      if (strcmp ($res, "VERIFIED") == 0)
{
           ....
      }
 }

} Je ne passe pas dans la boucle : if (strcmp ($res, “VERIFIED”) == 0 )… Après affichage de ma variable $res , cela affiche : Location: https://www.sandbox.paypal.com et rien d autre … En faisant sauter ce test cela marche … mais bon j aimerai comprendre pourquoi il ne rentre pas dans ma boucle …

Merci d'avance.

 
BBFUNK01, 01/12/2011 21:29:

Hello,

Comme beaucoup l'ont déjà dit ici je le redis : merci à l'auteur du tuto pour ce partage, ça m'enlève une épine du pied !

J'ai donc utilisé le script et configuré pour mon utilisation, tout marche à merveille hormis la notification instantanée de paiement : je ne reçois aucun e-mail malgré que les transactions soient bien prises en compte dans ma sandbox. Visiblement d'autres ont le même souci que moi, quelqu'un aurait-il une solution ?

Merci d'avance également :)

 
BBFUNK01, 01/12/2011 23:53:

Re-Hello,

en fait j'ai le même problème que FAGET : lorsque je récupère les valeurs de $res je n'obtiens à aucun moment un statut “VERIFIED”, mais seulement quelques infos de ce genre :

Content-Length: 0 Connection: close Server: BigIP Location: https://www.sandbox.paypal.com

Vous avez une idée ?

BBFUNK01

 
sandrine, 08/12/2011 09:10:

bonjour j'ai un compte payal sur ebay et je voudrais metre une annonce sur le bon coin avec le lien de mon compte payal mais je ne sais pas comment faire par contre j'ai fait un compte business il ont suclassé mon compte normal en business et il m'ont envoyer un code qui s'apelle email payal c'est un numero es ca que je doit mettre comme lien pour mes acheteurs ?

merci d'avance

 
Cyril, 08/12/2011 09:36:

Bonjour,

Je constate exactement le même problème que BBFUNK01 & FAGET pour le contrôle sur ” $res ” qui retourne tout sauf 'VERIFIED' et 'INVALID'.

Si quelqu'un a déjà rencontré ce problème et a une solution :-)

Cordialement

 
toto, 10/12/2011 13:57:

Bonjour, J'ai le meme probleme que Cyril et BBFUNK01 et FAGET. Si je passe par www.sandbox.paypal.com, il nous redirige vers https et on recoit donc ni VERIFIED ni INVALID : res 0 = 'HTTP/1.0 302 Found ' res 1 = 'Location: https://www.sandbox.paypal.com ' res 2 = 'Server: BigIP ' res 3 = 'Connection: close ' res 4 = 'Content-Length: 0 '

Si je passe par ssl://www.sandbox.paypal.com je ne passe pas la connexion au socket : errno = 0 et errstr = '' (donc res est vide)

Quelqu'un a t'il resolu le probleme ?

 
Salvatore, 03/01/2012 19:58:

En modifiant l'adresse pour le fsockopen Cela fonctionne chez moi

Donc au lieu d'avoir : $fp = fsockopen ($test_url, 80, $errno, $errstr, 30); if ( $fp ) {

Il faut mettre $fp = fsockopen (“ssl://” . $test_url, 443, $errno, $errstr, 30); if ( $fp ) {

Voilà ;)

J'espère que cela va vous aider ;)

 
Lozerianpat, 29/02/2012 12:24:

Bonjour !

Super tuto qui marche super bien et que j'ai eu l'occasion d'utiliser à plusieurs reprises. Seulement, depuis quelque temps, lorsqu'on est sur la page de Paypal, il n'y a pas de proposition de paiement par carte bleue sans créer de compte. J'ai bien cherché partout l'option “compte Paypal facultatif” mais elle n'apparait nulle part … Je ne vois pas du tout comment faire ..

D'avance, merci !

 
Nike Air Max Shoes, 21/04/2012 09:10:

Welcome! Nike Air Max Shoes Pas Cher .FR,Store Online, “Health & Lifestyle” . Sale All kinds of Nike Air Max shoes, with nike air max 90, nike air max 95,nike air max 2012,nike air max 2011,nike air max pas cher etc. www.nikeairmaxot.com.

 
Sentoss, 25/05/2012 10:23:

Bonjour , je vous remerci infiniment pour ce précieux tuto cependant je me bloque au nibveau d'un message ” Nous ne sommes pas parvenus à décrypter l'ID de certificat.” , sachant que j'ai tout v&érifié , l'adresse paypal du buyer et l'id généré par paypal tout est ok mais je n'arrive pas à m'ensortir qaund je teste j'ai toujours cette erreur qui apparait , et j'ai lu tous les commentaires , personne n'a porté réponse à ceux qui ont posé le meme problème , alors je me demande et après tout ce temps coulé y a t il pas qq d'entre vous qui a trouvé la solution pour ce genre de problèmes ??

 
HAO524, 25/05/2012 15:34:

<strong><a href=“http://www.buyuglyshoes.com/”>エアマックス</a></strong> _ ナイキ <a href=“http://www.buyuglyshoes.com/”><strong>Air Max</strong></a> エアマックス 通販 _ <a href=“http://www.buyuglyshoes.com/”><strong>nike シューズ</strong></a> 激安通販, 抜群のクッション性を誇るナイキエアマックス 2011。アッパーにはメッシュ素材を使用し通気性を確保。iPod nanoと連動させて音楽を聴きながら走行距離や脈拍などが測れる、NIKE+(10年間<a href=“http://www.buyuglyshoes.com/%E3%83%8A%E3%82%A4%E3%82%AD-%E3%82%A8%E3%82%A2%E3%83%9E%E3%83%83%E3%82%AF%E3%82%B995-c-14.html”><strong>Air Max 95</strong></a>は も短い時間の低迷を経験したことがあることがいますが、しかし自身のliang麗の外形に頼って、優越した性能、およびAir Force 1とDunkなどの20年前の年を取った靴所のなぞらえることができない快適性と広<a href=“http://www.buyuglyshoes.com/%E3%83%8A%E3%82%A4%E3%82%AD-%E3%82%B5%E3%83%B3%E3%83%80%E3%83%AB-c-145.html”><strong>ナイキ サンダル</strong></a> 激安通販 | NIKE ACG サンダル大で忠実なFans支持、王を走ってNikeのためにすべての光り輝く 業績を創造しました。<a href=“http://www.buyuglyshoes.com/%E3%83%8A%E3%82%A4%E3%82%AD-%E3%82%A8%E3%82%A2%E3%83%9E%E3%83%83%E3%82%AF%E3%82%B995-c-14.html”><strong>エアマックス 95</strong></a>プレビューに目を向けナイキプラス)対応モデル。アッパーにはハイパーフューズテクノロジーを採用し<a href=“http://www.buyuglyshoes.com/%E3%83%8B%E3%83%A5%E3%83%BC%E3%83%90%E3%83%A9%E3%83%B3%E3%82%B9-nb-c-96.html”><strong>ニューバランス</strong></a>、通気性、軽量性、耐久性、サポート性をアップ。またブーティ構造を採用することでフィット性をさらに向上<a href=“http://www.buyuglyshoes.com/%E3%83%8A%E3%82%A4%E3%82%AD%E3%82%A8%E3%82%A2%E3%83%9E%E3%83%83%E3%82%AF%E3%82%B9-24-7-c-200.html”><strong>エアマックス 24-7</strong></a>。ボリュームのあるフルレングスマックスが最大限のクッショニングを実現。 NIKE AIR MAX +2009 です。ナイキの人気シリーズ「 エ ア マックス 」が最先端の技術を取り込み、フルモデルチェンジしました。スニーカーの軽量化を目的として開発され、「コルテッツ」にも採用した<a href=“http://www.buyuglyshoes.com/%E3%83%8A%E3%82%A4%E3%82%AD-%E3%82%A8%E3%82%A2%E3%83%9E%E3%83%83%E3%82%AF%E3%82%B92009-c-13.html”><strong>エアマックス 2009</strong></a> 「FLYWIRE(フライワイヤー)」やインソールを外すとiPodを収納するポケットが搭載されてい<a href=“http://www.buyuglyshoes.com/%E3%83%8A%E3%82%A4%E3%82%AD-%E3%82%A8%E3%82%A2%E3%83%9E%E3%83%83%E3%82%AF%E3%82%B92011-c-209.html”><strong>エアマックス2011</strong></a>ます。抜群のフィット性<a href=“http://www.fashionshoesbuy.com/%E3%82%B5%E3%83%83%E3%82%AB%E3%83%BC%E3%82%B7%E3%83%A5%E3%83%BC%E3%82%BA-c-154.html”><strong>サッカーシューズ</strong></a>と軽量性を是非、おたのしみ 下さい。 <a href=“http://www.buyuglyshoes.com/%E3%83%8A%E3%82%A4%E3%82%AD-%E3%82%A8%E3%82%A2%E3%83%9E%E3%83%83%E3%82%AF%E3%82%B9-2012-c-30.html”><strong>エアマックス 2012</strong></a>, 激安通販 | New Balance ランニングシューズ<a href=“http://www.buyuglyshoes.com/%E3%83%88%E3%83%AA%E3%83%BC%E3%83%90%E3%83%BC%E3%83%81-c-89.html”><strong>トリーバーチ</strong></a>

 
HAO524, 25/05/2012 15:38:

[b][url=http://www.buyuglyshoes.com/]エアマックス[/url][/b] _ ナイキ [url=http://www.buyuglyshoes.com/][b]Air Max[/b][/url] エアマックス 通販 _ [url=http://www.buyuglyshoes.com/][b]nike シューズ[/b][/url] 激安通販, 抜群のクッション性を誇るナイキエアマックス 2011。アッパーにはメッシュ素材を使用し通気性を確保。iPod nanoと連動させて音楽を聴きながら走行距離や脈拍などが測れる、NIKE+(10年間[url=http://www.buyuglyshoes.com/%E3%83%8A%E3%82%A4%E3%82%AD-%E3%82%A8%E3%82%A2%E3%83%9E%E3%83%83%E3%82%AF%E3%82%B995-c-14.html][b]Air Max 95[/b][/url]は も短い時間の低迷を経験したことがあることがいますが、しかし自身のliang麗の外形に頼って、優越した性能、およびAir Force 1とDunkなどの20年前の年を取った靴所のなぞらえることができない快適性と広[url=http://www.buyuglyshoes.com/%E3%83%8A%E3%82%A4%E3%82%AD-%E3%82%B5%E3%83%B3%E3%83%80%E3%83%AB-c-145.html][b]ナイキ サンダル[/b][/url] 激安通販 | NIKE ACG サンダル大で忠実なFans支持、王を走ってNikeのためにすべての光り輝く 業績を創造しました。[url=http://www.buyuglyshoes.com/%E3%83%8A%E3%82%A4%E3%82%AD-%E3%82%A8%E3%82%A2%E3%83%9E%E3%83%83%E3%82%AF%E3%82%B995-c-14.html][b]エアマックス 95[/b][/url]プレビューに目を向けナイキプラス)対応モデル。アッパーにはハイパーフューズテクノロジーを採用し[url=http://www.buyuglyshoes.com/%E3%83%8B%E3%83%A5%E3%83%BC%E3%83%90%E3%83%A9%E3%83%B3%E3%82%B9-nb-c-96.html][b]ニューバランス[/b][/url]、通気性、軽量性、耐久性、サポート性をアップ。またブーティ構造を採用することでフィット性をさらに向上[url=http://www.buyuglyshoes.com/%E3%83%8A%E3%82%A4%E3%82%AD%E3%82%A8%E3%82%A2%E3%83%9E%E3%83%83%E3%82%AF%E3%82%B9-24-7-c-200.html][b]エアマックス 24-7[/b][/url]。ボリュームのあるフルレングスマックスが最大限のクッショニングを実現。

NIKE AIR MAX +2009 です。ナイキの人気シリーズ「 エ ア マックス 」が最先端の技術を取り込み、フルモデルチェンジしました。スニーカーの軽量化を目的として開発され、「コルテッツ」にも採用した[url=http://www.buyuglyshoes.com/%E3%83%8A%E3%82%A4%E3%82%AD-%E3%82%A8%E3%82%A2%E3%83%9E%E3%83%83%E3%82%AF%E3%82%B92009-c-13.html][b]エアマックス 2009[/b][/url] 「FLYWIRE(フライワイヤー)」やインソールを外すとiPodを収納するポケットが搭載されてい[url=http://www.buyuglyshoes.com/%E3%83%8A%E3%82%A4%E3%82%AD-%E3%82%A8%E3%82%A2%E3%83%9E%E3%83%83%E3%82%AF%E3%82%B92011-c-209.html][b]エアマックス2011[/b][/url]ます。抜群のフィット性[url=http://www.fashionshoesbuy.com/%E3%82%B5%E3%83%83%E3%82%AB%E3%83%BC%E3%82%B7%E3%83%A5%E3%83%BC%E3%82%BA-c-154.html][b]サッカーシューズ[/b][/url]と軽量性を是非、おたのしみ 下さい。 [url=http://www.buyuglyshoes.com/%E3%83%8A%E3%82%A4%E3%82%AD-%E3%82%A8%E3%82%A2%E3%83%9E%E3%83%83%E3%82%AF%E3%82%B9-2012-c-30.html][b]エアマックス 2012[/b][/url], 激安通販 | New Balance ランニングシューズ[url=http://www.buyuglyshoes.com/%E3%83%88%E3%83%AA%E3%83%BC%E3%83%90%E3%83%BC%E3%83%81-c-89.html][b]トリーバーチ[/b][/url]