Visualizzazione dei risultati da 1 a 9 su 9
  1. #1
    Utente di HTML.it
    Registrato dal
    Apr 2008
    Messaggi
    170

    PayPal Payment Standard

    Ciao a tutti, spero di essere nella sezione giusta...

    devo realizzare un modulo di pagamento per un e-commerce che permetta di pagare con PayPal.
    Mi sono iscritto a PayPal e ho seguito tutte le istruzioni che ho trovato a riguardo e, se si tratta di realizzare un pulsante normale non ci sono problemi.

    I problemi mi sorgono realizzando un "pulsante" crittografato...

    PayPal spiega come generare la chiave privata ed il relativo certificato pubblico e caricare tutto su PayPal.

    Ma a questo punto non capisco come fare a crittografare i dati al momento del checkout...

    Qualcuno si è già trovato in questa situazione?

    Grazie a chiunque si interessasse.

  2. #2
    perché devi fare tutto questo?

    è molto più semplice, sicuro ed immediato usare un form in chiaro ma abilitare le IPN

    in questo modo nel momento in cui viene effettuata la conferma del checkout carichi i dati sul database segnando che devono essere pagati e non associandoli a nessuna transazione ... quando ti arriva la chiamata delle IPN allora leggi la transazione, la salvi su db, ed aggiorni lo stato del pagamento.

    Nel momento in cui ti viene notificato lo stato di "pagamento", effettui le operazioni che faresti normalmente per gestire l'ordine una volta pagato (mandi le email, ti fai avvisare in automatico ... insomma ... quello che vuoi fare normalmente)
    The fastest Redis alternative ... cachegrand! https://github.com/danielealbano/cachegrand

  3. #3
    Utente di HTML.it
    Registrato dal
    Apr 2008
    Messaggi
    170
    Grazie per la risposta.

    Mi baso sul fatto che parecchi opensource e-commerce che ho analizzato per realizzare il mio, utilizzano la crittografia dei dati come metodo di sicurezza per accettare pagamenti su paypal.


    Se passo i dati in chiaro, non è possibile che qualcuno, intercettando il form, possa cambiarne i dati?
    Se ad esempio cambia la email d'iscrizione a paypal, il pagamento verrà inviato ad un altro utente paypal.

    Detto questo.
    Ho letto della IPN ma non mi è chiaro cosa devo fare...
    Praticamente, in un campo inpuit del form d'acquisto devo passare il percorso ad un file che paypal esegue in background al momento del pagamento, giusto?

    Può questo essere un file php?
    le variabili dell'acquisto le recupero da $_POST?


    Grazie per il tuo supporto.

  4. #4
    Certo, usano la crittografia perché non usando IPN sarebbero delle groviere che camminano

    Ma usando le IPN PayPal ti ritorna indietro la tua richiesta e quindi la puoi tranquillamente controllare tutto quello che vuoi

    in generale quello che controllo io è l'importo perché se l'importo è uguale a quello segnato nell'ordine allora l'ordine è pagato interamente altrimenti segno la transazione ma notifico che il pagamento non è valido (sia all'utente sia all'amministratore)

    non ti serve controllare altro oltre all'importo perché se tu carichi al momento della conferma dell'ordine i dati sul database, li hai scritti tutti li e se ti corrisponde l'importo (che poi intendiamoci, è l'unica cosa che qualcuno vorrebbe cambiare) vuol dire che il pagamento è apposto

    Certo, qualcuno potrebbe alterare le quantità od i prodotti che vengono inviati a paypal, ma questo è un problema? No, perché tu questi dati li hai scritti sul database e a quelli ti devi attenere.
    Inoltre conservandoti la richiesta relativa alla transazione, se per caso qualcuno ci gioca e poi si lamenta tu lo puoi scoprire nell'arco di pochi secondi. (personalmente mi serializzo per intero il $_POST della richiesta IPN nel db insieme alle informazioni sulla transazione)

    Per usare le IPN devi passare una url che indica quale pagina deve ricevere la notifica del pagamento (IPN => Instant Payment Notification => Notifica Istantanea del Pagamento) ... pagina che, una volta effettuato il pagamento su paypal, o una volta annullata la transazione, sarà richiamata e ti sarà notificata la situazione.

    Il file può tranquillamente essere un file php ... anzi ... DEVE essere una pagina che può gestire i dati quindi PHP (o jsp, o cgi, o pl, o asp o qualsiasi altra cosa ... basta che sia in grado di smistare la richiesta)

    Sul sito di paypal ci sono degli esempi in PHP che riportano a grandi linee le operazioni che devi fare per gestire le transazioni correttamente con le IPN

    Personalmente:
    - la prima cosa che faccio è di salvarmi la richiesta sul database
    - poi verificare se la richiesta che mi è stata effettuata è valida (chiunque potrebbe richiamare la pagina ovviamente, ma paypal ha un meccanismo di verifica che ti permette di accertarti della situazione), di conseguenza mi segno che è valida
    - mi controllo gli importi e le valute, facendo eventualmente, la conversione in base a delle tabelle che aggiorno giornalmente in automatico
    - mi controllo l'indirizzo e-mail del ricevente del pagamento
    - ed infine controllo lo stato/tipo dell'operazione (pagamento effettuato, pagamento annullato, rimborso, e-check e via dicendo)

    Qui qualche informazione utile
    https://www.paypal.com/it/ipn
    https://www.paypal.com/it/cgi-bin/we...n-info-outside
    https://www.paypalobjects.com/WEBSCR...ationGuide.pdf
    https://cms.paypal.com/cgi-bin/marke...n_code_samples

    L'esempio, specificatamente per php, lo trovi qui:
    https://cms.paypal.com/cms_content/U...IPN_PHP_41.txt

    Come vedi, c'è spiegato passo passo cosa fare

    // check the payment_status is Completed
    // check that txn_id has not been previously processed
    // check that receiver_email is your Primary PayPal email
    // check that payment_amount/payment_currency are correct
    // process payment
    ovvero
    // Controlla che il valore della variabile $_POST['payment_status'] sia Completed
    // Controlla che la variabile $_POST['txn_id'] non sia stata precedentemente processata
    // Controlla che il valore della variabile $_POST['receiver_email'] corrisponda al valore del tuo indirizzo e-mail su paypal (è il ricevente del pagamento, caso mai qualcuno alterasse questo valore per ricevere i soldi su un proprio conto)
    // Controlla che il valore della variabile $_POST['payment_amount'] corrisponda all'importo dell'ordine e che il valore della variabile $_POST['payment_currency'] corrisponda alla valuta selezionata da te (altrimenti tu metti EUR, qualcuno lo cambia per dire in YEN e non paga nulla praticamente ) .... se ti interessa gestire valute di tipo diverse devi effettuarti la conversione ... utile per i pagamenti internazionali
    // Infine gestisci normalmente il pagamento
    The fastest Redis alternative ... cachegrand! https://github.com/danielealbano/cachegrand

  5. #5
    Utente di HTML.it
    Registrato dal
    Apr 2008
    Messaggi
    170
    Ti ringrazio infinitamente!

    E' tutta la mattina che cerco di capire come cavolo realizzare un crittografia sui dati del form che si genera con il carrello per poi passarlo a paypal senza venirne a capo (ho trovato una strada in JAVA ma... non ne capisco, dovrei studiarmi il linguaggio da zero) e il metodo che mi suggerisci tu permette di effettuare dei controlli sulla transazione pressochè completi quindi... Ti ringrazio infinitamente!
    Ora mi ci metto, devo modificare un po la gestione del carrello e la generazione degli ordini per renderla compatibile al processo.

    Grazie ancora!

  6. #6
    Utente di HTML.it
    Registrato dal
    Apr 2008
    Messaggi
    170
    Fatto... tutto bene... se non fosse che il file IPN mi esegue il codice che ho scritto nella condizione:

    if (strcmp ($res, "VERIFIED") == 0) {
    .....
    }


    e non quello in:


    else if (strcmp ($res, "INVALID") == 0) {
    .....
    }


    Non capisco per quale motivo...
    mi potresti aiutare?

  7. #7
    ehm, non ho capito

    considera che se lo richiami manualmente tu questo codice fallirà sempre perché lui si connette a paypal per assicurarsi che i dati che gli passi siano corretti e reali

    se vuoi fare i test, attivati il servizio sandbox e fai i test tramite lui
    https://developer.paypal.com/
    The fastest Redis alternative ... cachegrand! https://github.com/danielealbano/cachegrand

  8. #8
    Originariamente inviato da daniele_dll

    in generale quello che controllo io è l'importo perché se l'importo è uguale a quello segnato nell'ordine allora l'ordine è pagato interamente altrimenti segno la transazione ma notifico che il pagamento non è valido (sia all'utente sia all'amministratore)

    non ti serve controllare altro oltre all'importo perché se tu carichi al momento della conferma dell'ordine i dati sul database, li hai scritti tutti li e se ti corrisponde l'importo (che poi intendiamoci, è l'unica cosa che qualcuno vorrebbe cambiare) vuol dire che il pagamento è apposto


    ***DEVI*** controllare anche l'email a cui il pagamento è inviato, perché io potrei inviare un pagamento dell'importo corretto ma ad un mio conto paypal semplicemente cambiando il valore di "business" nel form.
    Ciao!

  9. #9
    Originariamente inviato da fmortara


    ***DEVI*** controllare anche l'email a cui il pagamento è inviato, perché io potrei inviare un pagamento dell'importo corretto ma ad un mio conto paypal semplicemente cambiando il valore di "business" nel form.


    ho dimenticato a scriverlo anche li, sotto poi ho dato le indicazioni complete
    The fastest Redis alternative ... cachegrand! https://github.com/danielealbano/cachegrand

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.