Oppure

Loading
09/04/16 17:13
domenico_rizzo
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:
aaa
09/04/16 17:50
TheDarkJuster
Dovrai usare le api PayPal
aaa
09/04/16 18:30
domenico_rizzo
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:
<form action="https://www.sandbox.paypal.com/cgi-bin/webscr" method="post" target="_top">
<input type="hidden" name="cmd" value="_s-xclick">
<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.">
<img alt="" border="0" src="https://www.paypalobjects.com/it_IT/i/scr/pixel.gif" width="1" height="1">
</form>
aaa
09/04/16 19:13
TheDarkJuster
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
aaa
12/04/16 14:00
TheDarkJuster
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!!!
"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:
@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?

<?php
//system
define("SIMULATION", 1);
define("SIMULATION_URL", "www.sandbox.paypal.com");
define("PRODUCTION_URL", "www.paypal.com");
define("PRIMARY_PAYPAL_EMAIL", "email@sito.com");
define("PRIMARY_SANDBOX_EMAIL", "admin_1284367352_biz@bluewin.ch");
 
//db
define("HOST", "localhost");
define("DB_USER", "root");
define("DB_NAME", "paypal");
define("DB_PASSWORD", "*******");
 
//messages
define("ADMIN_MAIL", "maurizio.tarchini@bluewin.ch");
define("NO_REPLY", "no_reply@site.com");
 
define("AMMOUNT", 50);
?>

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....

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

Ancora $_POST, altri rischi di sicurezza!

private function sendReport()
    {
        if(SIMULATION)
        {
            $add = "- SIMULAZIONE -";
        }
        else
        {
            $add = "";
        }
        //messaggio all'amministratore
        $subject = "$add Problema IPN";
        $message = "Si è verificato un problema nella seguente transazione:\r\n\r\n";
        $message .= "Nome: " . $_POST['first_name'] . ' ' . $_POST['last_name'] . "\r\n";
        $message .= "email: " . $_POST['payer_email'] . "\r\n";
        $message .= "id transazione: " . $_POST['txn_id'] . "\r\n";
        $message .= "oggetto: " . $_POST['transaction_subject'];
 
        mail(ADMIN_MAIL,$subject,$message,"From: " . NO_REPLY);
        return;
    }


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:
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: github.com/paypal/… con tanti esempi e ben spiegata! :k::k::k:
Ultima modifica effettuata da TheDarkJuster 12/04/16 14:28
aaa
12/04/16 15:10
domenico_rizzo
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-|
aaa
12/04/16 15:23
TheDarkJuster
Per quando riguarda i database... Ti consiglio di usare o l'ORM incluso nel tuo framework o propel:
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.
aaa
12/04/16 15:32
TheDarkJuster
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:
aaa