Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
PHP - Implementare pagamento paypal sul proprio sito
Forum - PHP - Implementare pagamento paypal sul proprio sito

Avatar
domenico_rizzo (Normal User)
Pro


Messaggi: 90
Iscritto: 27/07/2015

Segnala al moderatore
Postato alle 19:13
Sabato, 09/04/2016
Ciao a tutti, un problema che mi affligge da giorni è implementare una sorta di carrello (con un solo prodotto da vendere, quindi un "Acquista ora") e con un prezzo fisso attraverso paypal. Una volta avvenuto il pagamento vorrei avere una sorta di notifica per far sì che possa mandare all'acquirente il prodotto. Ho cercato su Google svariate guide ma mi hanno confuso piu' che schiarirmi le idee... quindi, sapreste aiutarmi voi in qualche modo? :hail:

PM Quote
Avatar
TheDarkJuster (Member)
Guru^2


Messaggi: 1620
Iscritto: 27/09/2013

Segnala al moderatore
Postato alle 19:50
Sabato, 09/04/2016
Dovrai usare le api PayPal

PM Quote
Avatar
domenico_rizzo (Normal User)
Pro


Messaggi: 90
Iscritto: 27/07/2015

Segnala al moderatore
Postato alle 20:30
Sabato, 09/04/2016
Intanto grazie, quello l'avevo capito (ho anche richiesto la chiave personale ecc) ma vvorrei capire il come farlo. Su internet ho seguito una guida (per il ipn listener) che mi ha portato a creare dei file php che allego... ma i dati di settaggio quali sono? Voglio dire.. è cambiato un po' tutto dal periodo della guida, compresa l'interfaccia e non capisco come devo settarli.. anche solo per fare una prova con la sandobox. Nella mia pagina index al momento c'è solo questo, il pulsante della paypal che dice di comprare:
Codice sorgente - presumibilmente Plain Text

  1. <form action="https://www.sandbox.paypal.com/cgi-bin/webscr" method="post" target="_top">
  2. <input type="hidden" name="cmd" value="_s-xclick">
  3. <input type="image" src="https://www.paypalobjects.com/it_IT/IT/i/btn/btn_buynowCC_LG.gif" border="0" name="submit" alt="PayPal è il metodo rapido e sicuro per pagare e farsi pagare online.">
  4. <img alt="" border="0" src="https://www.paypalobjects.com/it_IT/i/scr/pixel.gif" width="1" height="1">
  5. </form>



domenico_rizzo ha allegato un file: ipn_listener.zip (2692 bytes)
Clicca qui per scaricare il file
PM Quote
Avatar
TheDarkJuster (Member)
Guru^2


Messaggi: 1620
Iscritto: 27/09/2013

Segnala al moderatore
Postato alle 21:13
Sabato, 09/04/2016
Quello è un normalissimo form html e non c'entra nulla con le api PayPal.

Le info di cercano sul sito ufficiale: ci sono due esempi semplici, dagli un occhio

PM Quote
Avatar
TheDarkJuster (Member)
Guru^2


Messaggi: 1620
Iscritto: 27/09/2013

Segnala al moderatore
Postato alle 16:00
Martedì, 12/04/2016
Ora che ho visto anche l'allegato noto che quell'esempio è un vero disastro sotto ogni aspetto:

uso della estensione deprecata mysql_* falle di sicurezza dovute agli sql injection!!!
Codice sorgente - presumibilmente PHP

  1. "SELECT * FROM utenti WHERE idTransazione=Â’$_POST[txn_id]Â’"



e se io richiedo al tuo server ?txn_id=0' OR '1' = '1 sai cosa succede? Si, che leggo il tuo intero database.

e pensa se poi faccio anche:
?txn_id=0' OR '1' = '1'; DELETE FROM utenti WHERE '1' = '1

ELIMINO IL TUO INTERO DATABASE IN UN ISTANTE!
Perdi tutte le transazioni!

