2010-06-08 14 views
5

Ho già un controllo espresso integrato con la mia applicazione Codeigniter. Ora voglio integrare senza problemi paypal dove raccolgo le informazioni del CC e lo passo a Paypal (tramite back-end) e una volta che tutto è stato approvato, la mia applicazione lo mostra all'utente. Tutto questo senza mai andare sul sito di Paypal.Libreria Paypal Payflow pro

So che Paypal fornisce una serie di codice di esempio ma hanno così tanti prodotti diversi che pubblicizzano per fare la stessa cosa.

C'è una libreria di wrapper in PHP che posso usare per gestire tutto questo?

Che tipo di decisione di progettazione è coinvolta nella migrazione a tale sistema? Avrei bisogno di certificati SSL per questo?

risposta

2

Ho costruito un sito di e-commerce in CodeIgniter, anche facendo integrazione perfetta con Paypal.

Non sembra che ci fossero involucri orientati agli oggetti suuuuper piuttosto begli quando ho fatto la mia caccia, ma ho notato alcuni buoni tentativi.

La mia soluzione è stata un po 'insipida. Ho scaricato l'API di PHP da qui: https://cms.paypal.com/cms_content/US/en_US/files/developer/PP_PHP_NVP_Samples.zip

ho salvato il file CallerService.php come application/helpers/paypal_helper.php e ha aggiunto a application/config/autoload.php per tirarlo in app.

Ora, richiede constants.php, quindi è necessario copiarlo e incollarlo oppure includere il file constants.php nella directory dell'help. Ho appena copiato e incollato. Quindi, assicurati di configurare tutte le costanti per il tuo account.

Una volta impostato, il mio codice appena si presentava così:

$nvp_query_string = '&PAYMENTACTION=Sale' 
       . '&AMT='.urlencode($order->total) 
       . '&CREDITCARDTYPE='.urlencode($this->input->post('credit_card_type')) 
       . '&ACCT='.urlencode($this->input->post('acct')) 
       . '&EXPDATE='.urlencode(str_pad($this->input->post('exp_date_month'), 2, '0', STR_PAD_LEFT).'20'.$this->input->post('exp_date_year')) 
       . '&CVV2='.urlencode($this->input->post('cvv2_number')) 
       . '&FIRSTNAME='.urlencode($first_name) 
       . '&LASTNAME='.urlencode($last_name) 
       . '&STREET='.urlencode($order->billing_address_1) 
       . '&CITY='.urlencode($order->billing_city) 
       . '&STATE='.urlencode($order->billing_state) 
       . '&ZIP='.urlencode($order->billing_zip) 
       . '&COUNTRYCODE=US&CURRENCYCODE=USD'; 

    $response = hash_call('doDirectPayment', $nvp_query_string); 
    if (strpos(strtoupper($response['ACK']), 'SUCCESS') !== false) { 
    // Product purchase was successful. 
    } 
    else { 
    // Product purchase was unsuccessful. 
    // The Paypal response will be in $response['ACK']. 
    // The Paypal error message to show the customer will be in $response['L_LONGMESSAGE0']. 
    } 

Non è troppo elegante, ma funziona decisamente bene.

Inoltre, è SICURAMENTE necessario un certificato SSL. Questi possono essere acquistati per $ 30 circa per un singolo dominio. All'inizio sono un po 'difficili da configurare, ma non puoi saltare questo passaggio. SSL protegge la trasmissione tra il computer del cliente e il server, quindi le informazioni CC non possono essere lette mentre passa attraverso tutti i server e router (o annusato tramite wifi) lungo la strada. Assicurati, quindi, che nel modulo utilizzato per le informazioni CC, il modulo venga inviato a https: // e non a un http non protetto: //.

+1

Grazie Alan! Questo è quello che stavo cercando .. mi avrebbe aiutato molto a partire da questo pensiero e forse creare una bella lib wrapper che possiamo usare anche nei futuri progetti di CI. Se avete altri suggerimenti/suggerimenti/cose da non cadere in, per favore fatemelo sapere. – Obaid

0

Sono sicuro che, indipendentemente dal fatto che il tuo sito Web stia utilizzando dati sensibili (ad esempio il numero di carta di credito), è necessario un certificato SSL. A meno che non siano sul server di qualcun altro (paypal.com), è necessario prendersene cura. E, come hai detto tu, non vuoi mandarli su paypal.com, quindi sì, ne avrai bisogno.

Inoltre, se hai già integrato il checkout rapido, dovresti comunque utilizzare un certificato SSL per quello, giusto?