questo è il tipico flusso di un pagamento con Paypal, almeno dal punto di vista dell'utente
dal nostro punto di vista, quello dello sviluppatore, c'è un fattore in più: abbiamo bisogno di fare una "conversazione" server2server con Paypal per utilizzare l'IPN (Instant Payment Notification), che ci consente di sapere se l'utente ha pagato, senza aspettare che torni sul nostro sito (dove potrebbe anche non tornare, dopo il pagamento)
questi sono i 3 plugin che abbiamo bisogno di installare
questa è la semplice configurazione che dobbiamo inserire in app.yml I valori vanno ovviamente adattati col proprio account di Paypal (sia quello vero che quello di sandbox). Le 3 rotte vanno definite, ovviamente con nomi a piacere.
Sarebbe bene definire un modello in cui memorizzare anche nel nostro server le transazioni di Paypal, magari con un riferimento all'ID della transazione di Paypal stesso. In questo esempio ho chiamato il modello "Purchase". Questo metodo serve per ottenere un oggetto sfPaymentTransaction
Nel controllore istanzio Purchase e ottengo l'oggetto per la transazione
La vista è molto semplice, l'unica personalizzazione possibile è l'etichetta del pulsante
Questo è il cuore del funzioonamento: l'azione a cui corrisponde la rotta @paypal_ipn vista prima. Qui gestiamo l'interazione col server di Paypal e memorizziamo il risultato nel nostro modello Purchase.