Sei sulla pagina 1di 5

Pagina 1 di 5

02/17/11 - Come implementare un pagamento online: Testare l'applicazione (5/6)

Siamo giunti al momento di procedere ai test, a questo punto dovresti essere in


grado di implementare un pagamento online sfruttando la robusta classe
IPNListenrer che abbiamo costruito insieme.
Non ci resta che testare il funzionamento della procedura di pagamento. Il compito è
reso particolarmente difficile dal fatto che il listener non è una pagina utilizzabile
via browser.
Il suo scopo è di attendere una richiesta ed attuare una serie di procedure in modo
automatico.
Dunque qualsiasi errore si produca nello script non lo potremo visualizzare a
video.
A questo porremo subito rimedio.

Nel frattempo esegui alcuni pagamenti di prova ed assicurati che l'utente venga
inserito nel database e che il pagamento risulti effettivamente nell'account di
simulazione.
Se tutto risulta corretto, siamo già a buon punto. Ma non significa che non vi
siano errori.

Ora vedremo un esempio di quanto potrebbe risultare difficile trovare un eventuale


errore nel codice.
Modifichiamo il metodo isNotProcessed nella classe YIIListener in questo modo:

Arrayprotected function isNotProcessed()Array{Array


$this->dbConnect();Array $sql = "SELECT * FROM utenti WHERE
idTransazione=$_POST[txn_id]";Array $res =
Pagina 2 di 5

mysql_query($sql, $this->conn);Array
if(mysql_num_rows($res))Array {Array return
FALSE;Array }Arrayreturn TRUE;Array}Array

Cosa abbiamo fatto? Semplice abbiamo tolto gli apici a $_POST[tnx_id] nella query,
ma l'id della transazione è una stringa; questo solleverà un errore di livello
warning.
Se proviamo a fare un pagamento con questa modifica, la procedura va a buon fine,
perchè?

• L' esecuzione della query produrrà una risorsa non valida quindi
$res sarà FALSE
• mysql_num_rows(FALSE) ritornerà FALSE
• Quindi isNotProcessed ritornerà sempre TRUE
• Di conseguenza isNotProcessed non controllerà un bel niente

Non ce ne accorgiamo in quanto tutto funziona regolarmente. Ma se il metodo


ritorna sempre TRUE, chiaramente non fa il suo lavoro.
Se si trattasse di una pagina comune, da utilizzare via browser, vedremmo il
warning e capiremmo subito che c'è qualcosa che non va; ma in questo caso come
potremmo fare?

Leggere l'error_log del webserver

La prima cosa da fare, una volta che avremo eseguito alcuni pagamenti di test, è
andare a leggere il log degli errori del webserver (ti consiglio di farlo periodicamente
a prescindere dall'argomento contingente, è incredibile quante cose si possono
scoprire). Dove venga salvato questo log dipende molto dal tipo e dall'impostazione
del server, comunque generalmente si trova in /var/log/httpd/. Nel file "error_log"
vengono salvati tutti gli errori di qualsiasi livello sollevati da PHP.
Ora, se hai fatto un pagamento con il metodo isNotProcessed modificato, questo file
conterrà una riga simile a questa:

[Fri Sep 17 15:19:57 2010] [error] [client 216.113.191.33] PHP Warning:


mysql_num_rows(): supplied argument is not a valid MySQL result resource in
/home/virtual/site325/fst/var/www/html/Test/YIIListener.php on line 23

Quanto basta per metterci in allarme e consentirci di trovare l'errore.


Pagina 3 di 5

Dunque, dopo alcuni pagamenti di test, il file error_log non deve contenere
nessun errore sollevato dal listener (nemmeno un notice!).

Controllare il corretto funzionamento delle verifiche

isVerifiedIPN
Per controllare l'effettivo funzionamento di questo metodo, non dobbiamo fare altro
che inviare dei dati con il metodo POST al listener. Per fare questo, basterà un
semplice form che punta alla pagina YIIListener.php:

Array<form action="http://www.sito.com/Test/YIIListener.php"
method="POST">Array <input type="hidden" value="50.00"
/>Array <input type="hidden"
value="utente_1284367085_per%40bluewin.ch" name="payer_email"
/>Array <input type="hidden" value="Maurizio" />Array
<input type="hidden" value="Tarchini" />Array <input
type="hidden" value="2S978310JP2093304" name="txn_id" />Array
<input type="submit" value="invia" />Array</form>Array

Inviando questa richiesta, nessun utente dovrà essere aggiunto al database, e


dovremmo ricevere un email di rapporto.

isVerifiedAmmount
Per la verifica del funzionamento di questo controllo, basterà modificare il parametro
AMMOUNT nel file di configurazione. AMMOUNT contiene il valore del pagamento
che ci aspettiamo (50.00).
La verifica non andrà a buon fine in quanto la notifica contiene 50.00 e AMMOUNT
ora contiene un altro valore.
Nessun utente dovrà essere aggiunto al database.

isPrimaryPayPalEmail
Per la verifica del funzionamento di questo controllo, basterà modificare il parametro
PRIMARY_SANDBOX_EMAIL nel file di configurazione. In questo modo l'email
inviato nella notifica da PayPal risulterà diverso da quello che ci attendiamo, dunque
la verifica non andrà a buon fine
Nessun utente dovrà essere aggiunto al database.

isCompleted
Per verificare il corretto funzionamento di questo controllo, logghiamoci su Sandbox.
E ora, nella colonna Payment Review clicca su disabled per rendere questa
Pagina 4 di 5

proprietà attiva (enabled).


In questo modo simuliamo un processo di pagamento che riamane in fase di
revisione (pending).

Provando ad effettuare il pagamento, nessun utente dovrà essere aggiunto al


database. Nell'account admin, il pagamento risulterà correttamente in stato Pending
.

Alla fine di questa serie di controlli, verifica ancora una volta il file error_log che
come detto non deve contenere nessun errore sollevato dal listener.

Conclusione

In questa serie di articoli abbiamo visto nei dettagli come procedere all'elaborazione
di un pagamento online allo scopo di concedere un instant access.
A questo punto la materia non avrà più segreti per te. Quindi nel prossimo articolo
svilupperemo un e-commerce completo (scherzavo).
Nel prossimo articolo vedremo come implementare un bottone di pagamento
dinamicamente, quindi senza utilizzare il comodo ma limitato sistema che abbiamo
visto.

E il tuo listener funziona?

Articoli di questa guida


Pagina 5 di 5

1. Preparazione
2. Chiarirsi le idee
3. Le procedure generali
4. Le procedure specifiche
5. Testare l'applicazione
6. Creare dinamicamente i pulsanti di pagamento

Author : Yong Mook Kim

Website : http://www.mkyong.com/blog/adsense-daemon-wordpress-plugin/ -->

Potrebbero piacerti anche