Vedo inoltre un bel:
Codice sorgente - presumibilmente PHP

  1. @mysql_connect(HOST,DB_USER,DB_PASSWORD) OR die();



l'operatore @ rallenta lo script e fa solo male: se vuoi disabilitare gli errori lo fai dalla configurazione di php o sistemi quella bolgia.

Tutti quei $_POST in giro DEVONO sparire ed essere validati: usa "input_validate".

E poi YIILESTENER.php ? Usi il framework yii?

Codice sorgente - presumibilmente Plain Text

  1. <?php
  2. //system
  3. define("SIMULATION", 1);
  4. define("SIMULATION_URL", "www.sandbox.paypal.com");
  5. define("PRODUCTION_URL", "www.paypal.com");
  6. define("PRIMARY_PAYPAL_EMAIL", "email@sito.com");
  7. define("PRIMARY_SANDBOX_EMAIL", "admin_1284367352_biz@bluewin.ch");
  8.  
  9. //db
  10. define("HOST", "localhost");
  11. define("DB_USER", "root");
  12. define("DB_NAME", "paypal");
  13. define("DB_PASSWORD", "*******");
  14.  
  15. //messages
  16. define("ADMIN_MAIL", "maurizio.tarchini@bluewin.ch");
  17. define("NO_REPLY", "no_reply@site.com");
  18.  
  19. define("AMMOUNT", 50);
  20. ?>
  21.  
  22. AMMOUNT si scrive con una sola M: AMOUNT.



si beh.... nascondere la pass qui non ti servirà a nulla se non sistemi la sqlinjection.

tra l'altro i file di configurazione dovrebbero essere files in formato JSON, YAML o XML: si suppone che la configurazione possa essere fatta da una persona diversa del programmatore....

Codice sorgente - presumibilmente Php

  1. $req = 'cmd=_notify-validate';
  2. foreach ($_POST as $key => $value)
  3. {
  4.       $value = urlencode(stripslashes($value));
  5.       $req .= "&$key=$value";
  6. }


Ancora $_POST, altri rischi di sicurezza!

Codice sorgente - presumibilmente Php

  1. private function sendReport()
  2.     {
  3.         if(SIMULATION)
  4.         {
  5.             $add = "- SIMULAZIONE -";
  6.         }
  7.         else
  8.         {
  9.             $add = "";
  10.         }
  11.         //messaggio all'amministratore
  12.         $subject = "$add Problema IPN";
  13.         $message = "Si è verificato un problema nella seguente transazione:\r\n\r\n";
  14.         $message .= "Nome: " . $_POST['first_name'] . ' ' . $_POST['last_name'] . "\r\n";
  15.         $message .= "email: " . $_POST['payer_email'] . "\r\n";
  16.         $message .= "id transazione: " . $_POST['txn_id'] . "\r\n";
  17.         $message .= "oggetto: " . $_POST['transaction_subject'];
  18.  
  19.         mail(ADMIN_MAIL,$subject,$message,"From: " . NO_REPLY);
  20.         return;
  21.     }



NON si usa mail in php! La funzione mail è lenta, perchè far attendere l'utente tantissimo tempo su una pagina?
Tra l'altro se l'utente si stufa di aspettare e ti chiude la pagina l'amministratore non riceverà MAI la mail.

Sinceramente il fatto che tu non sia riuscito a far funzionare una transazione non mi stupisce per nulla:
non sai programmare in php (sapere la sintassi non significa saper programmare).

Se tu fossi riuscito a far funzionare la transazione sarebbe stato molto, molto, molto peggio.

Se vuoi un consiglio prendi un framework php. Studialo e affidati a lui per svolgere quante più operazioni possibili.

Per il framework yii c'è questa estensione:
http://www.yiiframework.com/extension/paypal/ ben documentata, come il resto del framework.

