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:

protected function isNotProcessed()
{
    $this->dbConnect();
    $sql = "SELECT * FROM utenti WHERE idTransazione=$_POST[txn_id]";
    $res = mysql_query($sql, $this->conn);
    if(mysql_num_rows($res))
    {
        return FALSE;
    }
return TRUE;
}
 

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]

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

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

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

  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
Tag: ,

L'autore

Maurizio è sposato con la triade PHP - MySql - Apache e, non pago, ha un'amante chiamata jQuery. Ha un blog dove cerca di descrivere nei minimi particolari sia la moglie che l'amante. La sua vera specialità è la realizzazione di gestionali complessi anche se non rifiuta mai un sito web. +

Sito web dell'autore | Altri articoli scritti da

Articoli correlati

Potresti essere interessato anche ai seguenti articoli:

52 commenti

Trackback e pingback

  1. Tweets that mention Come implementare un pagamento online: Testare l’applicazione (5/6) | Your Inspiration Web -- Topsy.com
    [...] This post was mentioned on Twitter by Cifra Web Master, Manuel Molossi and Your Inspiration Web, mtx_maurizio. mtx_maurizio said:…
  2. Come implementare un pagamento online: Le procedure specifiche (4/6) | Your Inspiration Web
    [...] Testare l’applicazione [...]
  3. Come implementare un pagamento online: Creare un bottone dinamicamente (6/6) | Your Inspiration Web
    [...] Testare l’applicazione [...]
  4. Come implementare un pagamento online: chiarirsi le idee (2/6) | Your Inspiration Web
    [...] Testare l’applicazione [...]
  5. Come implementare un pagamento online: Preparazione (1/6) | Your Inspiration Web
    [...] Testare l’applicazione [...]