PayPal e PHP




Verona 15 Maggio 2009
Giulio de Taddeo

                        “…fare denaro è un’arte. Lavorare è un ar...
Perchè PayPal




                Confidential and Proprietary
Diffusione di PayPal nel Mondo




   Più di 184 milioni di conti registrati nel mondo
   Più di 184 milioni di conti regi...
Come Funziona PayPal




Con PayPal accetti pagamenti in 17 valute:




È inoltre possibile effettuare la conversione in a...
Più valore con PayPal


                        3 milioni di conti in Italia




                                         ...
Perchè PayPal

     Accettare PayPal vi permette di raggiungere una
      community di acquirenti che altrimenti
      esc...
Confidential and Proprietary   7
Cosa significa Pagare con PayPal


 Dal punto di vista dell’utente pagare con PayPal
  significa affrontare un flusso che ...
Cosa significa Pagare con PayPal




                                   Confidential and Proprietary   9
Cosa significa Pagare con PayPal




                                   Confidential and Proprietary   10
Cosa significa Pagare con PayPal




                                   Confidential and Proprietary   11
Perchè Pagare con PayPal

E’ anche utile tenere presente i principali driver
 d’uso di PayPal per la nostra community:
  –...
Accettare PayPal




                   Confidential and Proprietary
Accettare Pagamenti sui Vostri Siti Internet
Esistono differenti soluzioni che permettono di
 accettare pagamenti su una p...
Prodotti PayPal




                  Confidential and Proprietary
Prodotti
In Italia sono disponibili due diversi prodotti
  integrabili sulle vostre piattaforme di e-
  Commerce:
 1. Expr...
Integrare PayPal




                   Confidential and Proprietary
Prima di Cominciare
 Per supportare e velocizzare il lavoro di integrazione
   PayPal mette a disposizione diversi tool:
•...
PayPal SDK




Un ottimo facilitatore per le integrazioni sono gli SDK
 disponibili per gli sviluppatori.
Ovviamente sono ...
Perchè il Layout è Importante

• Dare la giusta visibilità a PayPal sul vostro sito
  informa gli utenti PayPal che il lor...
Aumentare il Vostro Fatturato

Consentire agli utenti di pagare senza registrarsi
 sul vostro sito di e-Commerce.
E’ dimos...
E’ fondamentale costruire un’esperienza d’acquisto fruibile e
                          positiva!




                    ...
Iniziare l’Integrazione

Il primo passo a supporto di qualunque
   integrazione è la creazione di un account
   Sandbox in...
Iniziare l’Integrazione

Il primo passo a supporto di qualunque
   integrazione è la creazione di un account
   Sandbox in...
Iniziare l’Integrazione

Il primo passo a supporto di qualunque
   integrazione è la creazione di un account
   Sandbox in...
Iniziare l’Integrazione

Il primo passo a supporto di qualunque
   integrazione è la creazione di un account
   Sandbox in...
PayPal Website Payment
Standard




                     Confidential and Proprietary
Website Payment Standard (WPS)

• Il prodotto WebsitePaymentStandard è un
  prodotto HTML based che ha nella semplicità di...
Website Payment Standard (WPS)

• Il flusso di pagamento è il seguente:
                                Choose Pay   CC   ...
Instant Payment Notification – WPS
Gli IPN sono script (asincroni) e sono utili per aggiornare il
     vostro DB.
Per proc...
Instant Payment Notification – WPS
  5. Prima di processare l’ordine è consigliabile eseguire
     i seguenti test:
    – ...
Instant Payment Notification – WPS
E’ infine necessario definire l’indirizzo del listener IPN
     all’interno dell’accoun...
Instant Payment Notification – WPS
// leggi il post del sistema PayPal e aggiungi cmd
                                    ...
Payment Data Transfer – WPS
     PDT è una comunicazione sincrona dipendente da azioni dell’utente.
     PDT è un metodo p...
Payment Data Transfer – WPS

Flusso di pagamento WPS + PDT




                                Confidential and Proprietar...
Payment Data Transfer – WPS




                              Confidential and Proprietary   36
Payment Data Transfer – WPS




                              Confidential and Proprietary   37
PayPal Express Checkout




                     Confidential and Proprietary
Express Checkout

Express Checkout è un prodotto API based.
Express Checkout permette di adattare
 completamente il flusso...
Express Checkout – API
Infrastruttura API di Express Checkout:




                                          Confidential ...
Express Checkout – Flussi
I flussi di pagamento principali sono i seguenti:
1. Express Checkout Mark
   – Adattamento del ...
Express Checkout – Flussi

2. Express Checkout Shortcut
  •    Gli acquirenti possono acquistare anche senza
       essers...
SetExpressCheckout




                     Confidential and Proprietary
Express Checkout – SetExpressCheckout




Attraverso la SetEC è possibile ottenere il token necessario alla
  redirezione ...
Express Checkout – SetExpressCheckout
                                                                   // Set request-sp...
Express Checkout – SetExpressCheckout
                                                                       // Set reques...
Express Checkout – SetExpressCheckout
                                                                   // Set request-sp...
