paypal sécurisé
Post on 07-Jun-2015
580 Views
Preview:
DESCRIPTION
TRANSCRIPT
Outils
Accepter les paiementsen ligne avec PAYPALSachant que les ventes sur internet représentent pour l'année 2006 plusde douze mill iards d'euros pour plus de cent mill ions de transactions. l l estaisé de penser que pour les commerçants cela représente une véritableaubaine. Pour les développeurs cela se traduit par une explosion desdemandes d'intégration d'un moyen de paiement par carte bancaire.
Cet article explique:. L 'environnement de t ravai l SANDBOX.
. Comment sécur iser son système de paiement
et les échanges avec le serveur sécur isé.
. Comment installer PAYPAL dans une interface
existante.. Comment exploiter la réponse du serveur (NlP)
pour mettre à jour le statut des commandes'
Ce qu'i l faut savoir:. Connaître les bases du PHP.
. Posséder un site avec panier.
. Posséder un compte sur la plate-forme SAND-
BOX pour le développement.
. Posséder un compte PAYPAL pour la mise en
product ion.
ment que vous allez mettre en place. Pour cela
PAYPAL vous propose :
. Paiement par email,
. Paiement sur site marchand,
. Paiement sur site marchand Pro (Etats-
Unis uniquement) ,. Passerelle Payflow,. Acceptez PayPal.
Vous trouverez à ce sujet et pour vous aider
à choisir la solution qui vous convient un tâ-
bleau comparatif des differentes solutions que
propose PAYPAL à I'adresse suivante : hnps://
w w w. p ay pal. c om / c gi-b in / w e b scr? cm d : -p rof ile -
comparison. Une fois que vous avez choisie votre
solution, vous pouvez penser aux outils qui vont
vous permettre de réaliser votre intégration.
Quels outi ls sont misà la disposition des développeursPAYPAL a pris le soin de bien documenter sessolutions, aussi peu importe la solution de paiement choisie, vous trouverez facilement la docu-
mentation qui s'y rapporte. Ceci dit, vous pouvez
tout aussi bien vous reporter aux liens ci-après.
. Paiementparemail :https://www.paypal.com/
c gi b in / w e b scr? cm d : -e m ail- pay m e nt s- o u e r-
uiew-outside,. Paiement sur site marchand : https://
w ww. pay p al. com / c gi- bin/webscr? cmd : -w p - st an d ard- ou e r u iew - out sid e,
. PasserellePayflow : https://www.paypal.com/
c gi- b in / w eb scrT c m d : -p ay f lo w - gat e w ay - o ue r -
uieu-outside.
Niveau de difficulté3
ous allez voir comment utiliser PAY-
PAL pour proposer un paiement en
ligne. Pour cela nous aborderons les
solutions de paiement PAYPAL au travers du
serveur sécurisé PAYPAL SANDBOX, finale-
ment et après avoir abordé la question de la
sécurité, nous verrons en detail comment in-
tégrer une solution de paiement électronique
à une interface existante.
Pourquoi uti l iserune solution de paiement en l igneIl y a plusieurs très bonnes raisons d'utiliserun moyen de paiement électronique, la plusimportante de ces raisons reste néanmoins
de favoriser I'achat impulsif. Mais cela ne
s'arrête pas là, cela constitue également un
avantage pour le commerçant qui sait quasi-
ment en temps réel si une commande a été
payée ou non, ce qui lui permet, par exemple,
de traiter les commandes payées en priorité,
cela réduit également de façon considérable
le temps passé au traitement des paiements,
pas de bordereau de remise de chèques à réa-
liser, pas de problème de solvabilité. Bien sur
il existe des cas de fraude mais ils restent mi-
noritaires au vu du nombre de transactions.
Tout ces avantages font du paiement en ligne
un moyen simple, rapide et efficace de factu-
rer un bien ou un serv ice en l igne. I l ex iste
sur le marché d ' innombrables solut ions de
paiement en l igne, la p lupart édi tées par les
banques elles-mêmes. Cependant i l existe
quelques acteurs historiques dont le cæur de
mét ier est la t ransact ion électronique. C'est
le cas de PAYPAL qui â commencé par pro-
poser des transferts d'argent sans saisie des
informat ions de carte bancaire par le b ia is
de s i tes de e-commerce partenaires, puis
à évoluer vers un paiement CB plus c lassique.
ceci fait PAYPAL était prêt à rentrer par la
grande porte sur le marché des solutions de
paiement en ligne avec des solutions homogè-
nes et d'une simplicité exemplaire en terme
d'ut i l isat ion.
Le Choix d'une solution PAYPALPAYPAL propose plusieurs solutions pour ef-fectuer du transfert d'argent, ainsi, avant de
choisir la méthode que vous allez util iser pour
effectuer vos transactions depuis votre site,
vous devez deià determiner le mode de règle-
06/2007
s;teS
. Accepter Paypal : https://www.pctypal.com/
c gi b i n / w e b s c r7 c m d - _a d dit i o n a I - p (ty m e nt -
oueruiew-outside.
Pour mettre en ceuvre I'une de ces solutions,
vous avez besoin d'un seul outil qui va vous
servir pour toutes les tester. Cet outil magique
c'est le serveur sécurisé SANDBOX. Décou-
vrons sans attendre ce formidable outil. Le ser-
veur SANDBOX ne constitue pas pour autant
la seule ressource que PAYPAL a mis à la dispo-
sition des développeurs. Vous trouverez égale-
ment à cette adresse : https://utww.pctypal.com/
IntegrationCenter/ic -pdnHome.html un forum,des exemples d'intégration, des discussions
et pourrez rejoindre la communauté des déve-
loppeurs PAYPAL.
Le serveur sécuriséPAYPAL SANDBOXPAYPAL proposc pour les util isateurs qui
souhai tent ut i l iser leurs solut ions de paie-
ment, une interface très bien faite : SAND-
BOX, disponible à I 'adresse suivante : ht tps:
//deueloper.paypal.com/. Ce serveur sécurisé
est une copie conforme du serveur d 'explo i -
tation à la difTèrence clue tout ce qui s'y passe
est fictif : comptcs particuliers, comptes mar-
chands, t ransact ions . . . I ' in tégral i té des infbr-
mat ions t ra i tées sur ces serveurs ne seront
pas exploitées. Cette interfàcc vous permet-
tra de tester vos applications avant le passage
en production. L'avantage de SANDBOX
c'est que vous al lez pouvoir tester I 'appl ica-
t ion sous toutes ses formcs : côté ut i l isateur
f inal , côté vendeur et toutes les solut ions
que propose PAYPAL. Choisir une solution
de paiement.
Le choix d'une solution parmi celles propo-
sées par PAYPAL constitue la première étape
à réaliser lorsque vous avez décidé d'intégrer
PAYPAL à votre site marchand. Pour bien
choisir la solution qui vous convient, vous
devez tenir compte de plusieurs éléments.
Aussi i l vous faudra apporter une réponse
à ces questions :
. Quel genre d'article allez vous vendre ?
PAYPAL propose des solutions pour les
abonnements et les dons.. Quel est le poids de votre catalogue ? PAY-
PAL propose des boutons ACHAT IMME-
DIAT pour un seul article, un panier dé-
porté pour ceux qui ne souhaitent pas ou
ne peuvent pas avoir de panier sur leur si-
te. Et I'export du panier vers PAYPAL
pour les p lus aguérr is .. Souhaitez-vous util iser une base de don-
nées ? Paypal propose La Notification Ins-
tantanée de Paiement pour tenir à jour sa
base de données sur le statut de paiement
des commandes.. Quel est votre niveau de compétence ?
PAYPAL propose des solutions du type
www.phpsolmag.org
Copier/Colleq mais aussi une API de paie-
ment très bien faite et documentée oour
les développeurs expérimentés.
Voici qui constitue les principales questions
que vous devez vous poser avant de choistr une
solution.
Comment paramétrer SANDBOX ?Voi là donc le moment d 'aborder le v i f du
sujet. Commencez par créer un compte
développeur à I 'adresse suivante : https//
deueloper.paypal.com/ Une fois votre compte
créé, vous accédez à un menu. Dans un pre-
mier temps commencez par créer deux comp-
tes de test, pour cela cliquez sur Test Account
puis sur Create Test Accounr, un formulaire
semblable au formulai re de créat ion de comp-
te sur PAYPAL vous permet de créer un comp-
te vendeur (seller) ou acheteur (buyer). Créez
un compte qui va représenter le marchand(seller) et un compte qui va représenter I 'uti-
l isateur final (buyer). Une fois les deux comp-
tes créés, vous allez paramétrer le compte
Listing 1. Renseignez la variable qui détermine que vous utilisez un panier externe
, . p h P
$ c o n t e n u . = t . r i n p u t t y p e = " h i d d e n " n a m e = " u p l o a d " v a l u e = r r 1 r r ' r , '
Listing 2. Renseignez lo variable qui détermine l'url quiva réceptionner la N.l.P.
php
$ c h a i n e e n c o d e = ' c d e i d = ' $ s E S S r o N , ' c l i e n t " c d e i d ' ;
$ c o n t e n u . = ' , i n p u t t y p e = ' h i d d e n \ ' n a m e = ' ' u r I _ n o t i f y v v a l u e = r m o n _ s i t e . c o m ? '
. u r l e n c o d e $ c h a i n e e n c o d e , ' \ ' ' ;
Listing 3. Effectuez une boucle pour renseigner les champs du panier
' :php
w h i l e i l i s t r $ c l e , $ q t ; = e a c h t $ _ S E S S I O N ' c a d d i e ' ; : l
$ p r i x t o t a l = r o u n d r $ q t * $ p r i x u n i t a i r e , 2 ) ;
$ c o n t e n u . = ' j . n p u t t y p e = t h i d d e n \ ' n a m e = ' i t e m n a m e ' $ i ' \ ' v a l u e = "
. $ c l e ' \ ' ' c h r r l 0 r ;
$ c o n t e n u . = ' : i n p u t t y p e = \ ' h i d d e n \ ' n a m e = \ ' a m o u n t _ ' $ i ' \ ' v a l u e = \ "
. $ p r i x t o t a l ' \ ' ' c h r I 1 0 r ;
$ c o n t e n u . = ' i n p u t t y p e = \ ' h i d d e n V n a m e = \ ' q u a n t i t y ' $ i ' \ ' v a 1 u e = \ "
. $ q t ' \ ' ' c h r , 1 0 I ;
Q i r r .
Listing 4. Renseignez maintenant les données relotives au client' . ,php
$ c o n t e n u . = ' i n p u t t y p e = ' , ' h i d d e n v n a m e = ' a d d r e s s l \ ' v a l u e = " . $ S E S S I 0 N
t c l i e n t t ' a d r e s s e t , . t \ t t i
$ c o n t e n u . = ' i n p u t t y p e = r h i d d e n V n a m e = t a d d r e s s 2 \ t v a l u e = r \ r ' r , '
$ c o n t e n u . = ' i n p u t t y p e = " h i d d e n V n a m e = ' z i p V v a l u e = , , " $ S E S S I O N
r ' c l i e n t t , . ' c p ' . , t \ t . t ;
$ c o n t e n u . = ' i n p u t t y p e = r , ' h i d d e n \ ' n a m e = : ' c i t y \ ' v a l u e = " ' I S E S S I O N
i ' c l i e n t r , ' v i l - l e ' . f ' \ ' , ' ;
$ c o n t e n u . = ' i n p u t t y p e = ' h i d d e n \ ' n a m e = ' c o u n t r y \ ' v a l u e = ' F R \ ' ' ;
$ c o n t e n u , = ' - i n p u t t y p e = ' h i d d e n \ ' n a m e = , ' f i r s t n a m e \ ' v a l u e = , , " . $ S E S S I O N
: t c l i e n t t t p r e n o m t . t \ t . t ;
$ c o n t e n u . = ' : i n p u t t y p e = ' h i d d e n V n a m e = ' t l a s t n a m e V v a l u e = \ " $ S E S S I O N
' c l i e n t t t n o m ' . t \ t r t ;
$ c o n t e n u . = ' i n p u t t y p e = ' h i d d e n \ ' n a m e = ' e m a i L \ ' v a l u e = " ' $ S E S S I O N' c f i e n t t ' e m a i l t , . ' \ ' ' ;
er:à-ue
J/
Ie-rent
ES
te1 l -
n/
?r-
:/ /
n/
?r-
Outils
vendeur fbusiness) pour prendre en compte le
choix de votre solution de paiement.
Pour paramétrer le compte du vendeur, sélec-
tionnez le compte business puis cliquez sur le
bouton Enter SandboxTest Slte pour ouvrir une
nouvelle fenêtre dans laquelle vous allez pou-
voir vous connecter avec les identifiants de con-
nexion enregistrés lors de la création du compte
test. Une fois cette étape effectué rendez vous di-
rectement dans I'onglet Outils Marchands. C'est
ici que vous allez paramétrer le compte vendeur
en fonction de la solution retenue.
Listing 6. Le compte business correspond à l'odresse email que vous avez utilisé lors de la création de
votre compte PAYPAL
. .'php
$contenu . = ' " . inpu t type=\ 'h iddenV name=\ " bus iness \ ' va lue= l l '
$ m o n c o m p t e . t \ ' > ' ;
Listing 7. Un exemple pour poster un formulaire sans l'affrcher
.r iphp
echo "'r html :' \, n " ;
echo t ' . .head, " ;
echo ".. t i t f e) Paiement Paypal< i ' t i t le>' i 'head> \ n" ;
echo " . .body on load= ' . "document . fo rm. submi t O ; \ "> \n" ;
echo , . . fo rm metho4=r 'pos t " name=" fo rm" ac t ion=" ' $paypa l -u r l t r ' ' | ' " ' :n " ;
foreach t$f ields ae $name =; $value) i ,
echo r . : inpu t type=, 'h idden ' , name=" t $name . t " va fue=" t $va lue . | i l ' ) | !
eChO " r- , , f 916; , . prr , .
" . ibody) . : r ,h tml : , , ,n , , ;
Listing B. Récupérez la réponse de PAYPAL et concaténez ovec votre ieton d'identité et cmd
. lphp
// --- Ajout du CMD et du token
$req = ' cmd=_not i fY-sYnch ' ;
$ t x _ t o k e n = S _ G E T i , t x , l ;
$aurh token = 'o fX-CZeA4EMvV-em_A_HHgZImgCSoJJMjSogeuzuQniD2588FEJG?lFwfaor ;
$ r e q . = ' & t x = ' $ t x - t o k e n . ' & a t = ' $ a u t h t o k e n ;
Listing 9. Envoyez lo chaîne de caractères ainsi obtenue et récupérez la réponse de PAYPAL
' . lphp
$header . = "POST /cg i -b in , /webscr HTTP, /1 ' 0 \ r \ 'n " ;
$header .= "conten t -Type: app l i ca t ion /x -www- form-ur lencoded ' r ' n " ;
$ h e a d e r . = " c o n L e n t - L e n g t h : " . 8 t r l e n ( $ r e q ) . r r i a r , n ' i r \ n r r l
$ f p = f s o c k o p e n ( ' w w w . s a n d b o x . p a y p a l . c o m ' , B O , $ e r r n o , $ e r r s t r , 3 0 ) ;
i f ( ! S f p ) i
e c h o S e r r n o ' : ' $ e r r s t r ;
i e lse i
fPu ts ($ fP , $header $ req) ;
// read the bodY data
S r e s = t t ;
$headerdone = false;
r h i l e ( ! f e o f ( $ f p ) ) {
$ l i n e = f g e t s ( g f p , 1 0 2 4 ) ;
i f ( s t r q ( $ I i n e , i l \ r \ n " ) = = 0 ) l
/ / lecture des header
$headerdone = true;
) elseif , ($headerdone) {
/ / après Iec tu re des en tê tes , lec tu re du contenu
$ r e s . = g l i n e ;
Sécuriser les donnéeset les échanges serveurLorsque vous manipulez des informat ions
sensibles, i l est de votre intérêt de veil ler
à les protéger correctement. Pourtant est-ce
vraiment le cas ? Vous allez voir quelques as-
tuces faciles à mettre en ceuvre et qui pour-
ront vous éviter bien des tracas. Nous verlons
également comment sécur iser les échanges
avec PAYPAL.
Quelques pr incipes
pour sécuriser les données sensiblesPAYPAL en tant que pionnier dans le paie-
ment électronique s'attache depuis de nom-
breuses années à sécurisé son infrastructure
[Cryptage des données, Tèchniques de détec-
tion de la fraude et modèles de gestion des
risques, Système de vérification d'adresse ...)
En revanche il n'exerce aucun contrôle sur les
architectures qui uti l isent leurs solutions' En
effet en matière de paiement, les problèmes
de sécurité sont plus souvent dus à une mau-
vaise protection des données personnelles qu'à
une attaque sur le serveur de paiement. C'est
pourquoi i l est important de respecter quel-
ques principes qui vont assurer un mlnlmum
de sécurité. Ces principes sont généraux, c'est
à dire qu'i ls peuvent très bien servir pour un
autre système de paiement et en général lors-
que vous manipulez des données sensibles.
Vous verrez ensuite quelques astuces concer-
nant PAYPAL dans la notification instantanée
de paiement.
. Ne stockez jamais des informat ions sen-
sib les dans un f ichier d i rectement inter-
prétable depuis un navigateur. Par exem-
ple les f ichiers texte. Ut i l isez plutôt des
var iables dans un f ichier PHP. Mais at-
tent ion de ne pas nommer vos- f ichiers
avec une extension en . INC [commu-
nément employée pour identifier des fi-
chiers inc lus.) Préférez I 'extension PHP
en nommant vos f ichiers inc lus de la
sorte : mon-fichier.inc.php. En effet les fi-
chiers . inc sont apparentés à des f ichiers
texte et seront donc v is ib les depuis un
navigateur,. Ne stockez jamais des informat ions sen-
sibles à la racine de votre site web' Uti-
l iser p lutôt un dossier externe au dos-
sier web. Si vous n'avez pas accès à la ra-
c ine, dans le cas d 'un hébergement mu-
tualisé par exemple, uti l iser un .htaccess
pour interdi re I 'accès au dossier conte-
nant les informations sensibles, ou à dé-
faut placez un fichier vide et nommez le
index.html,. Accordez les droits en lecture seule sur les
fichiers qui contiennent des données sen-
sibles depuis votre client FTP ou en ligne
de commande chmod o-\^ ,x /home/www/
m o n f i c h i e r . P h P ,
06/2007
] S
l r
le
J -
l -
I S
]S
. Si vous devez faire appel à un exécuta-
ble pour générer un bouton de paiement,
veil lez aux droits sur ce fichier de façon
à ne laisser que les droits au propriétaire
du fichier depuis votre client FTP préféré
ou en l igne de commande : chmod u+rwx,
g o - r w x / h o m e / e x e c u t a b l e . s h .
Le respect de ces di f férents points s imples
à mettre en oeuvre garant i t une sécur i té mi-
nimum. Vous pouvez bien entendu met-
t re en place des sytèmes de contrô le supplé-
mentâtres.
Qu'est Ge que la Notification
Instantanée de Paiement ?
Outre le fait qu'i l est nécessaire de protéger
les données stockées sur un serveur d istant ,
i l est aussi nécessaire de veil ler à ce que vo-
tre identification soit sans équivoque auprès
du serveur de paiement. La plupart des solu-
t ions de paiement en l igne propose une iden-
t i f icat ion par une c lef issue d 'un hachage en-
t re un passphrase et un numéro de TPE par
exemple et crypté selon le procédé SHA la
plupart du temps. PAYPAL propose une solu-
t ion s imi la i re en son cert i f icat d 'API, ou vous
devez ut i l iser un nom d'ut i l isateur et un mot
de passe différent de votre compte PAYPAL,
couplé à une s ignature calculée à part i r des
informations précédentes. Ces trois infbrma-
t ions seront nécessaires à tout appel de I 'API.
Sans ut i l iser I 'API de paiement, et s i vous ut i -
l isez juste la solut ion de panier déporté vous
pouvez également util iser le jeton d'identité
qui fait parti de la Notil'icettion Instantanëe
de Paiement ou N.l.P. La notification instan-
tanée de paiement permet de récupérer les
informations relatives à la commande, le sta-
tut du paiement et éventuellement le code
erreur généré par PAYPAL. Ces informations
sont précieuses pour les développeurs, car el-
les vont lui permettre d'interagir avec la ré-
ponse émise par le serveur de paiement. Mais
ces informations peuvent également être
convoitées par des personnes pas très scru-
puleuses. C'est pourquoi le jeton d'identité
doit être joint à votre réponse au serveur de
paiement. Ce moyen reste le moyen le plus
sur en dehors de I 'API. Nous verrons plus
tard comment fonctionne cette NIP et com-
ment I 'uti l iser.
Comprendrelefonctionnement de la N.l.PLorsque vous configurez PAYPAL pour utili-ser la N otif ication lnstantané e de Paiement, voLrsdevez spécifier une url vers laquelle la réponsedu serveur sera envoyée. Lorsque le serveurenvoie cette réponse, vous devez alors lui ré-pondre en envoyant à votre tour la réponse duserveur que vous venez de recevoir avec unevariable supplémentaire : cmd avec la valeur :notify_validate. Paypal analyse alors votre
www.phpsolmag.org
réponse avec votre jeton d'identité. Si la chaî-
ne codée correspond, PAYPAL retourne alors
à votre serveur une confirmation qui contient
les mots c lefs : vERTFTED ou TNVALID. À. . - . r -
ment vous devez répondre en envoyant une
réponse 200 oK pour fermer la transaction
et éviter I 'envoi de la prochaine notification.
Tânt que PAYPAL ne reçoit pas cette répon-
se 200, renverra de nouveau une notification
pendant quatre jours.
Util iser la Notif icationlnstantanée de PaiementPour utiliser la notification instantanée de
paiement vous devez paramétrer votre interfa-
ce PAYPAL pour qu'elle accepte la notification;
Vous allez voir maintenant quel paramétrage
est nécessaire pour inclure cette fonctionnalité
au coeur de votre projet.
Pour cela rendez vous sur I ' in ter face de
test de PAYPAL : SANDBOX dont vous
Listing 1O. Exploitez les données que PAYPAL vous renvoie
, . p h p
$debug = 0 ;
$ l ines = e :q r lode ( " t .n " , $ res t ;
$ k e Y a r r a Y = a r r a y r l , '
i f i s t r c r y i $ l i n e s 0 , " V E R I F I E D " ) = = 0 )
f o r i $ i = 1 ; $ i . c o u n t i $ I i n e s r ; $ i + + :
I i s t i $ k e y , $ v a l r = e x p l o d e ' " = " , $ l i n e s i $ i , l ;
$keyar ray ur ldecode ($key i ; = u r ldecode i$va l ) ;
$ f i r s t n a m e = $ k e y a r r a y r ' f i r s t _ n a m e ' , '
$ l a s t n a m e = $ k e y a r r a y r ' I a s t _ n a m e ' ; ;
$emai l = $keyar ray l ' cus tom' , '
$ a m o u n t = $ k e y a r r a y ' m c _ g r o s s r ' ;
Scde_ id = $keyar ray ' invo ice ' ;
$req = 'UPDÀTE tbl commande SET statut=1 WHERE id commande = ' $cde id;
i f t !$ resu l t = nysq l_guery i$db_connect , $ req : r
i f iSdebug) var dump t$ req) , '
e l s e i f i s t r c r y ( $ I i n e s 0 t , " I N V A L I D " ) = = 0 t
f o r i $ i = l ; $ i . c o u n È ( $ l i n e s ) ; 9 i + + t
l i s t i $ k e y , $ v a l t = e x p l o d e ( " = " ' $ l i n e s i $ i l ; ;
$keyar ray iu r ldecode ($key t ; = u r ldecode ($va l ) ;
i f ($debug) p r in t r ($keyar ray) ;
$ f i rs tname = $keyar ray i ' f i r s t_name' I ;
$ las tname = $keyar ray i 'Las t_name' i ;
$ e m a i l = $ k e y a r r a y t r c u s t o m r i ;
$ a m o u n t = $ k e y a r r a y l ' m c _ g r o s s ' I ;
$ c d e _ i d = $ k e y a r r a y i ' i . n v o i c e ' I ;
/ / - - - da te e t l reure
$ t e x t e : ' [ ' . . { a È e ( ' Y - m - d H : i : s ' ) . ' ] ' i n ' ;
$ tex te . = , r$ I ines \ , r r \ i r r ' , ;
/ / --- enregistrement du texte dans le f ichier
// ouverture du f ichier
$ f p = 6 o * t t ( ' . / I o g s / i p n l o g . t x t ' r ' a ' ) ;
/ /ecriùure des logs
fwr i te ($ fp , $ tex te " \n \n" ) , '
// ferne le fichier
fc lose ($ fp1 ;
i f ($debug) var_dump (Stexte) , '
Outils
t rouverez l 'ur l dans le Tâbleau 5. Lancez
le compte Bzrs ines.s que vous avez préala-
blement créé, ; ru is ident i f icz vous sur ce
comptc de fàçon à vous rendre sur I 'onglet
Mon compte de votre inter fàcc. Puis chois is-
sez I'crnglet : Préférences. Puis dans le rnenu :
PréJérentes des uentes, choisissez PréJérenccs de
Not iJ i r : t t t ion instantanée de paiement. Vous
devez- d 'une part act iver la NIP, et d 'autre
part spéci f ier une ur l dc retour qui va réccp-
t i onner l a N . l .P e t l a t ra t te r .
À ce stade votre interfàce est correctement
paramétrée pour util iser la Notil icution Instan-
tunée de puiement.
Il ne vous reste plus qu'à exploiter les don-
nées avec un script de votrc création ou vous
pouvez également util iser I 'un dcs nombreux
scripts sous licencc GPL disponibles dans ce
domaine sur Internet : classes, scripts prèts
à I 'emplor . . .
l ns ta l l e r une so lu t ionde paiement complèteAfin d ' i l lustrer ce que vous venez de l i re, je
vous proposc d 'abordcr un cas prat ique. Ainsi
vous pourrez vous farnil iariser avec lcs diffé-
rentes étapcs nécessaires pour intégrer fàcile-
ment unc solut ion de paiement PAYPAI. . Pour
réal iser ce scr ipt , vous devez déjà posséder une
bout iquc avec un systèmc de panier (session'
basc de données . . . ) . Vous devcz- égalemcnt
posséder un comptc sur la plateftlrmc de test
SANDBOX.
Récupérer les données du panier
Vous n 'a l lez pas vt l i r comtrent récupérer les
donnécs dc vt t t rc panier car chaclue panier
a ses spe'c i f icat ions proprcs. Nous al lc lns plu-
tôt abordcr la quest ion des données néccssat-
res à PAYIâI . pour ef fèctuer la t ransact ion '
En fà i t lcs donr-récs nécessaires sont l iées
à la scl lut ic ' rn de paiement c lue vous avcz chcl i -
sie. Par exemple vous pouvez- vous ct.rtltentcr
dc récupérc r un iquc tnen t l c p r i x de l ' a r t i c le
si v t - rus chois issez- la solut ion du Paicment Im-
mid ia t , ou un iquemcn t l e to ta l du pan ic r s i
vt ' rus souhai tez ut i l isc ' r unc fàcturat ion globa-
le. Vcrus pouvez égalerncnt chois i r une st l lu-
t i on p lus avancéc cn u t i l l san t chac luc l i gne de
votre panier âvt :c la solut ion du panier expor-
té, vous pouvez môme chois i r de la isscr I 'AY-
PAL gérer votrc panier . Ttrutes ces solut ions
néccssi tent une impiémentat ion di f fèrcnte.
Cependant i l ex istc 1-rc lur chacune d 'cntres
el les, des var iables communes, ce sont les va-
r iables obl igatoi res. Rctrctuvez- I 'ensemble de
ces données dans le Tab leau l .
Récupérer les i nformat ions
nécessaires au Paiement
l ,es données néccssaires au paiement sont en
fài t les données re lat ivcs au c l ient , c 'est à d i re
les infbrmations de facturation et de llvraison
le cas échéant. Ces rnformat ions regroupent
également les éventuels frais de port et de trai-
tement, la taxe sur la valeur ajoutée (TVA).
Comme pour le panier, les données que vous
allez transmettre à PAYPAL sont l iées à la so-
lution retenue. Par exemple si vous souhaitez
accepter les paiement uniquement des util isa-
teurs possèdant dé1à un compte PAYPAL, Ies
informations à transmettre peuvent se limiter,
pour le client à son adresse email. Une fois sur
le serveur de PAYPAL ce dernier s'identifiera
avec ses propres informations. Par contre si
vous souhaitez accepter tous les porteurs de
carte bleue, vous pouvez transmettre les infor-
mations relatives à votre client : Nom, adresse,Figure 2. L'interface de visuolisation : Cette interface vous permet de visualiser les comptes de test créés
W sondbox rest Environmenr
Welcome to the Sandbox Test Env i ronment
Need an account? Sign up now to access payPal '5
Sandbox Test Envi ronment .
r À c c e ! s ' ; Ê l u a b l e d ê v É l c p É r . e s c u r c ê t
r Crêâtê accr iunts to tê t t ' icu ' Fà ' i tË l In têr fôcÊ
r À c c ê s 5 e m a r l S e n t t c ' i c u . t Ê s t a c c c u n t t
r l ' l a n Ê g e i F I c ' e d e n t t a l s f c ' t c u , t e s t â c c c u n t t
Sion Uo Now
T r c u b l e L c o o i n o I n ?
Figure 1. L'interface SANDBOX : Cette interface vous permet de tester l'ensemble des solutions PAYPAL
H É l p F r c i t l z L Ê g c - u t
So n db o x Iest En vironrn ent
you have ruccessfu l l , i c rcâted A tet t âCcount You Cân ' , ' ren emai l fcr th is accCunt on thÊ
Têst Emai l tâb
Test Accounts
y c u r t e s t a c c c u n t r a r e l i s t e d b e l c w Y c u m u - c t h a u e a t e s t b u s i n e t t à c c o u n t t c r e p r ê t e n t â m ê r c h â n t â n d â t Ê t t g c n c n a l â c c É u n t
t c r é p r e s e n t a b u i e r T c r i m u l ô t e â n ô c t i c n c n t h e l i u a r i t É ( p Ë ' / p a l - c c m l t é l Ê c t â t ê t t â c c c u n t a n d c l i c k Ê n t É r 9 a n d b o t T â t t
5r te. Leain lu lcre
Login Emlil lt"o_._ icou*rv i*.y lrnt_IF:'- _O Pertcnal F(àÔce l 'Jnuerr f lcd N Â
Ël ' . ' ierv Deta i ls
O E u c i n e r s F r ' n c e ' " c r r f i c d E n a b l e d
f l ' ' r ren Ceta i ls
@tp"r"C-l
06/2007
In-
US
-rx
CC
'ts
t e
S 1
C_
f -
1 r
te
1 ,
I t
i t
'5
' t
t-
l-
code postal, vil le ... Vous pouvez ainsi pré-
remplir les formulaires de creation de compte
ou de facturation. Dans tout les cas, et comme
pour le panicr, vous aurez à renseigner des va-
riables obligatoires dont vous trouverez le dé-
tail dans les tableaux des données relatives aux
clients (Tableau 2), et les données relatives au
paramétrage (Tâbleau 3).
Transformer ces données
en var iables explo i tables par PAYPAL
Pour qu'elles soient exploitées par PAYPAL, tou-
tes ces données brutes doivent d'une part avoir
un nom spécifique et d'autre part une valeur for-
matée. Nous allons voir maintenant quelles sont
ces spécifications pour chacune des données
obligatoires. Bien sur et comme précédemmcnt
vous n aurez pas spécialement à utiliser tou-
tes ces données et ce en fonction de la solution
que vous aurez choisie. Commençons donc par
déterminer la solution la plus élaborée, qui con-
siste à envoyer chaque ligne du panier avec le to-
tal par ligne, puis le sous-total hors frais de port
et TTC, puis le total du panier. Nous utiliserons
également le pré-remplissage des formulaires et
la notification instantanée de paiement. Si vous
avez déjà paramètré votre interface SANDBOX
passez à la suite sinon c'est le moment de le faire.
Commencez par déterminer la variable cuo qui
doit informer PAYPAL du choix de la solution
que vous avez retenu. Cette variable peut pren-
dre trois valeurs :
Tabf eau 1. Tableou des variables relatives au panier
. xc l ic i< : Pour un bouton Acheter main-
tenant, Dons cru Abonncments,. car t : Pour un bouton de panier d 'achat ,. ex t -en te r : P ré - remp l i l e fo rmu la i re
d' inscr ipt ion âu compte PayPal . Dans ce
cas la var iable qui détermine I 'ut i l isat ion
des données externes : redirect cmd est
requls.
Indiquez maintenant à PAYPAL que vous uti-
l isez votre panier, en renseignant la variable
upload avec la valeur r. Reportez vous au Lis-
ting I pour un exemple d'uti l isation de la va-
r iable cvo.
Puis spéci f iez I 'adresse qui va être ut i l isée
pour envoyer la not i f icat ion instantanée de
pa iement à I ' a ide de la va r iab le no t l - f y -u r1 .
At tent ion car les caractères réservés de cet te
ur l doivent obl igatoi rement être encodés en
hexadécimal , vous pouvez pour cela ut i l iser
la fonc t ion PHP u r tencode ( l . Voyez le L i s -
I " ing7. Cette var iable est facul tat ive s i vous
avez paramètré la N. l .P dans votre inter face
de PAYPAL. Cette valeur est d isponible au
Tableau 3. Pour les données re lat ives au pa-
nier d 'achat , vous al lez ef fectuer une boucle
af in de renseigner chaque l igne de votre pa-
nier . Les var iables à renseigner sont les sui-
vantes :
. amount x : Pr ix de I 'ar t ic le x,
. r tem name x : Nom de I 'ar t ic le x,
. o r : a n f i I v x : O u a n t i t é d e I ' a r t i c l e x ,. ' . \' shipping - x : Cout de livraison pour I 'arti-
cle x,. rax x : La taxe sur la valeur ajoutée pour
I 'ar t ic le x.
Retrouvez I'ensemble de des valeurs relatives
au panier au Tableau I et un exemple d'uti l isa-
t ion au List ing 3.
À ce stade il ne vous manque que les infor-
mations relatives au client. Dans cette exemple
nous avons choisi de pré-remplir le formulaire
d'inscription. Pour autoriser le pré-remplissage
vous devez spécifier la variable cmd avec la va-
leur ext enter comme sui t :
( I n n l t t r r n e = r r h i r ' l r " l e n I ' n a m e - " C m d "\ a r r y u u L J r !
v a f u e : " e x t e n t e r " )
mais aussi déclarer la var iable redirect cmd
comme cl-apres :
< i n n r f t v n e : " h i d d e q I n S p g = " r e d i r e c t c m d "
v a l u e = " x c l i c k " >
At ten t ion red i rec t _ cmd ne peu t avo i r
qu 'une seu le e t un ique va leu r : xc l - i ck . Ces
deux var iables sont nécessaires pour ut i l i -
ser le pré-rempl issage des formulai res. Une
fois que vous avez spécifié ces deux varia-
bles, renseignez les var iables du c l ient :
adressel, adresse2, zip, city, country, firstname,
amount x Prix de I 'art icle x
handling-x Frais de manutention article x
item name x Nom de I 'art icle x
quantity-x Quantité de I'article x
Premier nom de champ facul tat i f pour I 'ar t ic le x
Second nom de champ facultatif pour I 'article x
oso_x Premier ensemble de valeurs facultatives pour I 'article x (nécessite on0-x)
osl_x Second ensemble de valeurs facultatives pour I'article x (nécessite onl-x)
shipping-x Coût de l ivra ison de la première uni té de I 'ar t ic le x
shipping2_x Coût de livraison de chaque unité supplémentaire de l 'article x
tax-x Montant de la TV.A pour l 'article x
Tabf eau 2.Tableau des voriables pour pré-remplissage du formuloire PAYPAL
onO x
onl x
address 1
address-2
city
country
emai l
first name
last name
zip
lc
www.phpsolmag.org
Oui
Non
Oui
Non
Non
Non
Non
Non
Non
Non
Non
Alphanumérique
Alphanumérique
Alphanumérique
Alphabétique
Alphanumérique
Alphabétique
Alphabétique
Numerique
Alphabétique
't27
Les valeurs nulles, vides ou négatives nesont pas autorisées
64
64
200
200
100
100
40
Premier des deux champs destinés à I 'adresse
Second champ d'adresse en complément
Vil le
Détermine le pays d'expédition et de livraison
Adresse email du cl ient
Prénom du client
Nom du cl ient
Code postal
Détermine la langue de la page de connexion paypal
2
127
32
32
32
2
ItÎonsl rn
lust-nt tnrc, amtr i l . I - 'c-r ' rscrnblc c lcs var iahk's
c le pré-rcmpl issagc sont c l isponiblcs r r t r Tu-
bleau 2, retrouvcz- égrr lcrncnt atr L ist ing 4
L ln excml l l c d 'u t i l i sa t i on c l c ' cc .s va r iab lcs .
Af in c l 'ev i te r la mocl i f icat ion c lcs inf i r rma-
t ions c l t ' f l r c t t r r l t t i c ln , \ ' ( )us l ) ( ) r r \ /ez r t . r - rs t ' i - e ()r r ( 'c t ( 'ntcnt rcnscignc, e ( 's in i r t rntat i r t r - rs r - t r 's 'af l ' ichcront prrs. Jor-r tcs les c l rnnct 's l l t t t t 's-
s l r i r i 's st lnt r t 'pr iscs au Tabl t -arr - { . \ /ot rs t rorr-\ ' ( ' r cz a t r L i s t i r - rg 5 r rn c rcmp le c l ' r . r t i l i sa t i o r - t
t l c c t ' t t c v r r r i ab l c ' .
gn t ' r l a v l r r i l r b l t ' a r l d re . s : r
l i r va l c r - r r I va Pc rmc t t r t 'mr l t i ( )ns sans poss ib i l i t t l
tent ior-r car s i t rn r 'hulr - r1 ' ,
( , v . ' L r l ' 1 e ( l L l I l l \ r ( ' C
r l ' r r I l ' i t l t t ' r l t ' ' i r r l t ' r
. 1 , ' l t ' ' n r ( \ ( l i f i ( ' r . . \ t -
l t ( l \ ( ' \ \ i l i t t ' l t ' t ' s t l r l t t
Tableau 3.Tableau desvariables relatives ou paramètrage
Ladresse ind iqué dans les va r iab les de p ré - remp l i ssage p rend le pas su r l es va -r iables stockées. Le c l ient voi t I 'adresse mais ne peut la modi f ier
Monnaie du paiement, détermine la devise pour les var iables amounr,sh ipp ing , sh ipp ing2 € t rax . La va leu r pa r dé fau t es t l e do l l a rd US(EUR pour euros)
Var iable echo n 'apparaissant pas, peut être ut i l isé pour stocker une valeur donton t au ra i t beso in dans l ' lPN
Frais de dossier par commande indépendant du nombre d 'ar t ic le.
Var iable echo pouvant être ut i l isé pour ident i f ier un numéro de facture.
conjointement util isé à cmd="_ext-enter" pour pré-remplir un formulaire pAypAL
Tableau 4. Tableau des variobles utiles
address overr ide
currency_code
custom
hand l ing
Invotce
redirect cmd
address override
currency_code
custom
handl ing
Invotce
redirect cmd
shipping
shipping2
tax
tax cart
Non
N o n
Non
Non
Non
1 2 7
La seul valeur acceptée est _xclick
1 2 7
La seul valeur accep-tée est xclick
Ladresse indiqué dans les var iables de pré-rempl issage prend le pas sur les var iables stoc-kées. Le c l ient voi t I 'adresse mais ne peut la modi f ier
Monnaie du paiement, détermine la devise pour les var iables amount, shipping, ship-ping2 et tax. La valeur par défaut est le dol lard US(EUR pour euros)
Var iable echo n 'apparaissant pas, peut être ut i l isé pour stocker une valeur dont ont aurai tbeso in dans l ' lPN
Frais de dossier par commande indépendant du nombre d 'ar t ic le.
Var iable echo pouvant être ut i l isé pour ident i f ier un numéro de facture.
Conjointement ut i l isé à cmd- ' -ext-enter" pour pré-rempl i r un formulai re PAypAL
Frais de l ivra ison par ar t ic le s i vous avez act ivé les f ra is de l ivra ison. Si vous ut i l isez ship-ping et que shipping2 n 'est pas déf in i , ce montant for fa i ta i re est facturé quel le que soi t laquant i té d 'ar t ic les achetés.
Frais de l ivra ison de chaque art ic le supplémentaire. Si cet te var iable est absente et s i pré-férences concernant la l ivra ison est déf in i , le c l ient est facturé du montant ou pourcenta-ge défini dans votre profil.
Var iable permettant de remplacer la taxe basée sur la t ransact ion. Déf in issez- la sur unmontant for fa i ta i re pour l 'appl iquer à la t ransact ion quel que soi t le l ieu de résidence deI 'acheteur. Cet te valeur prend le pas sur tous les paramètres de taxe déf in is dans votre pro-f i1. Valeur par défaut : les paramètres de taxe déf in is dans votre prof i l .
Taxe applicable à I'ensemble du panier, prenant le pas sur toute valeur tax_x définie par ar-ticle.
Non
Non
Non
Non
Non
Non
Non
Non
Non
Tabf eau 5. Liens incontournables
https ://d eve I o pe r. pay pa l.co m
http://www.solutionspaypal.frlRessourcesTechniquesPayPal/ic_std-variable-reference.html
http://www.paypal.com /cgi-bin/webscr?cmd=_pdn_howto_checkout_outside#methodone
http://www.solutionspaypal.frlRessourcesTechniquesPayPal/ic_ipn-pdt-variable-reference.html
https://www.paypal.com lfr/cgi-bin/webscr?cmd= p/xcl/rec/ipn-code-outside
http://paypa ltech.com/content/i ndex. ph p
https://www.paypal.com/cgi-bin/webscr?cmd=xpt/cps/general/SolutionGra phics-outside
http://www.solutionspaypal.frlRessourcesTechniquesPayPal/ic_api-reference.html
ht tp: / /www.solut ionspaypal . f r lRessou rcesTechniquesPayPal / ic_documentat ion.html
http://www.paypa lblog.info/
Centrale des développeurs
Tableaux de référence des variables standard.
Methode pour exporter son panier vers PAYPAL
Référence des variables Instantane Payment Notifica-tion (l.P.N ou N.l.P) et Payment Data Transfert (p.D.T)
Echant i l lon de code pour gérer la not i f icat ion instan-tanée de paiement ( l .P.N)
Outil de génération de script N.t.P et P.D.T
Centrale des logos PAYPAL pour récupérer les p icto-grammes qui rassureront vos ut i l isateurs.
Références API et web service.
Documentat ions
Forum et ressources pour développeurs.
i _zo phpsolutions 06/2007
Outils
Listing 11.lJn exemple de classe PAYPAL
. p h p
t ' / - - - L a v e r s T o n o r i g t n a ) e d e c e t t e c l l d ' s - e e a é r e e : . i : : r e
/ / - - - p a r N l l c a l t C a r r - r c - k . E i i e e ' " f c i j s p o i l l b - l e s u r - i e s i t e
i i - - - k t . t p : / / w w w . . n j c a h c a r r j c k ' c o n :
c l a s s c l a s s e p a y P a l :
v a r $ l a s t e r r o r ;
v a r $ i P n - l e g , '
v a r $ i p n _ l o g _ f i l e ;
v a r $ i p n r e s p o n s e ;
v a r $ i p n d a t a = a r r a y | ;
v a r $ f i e l - d s = a r r a Y i i i
/ i - - - e n a j - 1 c i e v o t r e c o m p t e s u r F a - r ' ' p a i
v a r $ e m a i f c o m p t e ;
f u n c t i o n c l a s s e p a y P a l i ) '
/ / - - - i n i t i a l i s a t i o , r d e s v a r i , : b L e s
i / u r l d u s e r v e u r d e P r o d u c t i c r l
/ i S t h t s - > p a y p a i - u r ) = ' h t t p s : / / w w w ' p a y p a - l ' c c n t ' /
c q i - b i n / w e b s c r ' ;
i i u r i d u s e r v e u r d e t e s t
$ t h i s - : p a y p a l - u r l = ' h t t P s : / / w w w . s a n d b o x ' p a y p a l ' c o m /
f r / c q t - b r n / w e b s c r ' ;
$ t h i . s - I a s t e r r o r = " ;
$ t h i s - j i p n - l o q - f i l e = ' i p n - l o q . t x t r ;
$ t h i s - i P n - I o g = t r u e ;
S t h i s - i p n _ r e s P o n s e = " ;
i / a d r e s s e d u c o n p t e b u - s l n e s ' " à r e n t p l a c e r p a r 1 e
c o m p t e
$ t h i s - e m a i t c o m p t e = ' a d r e s s e - e m a i l 0
c o m P t e - P a Y P a I . c o m ' ;
/ / v a f e u r s p a r d é f a u t ( c f d o c F a y p a J )
$ t h i s - a d d f i e l d i ' c m d ' ,
' - c a r t ' I ;
S t h i s - a d d f i e l d i ' u P l o a d ' , ' 1 ' ) ;
$ t h i s - ' a d d f i e l d i ' c u r r e n c y - c o d e ' , ' E U R ' ' ;
$ t h i s - ' a d d f i e l d i ' c h a r s e t ' ,
' I S 0 - 8 8 5 9 - 1 ' r ' '
$ t h i s - a d d f i e l d I ' b u s i n e s s ' , $ t h i s - : ' e m a i l - c o m p t e t ' '
$ t h i s - ' a d d f i e l d t ' r m ' , 2 ) ;
$ t h i s - : ' a d d f i e l d l ' a d d r e s s o v e r r i d e ' , I ) ;
f u n c t i o n a d d f i e l d ( $ f i e r d ' $ v a 1 u e )
$ t h i s - ; f i e l d s " $ f i e l d " I = $ v a l - u e ;
i / - - - e n v o j c l e s i n f o r n a t i o n s à P a y p a J
f u n c t i o n s u b m i t _ p a y p a l _ P o s t ( ) r
e c h o " . h t m l - ' n " ;
e c h o " h e a d , " ;
e c h o " t i t l e r " $ G L O B A L S r ' t r - p a y p a l - 0 2 '
" t i t l e h e a d ; ' n " ;
e c h o " j b o d y o n L o a d = " d o c u m e n t . f o r m . s u b m i t O ; \ " -
e c h o ' f o r m m e t h o d = " p o s t " n a m e = " f o r m " a c t i o n = " '
S t h i s - ' p a y p a l - u r l . " ' ' r ' " ' n " ;
f o r e a c h r $ t h l s - , f i e l d s a s $ n a m e = ' $ v a l u e l ,
e c h o , , j - n p u t t y p e = " h i d d e n " n a m e = " ' g n a m e
v a l - u e = " t $ v a l - u e , r ' r r r ;
r h t m l ; I n " ;
func t ion va l ida te ipn ( ) ,
/ / - - - déconPose 1 'u r l PaYPa)
$ur l_parsed = parse-ur1 {$ th is - rpaypa l -u r l ; ;
/ / - - - génère fa cha ine à envoyer à Paypa l
$ p o s t _ s t r i n g = " ;
fo reach ,$ POST as $ f ie l -d= $va lue ' '
$ t h i s - i p n d a t a " S f i e l d " = $ v a l - u e ;
$ p o s t s t r i n g . = S f i e t d . ' = ' . u r l e n c o d e l $ v a I u e
/ , i - - - a r - o u l d e l a i e n r a n o e d e l o t l i l c ; l l o r :
$ p o s t - s t r i n 9 . = " c m d = - n o t i f y - v a 1 r d a t e " ;
/ / ' - - - . i u - ! ' r e t l ] 1 e c c r l e x i c l ' " - e l - s - l e - " j l e , e a - t ? a i
S f p = f s o c k o P e n $ u r L - p a r s e d h o s t , " 8 0 " , $ e r r - n u m ,
$ e r r s t r , 1 0 , ;
- - - r - .as o -e cor i , 'ex - lo , ' l . ' enreq i - " f . renent de I 'e - r ;eu . l
! $ f p , :
$ t h i s - l a s t e r r o r = " I s o c k o p e n
$ e r r s t r " ;
$ t h i s - J - o g _ i p n - r e s u L t s I f a l s e : ;
r e t u r n f a l s e ;
e r r e u r n o . $ e r r n u m :
, / / - - - c c n n e x i o , r é t a b - i r e
e l s e
. i , , , - - - enyoi oe-s oolnées à Pa1,pa- l
$ t x t = " P O S T $ u r 1 p a r s e d p a t h H T T P / I ' 1 r n "
. " H o s t : $ u r l - p a r s e d h o s t r n "
. " C o n t e n t - t y p e : a p p l i c a t i o n / x - w w w - f o r m - u r l e n c o d e d \
r \ n "
. " C o n t e n t - l e n g t h : " . s t r l e n i $ p o s t - s t r i n g r . " r n "
. " C o n n e c t i o n : c l o s e ' r n r , n "
. $ p o s t s t r i n g r ' , r ' n r ' n " ;
f p u t s l S f p , $ t x t r ;
w h i l e , ! f e o f $ f p :
S t h i s - ' l - p n - r e s p o n s e . = f g e t s l $ f p ' i 0 2 4 : ;
f c l o s e $ f P , , '
/ i - - - l a t - r a n s a c t r o n e s t a c c e p t é e
i f o r o a . i , ' r \ / F R T F T E n ' , S t h i s _ i n n r e c n ô n s et L E r ç Y f r Y L r r r J
$th is - ' l og_ iPn_resuf ts I t rue i ;
return true, '
/ / - - - - l a t r a n s a c t j o n e s t i n v a l - i d e
e l s e :
$ t h i s - ' f a s t e r r o r = ' I P N T r a n s a c t i o n n o n v a l i d é e '
S th j . s - 1og- ipn- resu l ts i fa lser , '
re tu rn fa lse ;
func t ion log_ ipn_resu l ts ($successr l
i f i ! $ t h i s - ' i P n 1 o g ) r e t u r n , '
$ t e x t e = t I t . d a t e i ' Y - m - d H : i : s ' ) . ' ] - ' ;
i f i $ s u c c e s s l $ t e x t e . = " 0 K ! : , n " ;
e l s e $ t e x t e . = ' E r r e u r : ' . $ t h i s - ) ' f a s t - e r r o r
$ t e x t e . = " V a r i a b l - e s I P N d e P a y p a l : ' n " ;
f o r e a c h ( $ t h i s - ' i p n d a t a a s $ k e y = ' $ v a l u e ) 1
$ t e x t e . = " S k e y = $ v a ] u e , " ;
$ t e x t e . = " \ n I P N R e s p o n s e f r o m P a y p a l - S e r v e r : ' n
" . $ th is - : , ipn_response;
$ fp = lon" t l i$ th is - : ' i pn- log- f i le , 'a ' ) ;
f w r i t e r $ f p , $ t e x t e . " \ n ' n " i ;
f c l o s e i $ f p ) ; / / c l o s e f i l e
r f '
e c h o " : , f o r m
e c h o " . : , b o d y
221 olutÎons 06/2007
I
I
IIiI
II
I
Votre client
vous paye
Site web
5. Mise à joursde votre basede donnees
Figure 3. Fonctionnement de lo NIP : Ce schéma montre comment fonctionne lo Notification lnstantanée
de paiement
Choix de la méthodede transport des donnéesLe serveur sécurisé PAYPAL n'accepte que les
requêtes de type POST c'est à dire des donnéesissues d'un formulaire et qui n'apparaissent pas
dans I'url. Pour envoyer une requête de type
POST vous pouvez utiliser un formulaire com-me dans les listings précédents, ce qui marche
très bien, mais lorsque vous affichez la source
d'un tel formulaire, vous pouvez constater que
les données sont visibles; cela est gênant car par-
mi ces données il y a votre adresse email qui cor-respond à votre compte chez PAYPAL. Réferezvous au Listing 6 pour déclarer cette variable.
Une fois la variable gmon_compte interprétée,
votre identifiant de compte sera visible. C'estpourquoi il est sage d'envoyer la requête de typePOST directement au serveur sans afficher le
formulaire. Réferez vous au Listing 7 pour un
exemple. Il suffit de poster le formulaire au
chargement de la page :
( b o d y o n l o a d = " d o c u m e n t . f o r m . s u b m i t ( ) ; " >
Ceci représente une solution, vous pouvez
bien entendu en utiliser une autre, I'idée étant
de ne pas afficher les informations qui vont
être envoyées à PAYPAL. Vous trouverez au
Listing 7 un exemple pour poster un formu-
laire sans I'afficher.
Récupération de la réponse de PAYPATUne fois que vous avez envoyé les donnéesà PAYPAL et après le processus de paiement,
PAYPAL vous envoie la Notification lnstanta-
née de Paiement, Cette réponse est envoyée demanière asynchrone sur la page que vous avez
spécifié lors de la configuration de I'l.P.N dansI'interface de PAYPAL, vous devez alors lui re-
tourner cette réponse sans oublier de rajouter
www.phpsolmag.org
votre jeton d'identification et la variable cuo.
Voyez comme exemple à ce sujet le Listing 8.
Envoyer la chaîne de caractère ainsi obtenu
au serveur sécurisé PAYPAL.
Attention car vous atrez à changer I'url con-
tenue dans la fonction f sockopen O lors du
passâge en production de votre application. Le
listing 9 illustre ces propos.
À ce stade PAYPAL va authentifier le jeton
d'identité et va vous retourner une chaîne de
caractères qui va vous informer d'une part du
statut du paiement et d'autres part sur le code
d'erreur éventuellement généré.
Exploiter les données pourmettre à jour un statut de paiementLorsque PAYPAL reçoit votre réponse et aprèsavoir analysé votre jeton d'identité; il vous re-
tourne une chaîne de caractères qui contient les
mots clefs : TNVALTD en cas d'échec du paiement
et vERrFrEo si le paiement a été accepté. Il ne
vous reste plus qu'à mettre à jour le statut de vo
tre commande pour indiquer que le paiement à
été accepté. Retrouvez ci-après un exemple de
code qui exploite la réponse de PAYPAL pour
mettre à jour la base de données. PAYPAL vous
permet également de récupérer des informa-
tions liées à la transaction qui vient d'être effec-
tuée : les nom et prénom du client, le montant
de la transaction et surtout I'identifiant unique
de la commande. Afin d'exploiter les données
de retour, vous pouvez vous réferé au Listing
10 qui est un exemple qui utilise les chaînes de
caractères TNVALTD ou vERrFrED.
Les avantages et lesinconvénients de PAYPAhPAYPAL propose une solution globale à ex-ploiter selon vos besoins, la solution est rapide
et facile à mettre en ceuvre, ce qui constitue
un avantage indéniable par rapport aux solu-
tions plus lourdes des établissements bancaires
par exemple. L'interface de gestion du compte
PAYPAL est ergonomique et propose une ges-
tion aisée des paramètres de configuration. Le
tout est très largement documenté et en fran-
çais de surcroît. Sans compter que vous n'aurez
aucun mal à trouver des ressources traitant du
sujet sur Internet. Tout cela en fait une solution
qui séduit de plus en plus professionnels et par-
ticuliers; Le principe est i l faut le dire séduisant
car vous ne payez une commlsslon que sl vous
vendez, contrairement aux solutions bancaires
ou vous devez la plupart du temps payer un
abonnement en plus des commissions. Aussi
utiliser PAYPAL est un peu plus cher car il vous
en coutera entre 1,9% et2,90/o sur chaque tran-
saction en fonction du chiffre d'affaire généré.
Pour plus d'informations sur les commissions
référez vous à la page d'information de PAY-
PAL à ce sujet : hnpsy'/www.paypal.con/rg,
b in/w e b s cr? cmd : -w p-st an d ard-pr i c in g-out s i d e .
Nous pouvons également regretter le manque
de clarté de I'interface d'accueil du serveur de
paiement, surtout pour les utilisateurs qui sou-
haitent payer par CB.
Un exemple de c lasse PHP
pour gérer les échanges avec PAYPALAvec ces réferences et ces exemples, vous pos-
sédez toutes les compétences nécessaires pour
intégrer facilement une solution de paiement
PAYPAL à votre site. Vous pouvez décider
de coder I'ensemble de l'application, ou vous
pouvez utiliser I'une des nombreuses classes
Open Sources disponibles sur Internet. En
exemple et pour conclure voici une classe PHP
qui permet de gérer les échanges avec le serveur
sécurisé PAYPAL. Cette classe vous permettra
également de réceptionner et de traiter la noti-
fication instantanée de paiement. Vous trouve-
rez I'itégralité de cette classe au Listing I 1.
(onclus ionFacile, rapide et efficace sont des adjectifs qui
résume assez bien les solutions de paiement
proposées par PAYPAL. Facile parce que certai-
nes de leurs solutions peuvent êtres utilisées par
des débutants avec quelques notions en langage
HTML. Rapide parce que vous pouvez intégrer
une solution complète et évoluée en quelques
minutes et efficace car avec son niveau d'exi-
gence concernant la sécurité, PAYPAL obtient
les taux les plus bas en matière de fraude, et as-
sure une disponibilité de plus de 99o/o.
STEPHANE BRISSAUDAuteur de plusieurs ouvrages traitant de I'utilisa-
tion du PHP, dont l'utilisation des solutions et com-
posants Open Sources, ce directeur technique de 36
ons est également impliqué dons de nombreux pro-
jets et anime des formations sur l'implantation de
solutions libres.
wtre
ww
4. Paypal retourneVERIFIED ou INVALID
top related