2010-06-08 13 views
5

Ya tengo un pago exprés integrado con mi aplicación Codeigniter. Ahora quiero integrar el paypal sin fisuras donde recopilo la información CC y la paso a Paypal (a través de back-end) y una vez que todo está aprobado, mi aplicación lo muestra al usuario. Todo esto sin tener que ir al sitio web de Paypal.Paypal Payflow pro library

Sé que Paypal ofrece un montón de código de muestra, pero tienen tantos productos diferentes que hacen publicidad para hacer lo mismo.

¿Hay alguna biblioteca de envoltura en PHP que pueda usar para manejar todo esto?

¿Qué tipo de decisión de diseño implica la migración a dicho sistema? ¿Necesitaría certificados SSL para esto?

Respuesta

2

Creé un sitio de comercio electrónico en CodeIgniter, también haciendo integración perfecta de Paypal.

No parecía haber envoltorios orientados a objetos suuuuuuuuuuuper bonitos por ahí cuando hice mi búsqueda, pero sí noté algunos buenos intentos.

Mi solución terminó siendo un poco soso. He descargado la API de PHP desde aquí: https://cms.paypal.com/cms_content/US/en_US/files/developer/PP_PHP_NVP_Samples.zip

me guardó el archivo CallerService.php como application/helpers/paypal_helper.php y añadieron a application/config/autoload.php de llevarlo a cabo en la aplicación.

Ahora, CallerService.php requiere constants.php, por lo que debe copiarlo y pegarlo, o incluir el archivo constants.php en su directorio de ayudantes. Acabo de copiar y pegar. Luego, asegúrese de configurar todas las constantes para su cuenta.

Una vez que se ha configurado, mi código sólo se veía así:

$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']. 
    } 

No es demasiado elegante, pero definitivamente funciona bien.

Además, DEFINITIVAMENTE necesita un certificado SSL. Estos se pueden comprar por $ 30 o más por un solo dominio. Al principio son un poco difíciles de configurar, pero no puede omitir este paso. SSL protege la transmisión entre la computadora del cliente y su servidor, por lo que su información de CC no puede leerse a medida que pasa por todos los servidores y enrutadores (o detectados a través de wifi) en el camino. Por lo tanto, solo asegúrese de que, en el formulario que utiliza para tomar la información CC, el formulario se envíe a https: // y no a un http no garantizado.

+1

Gracias Alan! Eso es lo que estaba buscando ... me ayudaría mucho comenzar con este pensamiento y quizás crear una buena versión de envoltura que también podamos usar en futuros proyectos de CI. Si tiene otros consejos/consejos/cosas para no caer, por favor hágamelo saber. – Obaid

0

Estoy bastante seguro de que no importa si su sitio web está tomando datos confidenciales (es decir, número de tarjeta de crédito), entonces necesita un certificado SSL. A menos que estén en el servidor de otra persona (paypal.com), debe encargarse de eso. Y, como dijiste, no quieres enviarlos a paypal.com, así que sí, necesitarás uno.

Además, si ya tiene el pago exprés integrado, debe usar un certificado SSL para eso de todos modos, ¿verdad?