Express Checkout – SetExpressCheckout
E’ possibile customizzare alcuni elementi delle pagine di Checkout
  hostate da PayP...
Express Checkout – SetExpressCheckout
Usualmente per facilitare i processi contabili di quadratura
 si utilizza la variabi...
Express Checkout – Sole Solution
E’ possibile anche con Express Checkout avvalersi della
 possibilità di accettare anche p...
GetExpressCheckoutDetails




                     Confidential and Proprietary
Express Checkout – GetExpressCheckoutDetails

GetECDetails è una chiamata opzionale.
Permette di retrivare dettagli dell’a...
Express Checkout – GetExpressCheckoutDetails
function PPHttpPost($methodName_, $nvpStr_) {
               .
              ...
DoExpressCheckoutPayment




                   Confidential and Proprietary
Express Checkout – DoExpressCheckoutPayment
DoECPayament è la chiamata cardine di ExpressCheckout
 perchè è la funzione ch...
Express Checkout Shortcut




                      Confidential and Proprietary
Express Checkout Shortcut
Per poter ridurre il flusso di pagamento al
 massimo è buona norma operare quanto segue:
• Valor...
Express Checkout Shortcut
Per poter ridurre il flusso di pagamento al
 massimo è buona norma operare quanto segue:
• Valor...
Order Authorization & Capture




                       Confidential and Proprietary
Order – Authorization – Capture

Oltre a pagamenti contestuali è possibile fruire di
    una modalità di pagamento che pre...
Express Checkout – Order


Una chiamata order successful apre una finestra
  temporale di 29 giorni all’interno della qual...
Express Checkout – DoAuthorization
Se la vostra piattaforma di e-Commerce ha effettuato con
    successo un order è possib...
Express Checkout – DoCaptureOrder

Se una chiamata DoAuthorization ha avuto
   successo si apre una finestra temporale di ...
Express Checkout – DoVoid

Se per qualche motivo di business non si intende
   chiudere le chiamate, è necessario utilizza...
THANK YOU FOR YOUR TIME
 Domande?




                          Confidential and Proprietary   65
PayPal e PHP




Verona 15 Maggio 2009
Giulio de Taddeo

                        “…fare denaro è un’arte. Lavorare è un ar...
Upcoming SlideShare
Loading in …5
×

Pay Pal @ Php Day - Verona 150509

1,646 views

Published on

Integrare PayPal

  • Be the first to comment

Pay Pal @ Php Day - Verona 150509

  1. 1. PayPal e PHP Verona 15 Maggio 2009 Giulio de Taddeo “…fare denaro è un’arte. Lavorare è un arte. Un buon affare è il massimo delle arti.” Confidential and Proprietary
  2. 2. Perchè PayPal Confidential and Proprietary
  3. 3. Diffusione di PayPal nel Mondo Più di 184 milioni di conti registrati nel mondo Più di 184 milioni di conti registrati nel mondo Disponibile in 190 Paesi e territori e 17 valute Disponibile in 190 Paesi e territori e 17 valute $ 14 miliardi volume totale di pagamenti nel mondo nel 2007 $ 14 miliardi volume totale di pagamenti nel mondo nel 2007 $ 563 milioni di ricavi nel 2007 (+35% YoY) $ 563 milioni di ricavi nel 2007 (+35% YoY) Confidential and Proprietary 3
  4. 4. Come Funziona PayPal Con PayPal accetti pagamenti in 17 valute: È inoltre possibile effettuare la conversione in altre 13 valute per le quali è disponibile il DCC (Dynamic Currency Conversion) se l’acquirente ha una carta di credito operante in quella valuta. Confidential and Proprietary 4
  5. 5. Più valore con PayPal 3 milioni di conti in Italia Sales lift Survey ‘07 Il 36% non avrebbe effettuato l’acquisto in assenza di PayPal: Principali motivi: 39% SOLO con Sicurezza 61% Convenienza Ricerca IPSOS (02/06) Confidential and Proprietary 5
  6. 6. Perchè PayPal Accettare PayPal vi permette di raggiungere una community di acquirenti che altrimenti escludereste dal vostro business. Acquirenti Merchants Confidential and Proprietary 6
  7. 7. Confidential and Proprietary 7
  8. 8. Cosa significa Pagare con PayPal Dal punto di vista dell’utente pagare con PayPal significa affrontare un flusso che incorpora almeno due schermate (hostate da PayPal.com) che sono nei loro elementi principali invarianti ovunque il buyer operi l’acquisto. Confidential and Proprietary 8
  9. 9. Cosa significa Pagare con PayPal Confidential and Proprietary 9
  10. 10. Cosa significa Pagare con PayPal Confidential and Proprietary 10
  11. 11. Cosa significa Pagare con PayPal Confidential and Proprietary 11
  12. 12. Perchè Pagare con PayPal E’ anche utile tenere presente i principali driver d’uso di PayPal per la nostra community: – Sicurezza che i propri dati finanziari non vengono condivisi con il venditore. – Esperienza d’acquisto facile e veloce. – Praticità. – Sicuro. Confidential and Proprietary 12
  13. 13. Accettare PayPal Confidential and Proprietary
  14. 14. Accettare Pagamenti sui Vostri Siti Internet Esistono differenti soluzioni che permettono di accettare pagamenti su una piattaforma e- Commerce: 1. PayPal come unica soluzione per gestire tutti gli incassi generati dal vostro sito (Sole Solution). 2. PayPal come metodo di Pagamento Aggiuntivo. Confidential and Proprietary 14
  15. 15. Prodotti PayPal Confidential and Proprietary
  16. 16. Prodotti In Italia sono disponibili due diversi prodotti integrabili sulle vostre piattaforme di e- Commerce: 1. Express Checkout (Pagamento Express) 2. Website Payment Standard (Pagamento Standard) Confidential and Proprietary 16
  17. 17. Integrare PayPal Confidential and Proprietary
  18. 18. Prima di Cominciare Per supportare e velocizzare il lavoro di integrazione PayPal mette a disposizione diversi tool: • Sandbox (https://developer.paypal.com) – E’ un ambiente che permette di effettuare test di integrazione implementando pagamenti tra account fittizi. • Integration Center (https://cms.paypal.com) – E’ il sito di supporto per gli sviluppatori. • Centro Logo (https://www.paypal.com/it/logo) – E’ il punto in cui si possono trovare i loghi/bottoni PayPal necessari per completare l’integrazione. • Blog Tecnico (http://developer.paypal- portal.com/pdn/board?board.id=it) – E’ il blog degli sviluppatori PayPal. Confidential and Proprietary 18
  19. 19. PayPal SDK Un ottimo facilitatore per le integrazioni sono gli SDK disponibili per gli sviluppatori. Ovviamente sono disponibili diversi SDK in funzione della tecnologia già presente sulle proprie piattaforme oppure in funzione del linguaggio che meglio si conosce. Percorso PayPal Developer Central -> Library -> SDKs Confidential and Proprietary 19
  20. 20. Perchè il Layout è Importante • Dare la giusta visibilità a PayPal sul vostro sito informa gli utenti PayPal che il loro metodo di pagamento preferito è accettato. • PayPal consiglia di inserire il logo PayPal sulla HP, nella pagina di descrizione prodotto e nella pagina dedicata ai metodi di pagamento. Confidential and Proprietary 20
  21. 21. Aumentare il Vostro Fatturato Consentire agli utenti di pagare senza registrarsi sul vostro sito di e-Commerce. E’ dimostrato che tanto più è rapido il flusso di pagamento (con meno schermate e form da riempire) quanto è più piacevole l’acquisto. Sussistono quindi maggiori probabilità che un visitatore occasionale diventi un cliente abituale. Confidential and Proprietary 21
  22. 22. E’ fondamentale costruire un’esperienza d’acquisto fruibile e positiva! Confidential and Proprietary 22
  23. 23. Iniziare l’Integrazione Il primo passo a supporto di qualunque integrazione è la creazione di un account Sandbox in modo da poter testare il codice via via che verrà scritto. Confidential and Proprietary 23
  24. 24. Iniziare l’Integrazione Il primo passo a supporto di qualunque integrazione è la creazione di un account Sandbox in modo da poter testare il codice via via che verrà scritto. Confidential and Proprietary 24
  25. 25. Iniziare l’Integrazione Il primo passo a supporto di qualunque integrazione è la creazione di un account Sandbox in modo da poter testare il codice via via che verrà scritto. Confidential and Proprietary 25
  26. 26. Iniziare l’Integrazione Il primo passo a supporto di qualunque integrazione è la creazione di un account Sandbox in modo da poter testare il codice via via che verrà scritto. Confidential and Proprietary 26
  27. 27. PayPal Website Payment Standard Confidential and Proprietary
  28. 28. Website Payment Standard (WPS) • Il prodotto WebsitePaymentStandard è un prodotto HTML based che ha nella semplicità di integrazione il suo atout principale. • E’ un prodotto alla portata anche di chi non ha approfondite competenze di programmazione (facili wizard permettono la creazione automatica del codice relativo a pulsanti di pagamento). • WPS permette di gestire agevolmente contenuti volumi transazionali. Confidential and Proprietary 28
  29. 29. Website Payment Standard (WPS) • Il flusso di pagamento è il seguente: Choose Pay CC Provide Bill to CC Add Item(s) Provide Ship Method and Pay Review Order Order to Shopping To Visa, MC, Method Summary Confirmation Cart Information PayPal Information PP PP Login to Agree to Transaction PayPal Transaction Confirmation • Dato che il pagamento avviene sui server di PayPal è necessario ottenere i dettagli dell’esito della transazione. Per tale motivo è necessario processare gli IPN. Confidential and Proprietary 29
  30. 30. Instant Payment Notification – WPS Gli IPN sono script (asincroni) e sono utili per aggiornare il vostro DB. Per processare correttamente gli IPN è necessario costruire un listener che permetta di processare il messaggio: 1. Le URL di provenienza sono le seguenti (per evitare spoof): – URL di produzione: https://www.paypal.com/cgi-bin/webscr – URL Sandbox: https://www.sandbox.paypal.com/cgi-bin/webscr 2. Parte del codice serve per recepire le variabili inviate dai server PayPal in modo da updatare il proprio DB. 3. E’ necessario convalidare la notifica ai server di PayPal: bisogna postare tutte le variabili (nel medesimo ordine) aggiungendo una variabile cmd=_notify-validate. 4. PayPal restituisce una singola Word VERIFIED oppure INVALID a cui bisogna rispondere con un post 200 OK. Confidential and Proprietary 30
  31. 31. Instant Payment Notification – WPS 5. Prima di processare l’ordine è consigliabile eseguire i seguenti test: – Payment_status sia Completed (gli IPN sono inviati anche per transazioni in Pending o in altri stati) – Txn_id sia univoco (per prevenire frodi) – Receiver_email sia un proprio indirizzo valido – Se utilizzati verificare che i campo custom o Invoice siano corretti Confidential and Proprietary 31
  32. 32. Instant Payment Notification – WPS E’ infine necessario definire l’indirizzo del listener IPN all’interno dell’account business PayPal (Account -> Profilo -> Preferenze per Notifica immediata del pagamento) oppure specificando l’indirizzo nella variabile notify_url. Confidential and Proprietary 32
  33. 33. Instant Payment Notification – WPS // leggi il post del sistema PayPal e aggiungi cmd $txn_id = $_POST['txn_id']; $req = 'cmd=_notify-validate'; $receiver_email = $_POST['receiver_email']; $payer_email = $_POST['payer_email']; foreach ($_POST as $key => $value) { $value = urlencode(stripslashes($value)); if (!$fp) { // HTTP ERROR $req .= quot;&$key=$valuequot;; } else { fputs ($fp, $header . $req); } while (!feof($fp)) { $res = fgets ($fp, 1024); if (strcmp ($res, quot;VERIFIEDquot;) == 0) { // check payment_status == Completed? // reinvia al sistema PayPal per la convalida // txn_id è già elaborato? $header .= quot;POST /cgi-bin/webscr HTTP/1.0rnquot;; // receiver_email è il tuo indirizzo? // payment_amount/payment_currency corretti? $header .= quot;Content-Type: application/x-www-form-urlencodedrnquot;; // elabora pagamento $header .= quot;Content-Length: quot; . strlen($req) . quot;rnrnquot;; } else if (strcmp ($res, quot;INVALIDquot;) == 0) { $fp = fsockopen ('ssl://www.paypal.com', 443, $errno, $errstr, 30); // registra indagine manuale } } // assegna variabili inviate a variabili locali fclose ($fp); } $item_name = $_POST['item_name']; $item_number = $_POST['item_number']; $payment_status = $_POST['payment_status']; $payment_amount = $_POST['mc_gross']; $payment_currency = $_POST['mc_currency']; Confidential and Proprietary 33
  34. 34. Payment Data Transfer – WPS PDT è una comunicazione sincrona dipendente da azioni dell’utente. PDT è un metodo per ottenere i dettagli della transazione in modo da costruire sul vostro sito una pagina riassuntiva del pagamento precedentemente avvenuto su PayPal.com Dopo un pagamento PayPal trasmette la TransactionID ad un’indirizzo definito nel profilo dell’Account (Account -> Profilo -> Preferenze per i pagamenti su sito web). Alla ricezione del TransactionID bisogna postare una FORM a PayPal che includa la TrasactionID ed il proprio Identity Token SUCCESS <form method=post action=quot;https://www.paypal.com/cgi-bin/webscrquot;> first_name=Paolino+Paperino <input type=quot;hiddenquot; name=quot;cmdquot; value=quot;_notify-synchquot;> last_name=De Paperi <input type=quot;hiddenquot; name=quot;txquot; value=quot;TransactionIDquot;> payment_status=Completed <input type=quot;hiddenquot; name=quot;atquot; value=quot;YourIdentityTokenquot;> payer_email=paperino%40hotmail.com <input type=quot;submitquot; value=quot;PDTquot;> payment_gross=5 </form> mc_currency=EUR custom= ... Confidential and Proprietary 34
  35. 35. Payment Data Transfer – WPS Flusso di pagamento WPS + PDT Confidential and Proprietary 35
  36. 36. Payment Data Transfer – WPS Confidential and Proprietary 36
  37. 37. Payment Data Transfer – WPS Confidential and Proprietary 37
  38. 38. PayPal Express Checkout Confidential and Proprietary
  39. 39. Express Checkout Express Checkout è un prodotto API based. Express Checkout permette di adattare completamente il flusso di pagamento alle proprie esigenze. Express Checkout permette di gestire in modo sincrono il flusso di pagamento. Grazie alla DoExpressCheckoutPayment Express Checkout offre la possibilità di gestire l’incasso con una API call invece che tramite messaggistica asincrona. Confidential and Proprietary 39
  40. 40. Express Checkout – API Infrastruttura API di Express Checkout: Confidential and Proprietary 40
  41. 41. Express Checkout – Flussi I flussi di pagamento principali sono i seguenti: 1. Express Checkout Mark – Adattamento del flusso di pagamento PayPal ad un flusso di pagamento esistente. – Performante, ma si perde parte dei possibili benefici che sarebbe possibile cogliere proponendo PayPal Express Checkout. Choose Pay CC Provide Bill to Add Item(s) Provide Ship Method and Pay Review Order Order to Shopping To Visa, MC, Method Summary Confirmation Cart Information PayPal Information PP Login to Transaction PayPal Confirmation Confidential and Proprietary 41
  42. 42. Express Checkout – Flussi 2. Express Checkout Shortcut • Gli acquirenti possono acquistare anche senza essersi preventivamente registrati presso il negozio (acquisto emozionale). La registrazione può essere proposta a valle del processo prefillando molti campi. • Stessa infrastruttura di prodotto. Choose Pay CC Provide Bill to Add Item(s) Provide Ship Method and Pay Review Order Order to Shopping To Visa, MC, Method Summary Confirmation Cart Information PayPal Information PP PP Login to Transaction PayPal Confirmation Confidential and Proprietary 42
  43. 43. SetExpressCheckout Confidential and Proprietary
  44. 44. Express Checkout – SetExpressCheckout Attraverso la SetEC è possibile ottenere il token necessario alla redirezione e settare alcuni parametri opzionali. Confidential and Proprietary 44
  45. 45. Express Checkout – SetExpressCheckout // Set request-specific fields. function PPHttpPost($methodName_, $nvpStr_) { $paymentAmount = urlencode('example_payment_amuont'); //Prepara la req $currencyID = urlencode(‘EUR'); $nvpreq=quot;METHOD=$methodName_&VERSION=$version&PWD= $paymentType = urlencode('Sale'); $API_Password&USE // or 'Sale' or 'Order' 'Authorization' R=$API_UserName&SIGNATURE=$API_Signature$nvpStr_quot;; $returnURL = urlencode(quot;return_urlquot;); // Set the request as a POST FIELD for curl. $cancelURL = urlencode('cancel_url'); curl_setopt($ch, CURLOPT_POSTFIELDS, $nvpreq); $nvpStr = // Get response from the server. quot;&Amt=$paymentAmount&ReturnUrl=$returnURL&CANCELURL=$cancelURL&PA $httpResponse = curl_exec($ch); YMENTACTION=$paymentType&CURRENCYCODE=$currencyIDquot;; if(!$httpResponse) { $httpParsedResponseAr = PPHttpPost('SetExpressCheckout', $nvpStr); exit(quot;$methodName_ failed: quot;.curl_error($ch).'('.curl_errno($ch).')'); if(quot;Successquot; == $httpParsedResponseAr[quot;ACKquot;]) { } // Redirect to paypal.com. $token = urldecode($httpParsedResponseAr[quot;TOKENquot;]); // Extract the response details. $payPalURL = quot;https://www.paypal.com/webscr&cmd=_express- $httpResponseAr = explode(quot;&quot;, $httpResponse); checkout&token=$tokenquot;; if(quot;sandboxquot; === $environment || quot;beta-sandboxquot; === $httpParsedResponseAr = array(); $environment) { foreach ($httpResponseAr as $i => $value) { $payPalURL = $tmpAr = explode(quot;=quot;, $value); quot;https://www.$environment.paypal.com/webscr&cmd=_express- if(sizeof($tmpAr) > 1) { checkout&token=$tokenquot;; } $httpParsedResponseAr[$tmpAr[0]] = $tmpAr[1]; header(quot;Location: $payPalURLquot;); } exit; } } else { return $httpParsedResponseAr; exit('SetExpressCheckout failed: ' . } print_r($httpParsedResponseAr, true)); } Confidential and Proprietary 45
  46. 46. Express Checkout – SetExpressCheckout // Set request-specific fields. function PPHttpPost($methodName_, $nvpStr_) { $paymentAmount = urlencode('example_payment_amuont'); //Prepara la req $currencyID = urlencode(‘EUR'); $nvpreq=quot;METHOD=$methodName_&VERSION=$version&PWD= $paymentType = urlencode('Sale'); // or 'Sale' or 'Order' 'Authorization' $API_Password&USE R=$API_UserName&SIGNATURE=$API_Signature$nvpStr_quot;; Definizione delle credenziali $returnURL = urlencode(quot;return_urlquot;); // Set the request as a POST FIELD for curl. $cancelURL = urlencode('cancel_url'); curl_setopt($ch, CURLOPT_POSTFIELDS, $nvpreq); Le$nvpStr = variabili obbligatorie da passare quot;&Amt=$paymentAmount&ReturnUrl=$returnURL&CANCELURL=$cancelURL&PA // Get response from the server. $httpResponse = curl_exec($ch); nella SetEC sono: YMENTACTION=$paymentType&CURRENCYCODE=$currencyIDquot;; if(!$httpResponse) { VERSION = 57.0= PPHttpPost('SetExpressCheckout', $nvpStr); $httpParsedResponseAr exit(quot;$methodName_ failed: quot;.curl_error($ch).'('.curl_errno($ch).')'); METHOD == $httpParsedResponseAr[quot;ACKquot;]) { if(quot;Successquot; = SetExpressCheckout // Redirect to paypal.com. } RETURNURL = = urldecode($httpParsedResponseAr[quot;TOKENquot;]); $token // Extract the response details. http://www.tuosito/pagina_di_ritorno.php $payPalURL = quot;https://www.paypal.com/webscr&cmd=_express- checkout&token=$tokenquot;; $httpResponseAr = explode(quot;&quot;, $httpResponse); CANCELURL = if(quot;sandboxquot; === $environment || quot;beta-sandboxquot; === $httpParsedResponseAr = array(); $environment) { foreach ($httpResponseAr as $i => $value) { http://www.tuosito/pagina_di_abbandono.php $payPalURL = quot;https://www.$environment.paypal.com/webscr&cmd=_express- $tmpAr = explode(quot;=quot;, $value); if(sizeof($tmpAr) > 1) { AMT = 0.01 checkout&token=$tokenquot;; } $httpParsedResponseAr[$tmpAr[0]] = $tmpAr[1]; header(quot;Location: $payPalURLquot;); } exit; } } else { return $httpParsedResponseAr; exit('SetExpressCheckout failed: ' . } print_r($httpParsedResponseAr, true)); } Confidential and Proprietary 46
  47. 47. Express Checkout – SetExpressCheckout // Set request-specific fields. function PPHttpPost($methodName_, $nvpStr_) { $paymentAmount = urlencode('example_payment_amuont'); Definizione dei parametri //Prepara la req $currencyID = urlencode(‘EUR'); di pagamento e del tipo di $nvpreq=quot;METHOD=$methodName_&VERSION=$version&PWD= $API_Password&USE $paymentType = urlencode('Sale'); // or 'Sale' or 'Order' 'Authorization' pagamento (contestuale R=$API_UserName&SIGNATURE=$API_Signature$nvpStr_quot;; $returnURL = urlencode(quot;return_urlquot;); $cancelURL = urlencode('cancel_url'); // Set the request as a POST FIELD for curl. o order+auth+capt) curl_setopt($ch, CURLOPT_POSTFIELDS, $nvpreq); $nvpStr = // Get response from the server. quot;&Amt=$paymentAmount&ReturnUrl=$returnURL&CANCELURL=$cancelURL&PA $httpResponse = curl_exec($ch); YMENTACTION=$paymentType&CURRENCYCODE=$currencyIDquot;; if(!$httpResponse) { $httpParsedResponseAr = PPHttpPost('SetExpressCheckout', $nvpStr); exit(quot;$methodName_ failed: quot;.curl_error($ch).'('.curl_errno($ch).')'); if(quot;Successquot; == $httpParsedResponseAr[quot;ACKquot;]) { } // Redirect to paypal.com. Gestione del token // Extract the response details. $token = urldecode($httpParsedResponseAr[quot;TOKENquot;]); $payPalURL = quot;https://www.paypal.com/webscr&cmd=_express- $httpResponseAr = explode(quot;&quot;, $httpResponse); checkout&token=$tokenquot;; if(quot;sandboxquot; === $environment || quot;beta-sandboxquot; === $httpParsedResponseAr = array(); $environment) { foreach ($httpResponseAr as $i => $value) { $payPalURL = $tmpAr = explode(quot;=quot;, $value); quot;https://www.$environment.paypal.com/webscr&cmd=_express- if(sizeof($tmpAr) > 1) { checkout&token=$tokenquot;; } $httpParsedResponseAr[$tmpAr[0]] = $tmpAr[1]; header(quot;Location: $payPalURLquot;); } } Redirezione } else { exit; return $httpParsedResponseAr; exit('SetExpressCheckout failed: ' . } print_r($httpParsedResponseAr, true)); } Confidential and Proprietary 47
  48. 48. Express Checkout – SetExpressCheckout E’ possibile customizzare alcuni elementi delle pagine di Checkout hostate da PayPal.com E’ buona norma per esempio utilizzare un logo nella pagina di pagamento (è consigliabile che sia hostato su server https). Se la piattaforma di e-Commerce ha già provveduto a raccogliere l’indirizzo di spedizione è importante operare l’override dell’indirizzo dell’utente (ADDRESSOVERRIDE=1). ... &METHOD=SetExpressCheckout &RETURNURL=https://... &CANCELURL=https://... &AMT=10.00&CURRENCYCODE=EUR &PAYMENTACTION=Sale& &HDRIMG=https://www.test.it/website-logo.gif ADDRESSOVERRIDE=1 &SHIPTOSTREET=Via vai 1 SHIPTOSTREET2= &SHIPTOCITY=Milano &SHIPTOSTATE=MI &SHIPTOCOUNTRYCODE=IT &SHIPTOZIP=20124 &PHONENUM=02-22222222 ... Confidential and Proprietary 48
  49. 49. Express Checkout – SetExpressCheckout Usualmente per facilitare i processi contabili di quadratura si utilizza la variabile invnum che permette di accoppiare alla transazione un proprio univoco (codice fattura). Laddove si stia vendendo un bene/servizio digitale è consigliabile oscurare la sezione relativa all’indirizzo di spedizione con il parametro noshipping=1 In una piattaforma di e-Commerce multilingua è necessario utilizzare la variabile localecode per impostare la lingua nelle pagine di pagamento hostate su PayPal.com Confidential and Proprietary 49
  50. 50. Express Checkout – Sole Solution E’ possibile anche con Express Checkout avvalersi della possibilità di accettare anche pagamenti provenienti da carte di credito. Per abilitare tale servizio si utilizzano i parametri: landingpage=billing e solutiontype=sole. Nel caso la vostra piattaforma utilizzi già un gateway bancario per l’addebito delle carte di credito si può forzare da codice la possibilità di accettare solo pagamenti provenienti da account PayPal. In tal caso si useranno i seguenti settaggi: landingpage=login e solutiontype=mark Confidential and Proprietary 50
  51. 51. GetExpressCheckoutDetails Confidential and Proprietary
  52. 52. Express Checkout – GetExpressCheckoutDetails GetECDetails è una chiamata opzionale. Permette di retrivare dettagli dell’account che sta per completare l’acquisto. GetECDetails diventa una chiamata obbligatoria quando si sta implementando un flusso di pagamento che prevede la vendita anche ad utenti non registrati. Confidential and Proprietary 52
  53. 53. Express Checkout – GetExpressCheckoutDetails function PPHttpPost($methodName_, $nvpStr_) { . . // Obtain the token from PayPal. . if(!array_key_exists('token', $_REQUEST)) { $nvpreq = exit('Token is not received.'); quot;METHOD=$methodName_&VERSION=$version&PWD=$API_Password&U } SER=$API_UserName&SIGNATURE=$API_Signature$nvpStr_quot;; $token = urlencode(htmlspecialchars($_REQUEST['token'])); // Set the request as a POST FIELD for curl. $nvpStr = quot;&TOKEN=$tokenquot;; curl_setopt($ch, CURLOPT_POSTFIELDS, $nvpreq); // Get response from the server. // Chiamata API GetEC $httpResponse = curl_exec($ch); $httpParsedResponseAr = PPHttpPost('GetExpressCheckoutDetails', $nvpStr); if(!$httpResponse) { Raccolta dei dettagli dell’acquirente exit('$methodName_ failed: if(quot;Successquot; == $httpParsedResponseAr[quot;ACKquot;]) { '.curl_error($ch).'('.curl_errno($ch).')'); // Extract the response details. } $payerID = $httpParsedResponseAr['PAYERID']; $street1 = $httpParsedResponseAr[quot;SHIPTOSTREETquot;]; // Extract the response details. if(array_key_exists(quot;SHIPTOSTREET2quot;, $httpResponseAr = explode(quot;&quot;, $httpResponse); $httpParsedResponseAr)) { $street2 = $httpParsedResponseAr = array(); $httpParsedResponseAr[quot;SHIPTOSTREET2quot;]; foreach ($httpResponseAr as $i => $value) { } $tmpAr = explode(quot;=quot;, $value); $city_name = $httpParsedResponseAr[quot;SHIPTOCITYquot;]; if(sizeof($tmpAr) > 1) { $state_province = $httpParsedResponseAr[quot;SHIPTOSTATEquot;]; $postal_code = $httpParsedResponseAr[quot;SHIPTOZIPquot;]; $httpParsedResponseAr[$tmpAr[0]] = $tmpAr[1]; $country_code = } $httpParsedResponseAr[quot;SHIPTOCOUNTRYCODEquot;]; } exit('Get Express Checkout Details Completed Successfully: if((0 == sizeof($httpParsedResponseAr)) || '.print_r($httpParsedResponseAr, true)); !array_key_exists('ACK', $httpParsedResponseAr)) { } else { exit(quot;Invalid HTTP Response for POST exit('GetExpressCheckoutDetails failed: ' . request($nvpreq) to $API_Endpoint.quot;); print_r($httpParsedResponseAr, true)); } } return $httpParsedResponseAr; } Confidential and Proprietary 53
  54. 54. DoExpressCheckoutPayment Confidential and Proprietary
  55. 55. Express Checkout – DoExpressCheckoutPayment DoECPayament è la chiamata cardine di ExpressCheckout perchè è la funzione che da’ luogo se successful all’incasso vero e proprio (se PAYMENTACTION=Sale). $payerID = urlencode(quot;payer_idquot;); $token = urlencode(quot;tokenquot;); $paymentType = urlencode(quot;Authorizationquot;); // or 'Sale' or 'Order' $paymentAmount = urlencode(quot;payment_amountquot;); Parametri principali $currencyID = urlencode(“EURquot;); $nvpStr = quot;&TOKEN=$token&PAYERID=$payerID&PAYMENTACTION=$paymentType &AMT=$paymentAmount&CURRENCYCODE=$currencyIDquot;; // API call $httpParsedResponseAr = PPHttpPost('DoExpressCheckoutPayment', $nvpStr); if(quot;Successquot; == $httpParsedResponseAr[quot;ACKquot;]) { exit('Express Checkout Payment Completed Successfully: '.print_r($httpParsedResponseAr, true)); } else { exit('DoExpressCheckoutPayment failed: ' . print_r($httpParsedResponseAr, true)); } Confidential and Proprietary 55
  56. 56. Express Checkout Shortcut Confidential and Proprietary
  57. 57. Express Checkout Shortcut Per poter ridurre il flusso di pagamento al massimo è buona norma operare quanto segue: • Valorizzare nella SetEC almeno il campo desc inviando il dettaglio del Totale da addebitare. • Accodare all’URL insieme al token useraction=commit (non passarla come variabile nella stringa NVP) In tal modo il vostro acquirente nella seconda pagina del pagamento avrà visione del totale da pagare e avrà la percezione di essere addebitato a seguito del click sul bottone Paga Ora. Confidential and Proprietary 57
  58. 58. Express Checkout Shortcut Per poter ridurre il flusso di pagamento al massimo è buona norma operare quanto segue: • Valorizzare nella SetEC almeno il campo desc inviando il dettaglio del Totale da addebitare. • Accodare all’URL insieme al token useraction=commit (non passarla come variabile nella stringa NVP) In tal modo il vostro acquirente nella seconda pagina del pagamento avrà visione del totale da pagare e avrà la percezione di essere addebitato a seguito del click sul bottone Paga Ora. Confidential and Proprietary 58
  59. 59. Order Authorization & Capture Confidential and Proprietary
  60. 60. Order – Authorization – Capture Oltre a pagamenti contestuali è possibile fruire di una modalità di pagamento che prevede 3 distinte fasi: 1. Order 2. Authorization – Allocazione fondi. 3. Capture – Cattura dei fondi. Confidential and Proprietary 60
  61. 61. Express Checkout – Order Una chiamata order successful apre una finestra temporale di 29 giorni all’interno della quale è possibile effettuare successive autorizzazioni. Per poter implementare un order è sufficiente impostare il seguente parametro paymentaction=order nella DoExpressCheckout Confidential and Proprietary 61
  62. 62. Express Checkout – DoAuthorization Se la vostra piattaforma di e-Commerce ha effettuato con successo un order è possibile invocare un’autorizzazione con l’API DoAuthorization. L’autorizzazione provvede a verificare la disponibilità dei fondi richiesti e se possibile ne richiede l’allocazione. TransactionID ritornato dalla DoEC diventa l’AuthorizationID $transactionID = urlencode('example_transaction_id'); $amount = urlencode('example_amount'); $currency = urlencode(‘EUR'); $nvpStr=quot;&TRANSACTIONID=$transactionID&AMT=$amount&CURRENCYC ODE=$currencyquot;; // Execute the API $httpParsedResponseAr = PPHttpPost('DoAuthorization', $nvpStr); if(quot;Successquot; == $httpParsedResponseAr[quot;ACKquot;]) { exit('DoAuthorization Completed Successfully: '.print_r($httpParsedResponseAr, true)); } else { exit('DoAuthorization failed: ' . print_r($httpParsedResponseAr, true)); } Confidential and Proprietary 62
  63. 63. Express Checkout – DoCaptureOrder Se una chiamata DoAuthorization ha avuto successo si apre una finestra temporale di 3 giorni* per poter effettuare una chiamata DoCapture. $authorizationID = urlencode('example_authorization_id'); CompleteType=Complete indica che il Capture $amount = urlencode('example_amount'); $currency = urlencode(‘EUR'); invocato è l’ultimo $completeCodeType = urlencode('Complete'); $invoiceID = urlencode('example_invoice_id'); $nvpStr=quot;&AUTHORIZATIONID=$authorizationID&AMT=$amount&COMPLE TETYPE=$completeCodeType&CURRENCYCODE=$currencyquot;; // Execute the API operation; $httpParsedResponseAr = PPHttpPost('DoCapture', $nvpStr); if(quot;Successquot; == $httpParsedResponseAr[quot;ACKquot;]) { exit('Capture Completed Successfully: '.print_r($httpParsedResponseAr, true)); } else { exit('DoCapture failed: ' . print_r($httpParsedResponseAr, true)); } *Valore standard Confidential and Proprietary 63
  64. 64. Express Checkout – DoVoid Se per qualche motivo di business non si intende chiudere le chiamate, è necessario utilizzare la chiamata DoVoid per effettuare l’annullamento della precedente operazione di Authorization. $authorizationID = urlencode('authorization_id'); $nvpStr=quot;&AUTHORIZATIONID=$authorizationIDquot;; // Execute the API $httpParsedResponseAr = PPHttpPost('DOVoid', $nvpStr); if(quot;Successquot; == $httpParsedResponseAr[quot;ACKquot;]) { exit('Void Completed Successfully: '.print_r($httpParsedResponseAr, true)); } else { exit('DoVoid failed: ' . print_r($httpParsedResponseAr, true)); } *Valore standard Confidential and Proprietary 64
  65. 65. THANK YOU FOR YOUR TIME Domande? Confidential and Proprietary 65
  66. 66. PayPal e PHP Verona 15 Maggio 2009 Giulio de Taddeo “…fare denaro è un’arte. Lavorare è un arte. Un buon affare è il massimo delle arti.” Confidential and Proprietary

×