paypal sécurisé

9
Outils Accepter les paiements en ligne avec PAYPAL Sachant que les ventes surinternet représentent pourl'année 2006 plus dedouze milliards d'euros pour plus decent millions detransactions. ll est aisé de penser que pourlescommerçants cela représente unevéritable aubaine. Pour les développeurs celase traduit par une explosion des demandes d'intégration d'unmoyen de paiement par carte bancaire. Cetarticle explique: . L'environnement de travailSANDBOX. . Comment sécuriser son systèmede paiement et leséchanges avec le serveur sécurisé. . Comment installer PAYPAL dans une interface existante. . Comment exploiter la réponsedu serveur (NlP) pour mettre à jour le statut des commandes' Ce qu'il faut savoir: . Connaître les bases du PHP. . Posséder un site avec panier. . Posséder un compte sur la plate-forme SAND- BOXpour le développement. . Posséder un compte PAYPAL pour la mise en production. 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. com/ 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 outils sont mis à la disposition desdéveloppeurs PAYPAL a pris le soinde bien documenter ses solutions, aussi peuimporte la solution de paie ment choisie, vous trouverezfacilement la docu- mentation qui s'yrapporte. Ceci dit, vouspouvez tout aussi bien vousreporteraux liensci-après. . Paiementparemail :https://www.paypal.com/ c gi bin/ we b scr? cm d : -e mail- payme nts- ou e r- uiew-outside, . Paiement sur site marchand : https:// w ww. pay p al. com / c gi- bin/webscr? cmd : - wp - st and ard- ou e r uiew - out sid e, . PasserellePayflow : https://www.paypal.com/ c gi-bin/ webscrT c m d : -p ay f low - gate way - 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 aborderonsles 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 utiliser une solution de paiement en ligne Il y a plusieurs trèsbonnes raisons d'utiliser un moyen de paiement électronique, la plus importante de ces raisons reste néanmoins de favoriser I'achat impulsif. Mais cela ne s'arrêtepas là, cela constitue égalementun 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, pasde bordereau de remisede chèques à réa- liser,pasde problème de solvabilité. Bien sur il existedescas 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 service en ligne. Il existe sur le marché d'innombrables solutions de paiement en ligne, la plupart éditées par les banques elles-mêmes. Cependant il existe quelques acteurs historiques dont le cæur de métier est la transaction électronique. C'est le cas de PAYPAL qui â commencé par pro- poser des transferts d'argent sans saisie des informations de carte bancaire par le biais de sites de e-commerce partenaires, puis à évoluer vers un paiement CB plus classique. 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'utilisation. Le Choixd'une solution PAYPAL PAYPAL propose plusieurs solutions pour ef- fectuer du transfert d'argent, ainsi, avant de choisir la méthode que vous allez utiliser pour effectuer vos transactions depuis votre site, vous devez deià determiner le mode de règle- 06/2007

Upload: dvdstory

Post on 07-Jun-2015

571 views

Category:

Documents


3 download

DESCRIPTION

PHP SOLUTIONS

TRANSCRIPT

Page 1: paypal sécurisé

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

Page 2: paypal sécurisé

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-

Page 3: paypal sécurisé

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

Page 4: paypal sécurisé

] 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) , '

Page 5: paypal sécurisé

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

Page 6: paypal sécurisé

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

Page 7: paypal sécurisé

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

Page 8: paypal sécurisé

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

Page 9: paypal sécurisé

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