Spero che (anche se ti sto antipatico) sceglierai di seguire i miei consigli perchè non si scherza con i soldi e con i dati personali delle persone!

Se qualcuno dovesse rubare i dati dal tuo database e una vittima lo scoprisse... Avresti i soldi necessari per difenderti? Puoi immaginare quali conseguenze avrebbe sulle persone e/o entità coinvolte?

Inoltre i framework esistono per semplificare il lavoro mantenendo alti gli standard di sicurezza, quindi perchè non usarli?

Se non ti piace yii c'è laravel, symfony, code igniter, fuel php, silex e molti, molti altri!

Appena avrai scelto un framework e una estensione per il pagamento controlla la documentazione e torna qui appena avrai qualche problema!

Se invece (ahimè, purtroppo) hai deciso di non usare una estensione già fatta (magari perchè non c'era per il tuo framework o per altri motivi) PayPal ha fatto una libreria php semplice da utilizzare: https://github.com/paypal/PayPal-PHP-SDK con tanti esempi e ben spiegata! :k::k::k:

Ultima modifica effettuata da TheDarkJuster il 12/04/2016 alle 16:28
PM Quote
Avatar
domenico_rizzo (Normal User)
Pro


Messaggi: 90
Iscritto: 27/07/2015

Segnala al moderatore
Postato alle 17:10
Martedì, 12/04/2016
Ti ringrazio moltissimo, mi hai delucidato su tutto cio' che ho fatto e che potevo fare (in senso negativo) quindi grazie ancora! Vedro' i framework da te citati e una volta scelto quello da utilizzare e avro' problemi postero' una nuova discussione, GRAZIE ANCORA! 8-|

PM Quote
Avatar
TheDarkJuster (Member)
Guru^2


Messaggi: 1620
Iscritto: 27/09/2013

Segnala al moderatore
Postato alle 17:23
Martedì, 12/04/2016
Per quando riguarda i database... Ti consiglio di usare o l'ORM incluso nel tuo framework o propel:
http://propelorm.org/

Attualmente propel è il secondo ORM più utilizzato per PHP, e un motivo c'è: è semplice, sicuro e genera da solo il tuo codice php... devi solo mantenere un file xml che spiega come hai organizzato il db, ma tutto è ben documentato, basta una lettura da venti minuti e hai capito come fare le operazioni più semplici.

Nel caso volessi altri nomi di framework per siti web ti cito anche Lumen (una versione ristretta di laravel), doophp, cackephp, kohana, zend framework.

Fai una ricerca e vedi quale è più compatibile con la versione di php che usi attualmente, e se hai totale libertà scegli quello con la documentazione migliore.

Altra raccomandazione: Il web non è una cosa statica, è in continua evoluzione e lo sono anche i suoi strumenti.
La fonta migliore di informazioni su un componente è la documentazione di quel componente, perchè a differenza dei vari articoli sui siti di vario genere la documentazione di evolve con il progetto.

PM Quote
Avatar
TheDarkJuster (Member)
Guru^2


Messaggi: 1620
Iscritto: 27/09/2013

Segnala al moderatore
Postato alle 17:32
Martedì, 12/04/2016
Il modo di scrivere siti che hai adottato è il modo con cui si scrivevano prima della comparsa dei framework, quando PHP ancora era un piccolo progetto legato a mysql.

Tutti gli sviluppatori php con un po' di anni di esperienza (me compreso eh! Sia chiaro!) hanno fatto i tuoi stessi errori: non si sono curati troppo della sicurezza, non si sono curati della logica MVC rendendo il sito poco mantenibile, non si sono curati di usare degli standard, ecc..., e ciò ha avuto brutte conseguenze.

Guardati bene da quegli errori.

Inoltre non avere fretta: usa tranquillamente i vari framework. Non significa necessariamente non essere capaci di programmare, significa essere furbi :heehee::heehee::heehee::heehee:

PM Quote