eduardo185
Usuario (México)

Que tal amigos, soy originario de México específicamente del estado de Guerrero, hace un año y dos meses termine de estudiar una maestría en ciencias de la computación por parte del programa de posgrados del CINVESTAV IPN. Al aburrirme de tanta escuela (y no querer seguir con el doctorado ) me incorpore al sector laboral, para esto me traslade a la capital (El MAGNIFICO Distrito Federal ). Cierto día en el trabajo me pidieron que desarrollara una metodología de cobro mediante Paypal para realizar los cargos de nuestros servicios a nuestros clientes, como me quedo la costumbre de documentar todo lo desarrollado, les comparto lo que investigue y el proceso que hice para desarrollar este sistema, espero que les sirva de ayuda... 1. INTRODUCCIÓN Paypal es una empresa estadounidense perteneciente al sector del comercio electrónico por Internet que permite la transferencia de dinero entre usuarios funcionando como alternativa al tradicional método en papel como los cheques o giros postales. Paypal procesa peticiones de pago en comercio electrónico y otros servicios web, por los que cobra un porcentaje. En este documento se muestran y detallan los pasos necesarios para crear un botón de compra mediante Paypal, en el que los datos que enviamos se encuentran cifrados y firmados, de forma que nadie pueda ver ni modificar esa información. Básicamente existen dos formas de generar botones en Paypal: i) de manera estática, ii) de manera dinámica. La documentación de Paypal ofrece información acerca de cómo crear botones de pago estáticos utilizando sus propias herramientas. El problema de utilizar la herramienta de Paypal radica en que se debe crear un botón por cada usuario y para cada servicio que necesitemos vender, algo que no es funcional para el caso que tratamos ya que deberíamos crear cientos de botones. Al generar los botones dinámicamente se pueden hacer más seguros de tal modo que no se puedan modificar por algún usuario experimentado (i.e, el importe a cobrar). 2. METODOLOGÍA A continuación se describen los pasos a seguir para crear un botón de compra segura en Paypal, cabe mencionar que la metodología descrita está dirigida para el ambiente de prueba de Paypal (Sandbox), cuando todo funcione de manera correcta dentro del ambiente de prueba se puede generar una cuenta real, para esto la empresa necesita dar de alta sus datos de manera formal y generar una cuenta empresarial en la página principal de Paypal. 2.1 ABRIR UNA CUENTA DE DESARROLLADOR Paypal ofrece un entorno para desarrolladores en el que podemos crear usuarios de prueba y realizar todas las acciones normales de compra-venta. Salvo que nada de lo que hagamos reducirá el saldo real de nuestra tarjeta de crédito o debito. Lo primero que debemos hacer es crear una cuenta en el entorno de prueba de Paypal, para lo cual abriremos la siguiente url: https://developer.paypal.com/. Imagen I - Pagína principal de desarrollo de Paypal. Pulsamos el botón Sign Up e introducimos los datos necesarios para crear una cuenta empresarial. Imagen II - Pagína de registro de nuevos usuarios. Una vez creada la cuenta recibiremos un correo electrónico con un enlace que deberemos abrir para activarla, con esto podemos entrar en el entorno de pruebas utilizando el mail y el password que hayamos introducido. El siguiente paso será crear dos usuarios para realizar nuestras pruebas: un vendedor (merchant account) y un cliente (buyer account). Para ello, dentro del menú applications seleccionamos la opción Sandbox accounts y creamos las nuevas cuentas pulsando en botón Create account. Imagen III - Pagína de registro para cuentas Sandbox. Una vez que hemos creado las cuentas de vendedor y cliente estamos listos para probar nuestro ambiente de pruebas, pero antes de esto habrá que realizar unos pequeños pasos. Imagen IV - Listado de cuentas Sandbox. 2.2.2 CREACIÓN DEL CERTIFICADO Para poder enviar los datos de compra cifrados de Paypal se debe generar un certificado mediante openssl y asociarlo a nuestro usuario de prueba. Para esto es necesario tener openssl funcionando, cualquier sistema Linux lo tendrá instalado por defecto, en caso de manejar Windows es necesario instalar dicha librería. 2.2.1 INSTALACIÓN DE OPENSSL PARA WINDOWS OpenSSL es un proyecto de open-source escrito en lenguaje C que implementa funciones criptográficas, entre ellas la generación de claves RSA. Una característica interesante de este software es su condición multiplataforma y su constante actualización. A continuacion se muestran la URL de Shining Light Productions donde pueden descargar los archivos. Es recomendable hacerlo desde este sitio web porque se encuentran en el mismo lugar los dos archivos necesarios: el programa y la librería C++. Imagen V - Página web de Shining Light Productions. Una vez instalado Openssl desde una terminal Windows o Linux generamos los certificados de Paypal de la siguiente manera: 1) openssl genrsa -out my-prvkey.pem 1024 2) openssl req -new -key my-prvkey.pem -x509 -days 365 -out my-pubcert.pem Donde: my-prvkey.pem es nuestra llave privada. my-pubcert.pem es nuestro certificado public. Este certificado publico es solamente valido por 365 días, por consiguiente el certificado publico se debe volver a generar cada año, para no tener algún problema. 2.3 ASOCIACIÓN DEL CERTIFICADO Una vez creados el certificado esté debe asociarse a la cuenta de nuestro usuario vendedor (merchant account). Para esto entramos al sitio de prueba de Paypal https://www.sandbox.paypal.com/ e introducimos el mail y password que registramos para nuestro usuario vendedor. Una vez logueados dentro de la pestaña My account pulsamos sobre el menú Profile -> My Settings -> Preferred language y cambiamos a español, realizada esta acción se mostrará un resumen del perfil de usuario y en la sección "Preferencias de ventas" seleccionamos "Configuración de pago codificado". Añadimos el certificado público que hemos generado antes (my-pubcert.pem) para firmar los datos que enviemos y descargamos el certificado público de Paypal (paypal_cert_pem.txt) para cifrar los datos que enviemos. A través del id. de certificado generado enviaremos un formulario de compra mediante PHP para realizar una compra segura. La Imagen inferior muestra el listado de certificados públicos que tenemos para nuestra cuenta de vendedor, así como también la parte en donde es posible descargar el certificado público de Paypal para la codificación los datos que enviamos a través del formulario. Imagen VI - Certificados públicos i) Paypal, ii) Cuenta de vendedor. GENERACIÒN DE FORMULARIO DE COMPRA Como se menciono anteriormente utilizaremos PHP para generar nuestro formulario de compra con botones encriptados, el siguiente código ofrece un claro ejemplo de cómo implementar dicho formulario. La función paypal_encrypt() acepta un arreglo asociativo como entrada y devuelve un texto encriptado utilizando la librería openssl del sistema operativo. Index.php ------------------------------------------------------------------------------------------------------------------------------------------------------------------- ------------------------------------------------------------------------------------------------------------------------------------------------------------------- Imagen VII - Index.php. Dentro del arreglo $form se encuentran los campos return, cancel_return y notify url. La descripcción de éstos se detalla a continuación: 1) retunr: Una vez pulsado el botón de compra y terminada la transacción, si esta fue exitosa Paypal toma el valor de este campo para redirigir al usuario a la URL declarada. 2) cancel_return: El usuario es redirigido a esta URL cuando existe un error en la transacción o cuando el usuario cancela la misma. 3) Notify_url: A esta URL Paypal envía la notificación de pago instantánea (IPN). Está información debe ser procesada para poder realizar las acciones pertinentes y actualizar la información de los usuarios en nuestra base de datos. 2.5 NOTIFICACIÓN DE PAGO INSTANTANEA La Notificación de pago instantánea (IPN) es un servicio de mensaje que notifica los eventos relacionados con una transacción en PayPal. Esta notificación es enviada a una URL (declarada en el campo notify_url) llamada Listener y es la encargada de procesar determinadas acciones dependiendo de la respuesta de PayPal. De esta manera al efectuarse una transacción dicha URL recibirá instantáneamente toda la información relativa a la operación. Hay dos maneras de especificar la URL del nuestro Listener a fin de que PayPal sepa donde enviar las notificaciones IPN. 1. Seleccionando Instant Payment Notification en el perfil de la cuenta y especificando la URL listener y marcando la casilla Activate it. 2. En forma dinámica incluyendo la URL Listener junto con los datos al solicitar un pago (declarándola en el campo notify_url de nuestro formulario). En nuestro ejemplo utilizaremos la segunda opción, especificando la URL Listener junto con los datos de la solicitud de pago. Lo que debemos hacer es crear una solicitud HTTP POST con todos los parámetros que nos ha enviado Paypal para poder reenviarle dichos datos. Paypal verificara esos datos y si todo ha ido bien recibiremos un VERIFIED y podremos aceptar esa transacción como válida y hacer el procesado que estimemos oportuno. Como se menciono anteriormente, PayPal nos enviará la información por medio de $_POST. Así que, como primer filtro validamos que exista $_POST para poder continuar. Después de eso, la información que nos llega directamente la convertiremos en un string de valores GET, comenzando por ‘cmd=_notify-validate’. paypalipn.php ------------------------------------------------------------------------------------------------------------------------------------------------------------------- -------------------------------------------------------------------------------------------------------------------------------------------------------------------- Imagen VIII - paypalipn.php. Ahora que ya tenemos nuestro String, configuremos el envió de la información a Paypal para posteriormente, enviarla. paypalipn.php ------------------------------------------------------------------------------------------------------------------------------------------------------------------- ------------------------------------------------------------------------------------------------------------------------------------------------------------------- Imagen IX - paypalipn.php. Bien, en este punto, hemos recibido la información, y tal como ha llegado le hemos solicitado a PayPal una confirmación de que el envío es suyo. PayPal nos envia nuevos datos con los que podemos comprobar si nos confirma su veracidad o no. Si en la variable $res encontramos VERIFIED, entonces el pago es correcto. De lo contrario, encontraremos INVALID. paypalipn.php ------------------------------------------------------------------------------------------------------------------------------------------------------------------- ------------------------------------------------------------------------------------------------------------------------------------------------------------------- Imagen X - paypalipn.php. Tras realizar estas comprobaciones, hemos tratado los datos de PayPal y realizado el procesamiento oportuno de los datos. Sin embargo existen distintas variables $_POST enviadas por Paypal, para poder realizar un filtro que se adapte a cada necesidad se adjunta al documento la lista completa de variables $_POST enviadas por Paypal, así como también el código fuente descrito en este documento. "Dime y lo olvido, enséñame y lo recuerdo, involúcrame y lo aprendo” – Benjamín Franklin QUIEN DESEE EL CÓDIGO FUENTE PUEDO PROPORCIONARLO SOLO PIDANLO, CON GUSTO LO ENVIO GRACIAS POR SUS PUNTOS GRACIAS POR COMENTAR