Ma Isaura Galafate Marque Jose Manuel Llerena Carmona Juan Vzquez Murga a 25 de octubre de 2011
Cap tulo 1
Introduccin o
1.1. Qu es Paypal? e
Paypal perteneciente a Ebay, es una empresa del sector del comercio electrnico que se o dedica en exclusiva al movimiento de dinero entre sus usuarios. No se considera un banco y, por tanto, no se rige por las mismas leyes que stos. Paypal ofrece a sus usuarios una forma e de realizar transacciones gil a travs de internet. Por otro lado, orientado a empresas que a e venden servicios por internet, Paypal les ofrece los siguientes servicios:
Ventas simples o pagos instantneos, productos que ofertan las empresas y cuyos cliena tes pueden realizar el pago a travs de su cuenta con Paypal. e
Donaciones. Organizaciones o empresas que desean ofrecer un servicio de donaciones a sus visitantes y/o clientes.
Carritos de Compra, orientados al sector del Comercio electrnico (tiendas online, ...) o ofrecen una gestin de pagos de los productos que el usuario posee en su carrito. o
Estos servicios ofertados por Paypal conllevan una comisin en forma de porcentaje de o la transaccin realizada y que solo se cargar a la parte que vende u ofrece el servicio en o a cuestin. El funcionamiento de la sincronizacin de Paypal con nuestro sistema es simple, o o en el siguiente grco podremos ver como se realiza. a 1
Figura 1.1: Esquema de interoperabilidad con Paypal. El Instant Payment Notication (IPN), noticacin instantnea de pago conrma que o a el pago se ha realizado a nuestra aplicacin y esta devuelve el OK a Paypal, es lo que se o conoce como la sincronizacin de pago. o
1.2.
Alta en Paypal
El primer paso hacia la integracin de los servicios de Paypal en nuestra aplicacin, es o o darnos de alta. Existen cuatro tipos de cuentas:
Figura 1.2: Esquema de interoperabilidad con Paypal. Claramente, para implantar un sistema de cobros por medio de Paypal, debemos abrirnos una cuenta Premier o Empresas. La diferencia entre ambos, es la posibilidad de administrar usuarios unicamente, asi que, dependiendo de nuestras necesidades elegiremos la que mejor se adapte a nuestra necesidad.
Cap tulo 2
Integracin de Paypal o
Dependiendo del servicio que deseamos ofrecer, tendremos que desarrollar un tipo de formulario adecuado a l. Paypal dispone de un generador automtico de HTML para cada e a uno de los botones necesarios para integrar dichos servicios. Solo debemos indicarle el tipo de botn o servicio que deseamos incluir en nuestra aplicacin y sta herramienta generar el o o e a cdigo HTML que luego incluiremos en el cdigo de nuestra aplicacin. o o o A continuacin, vamos a ver un ejemplo de la generacin de algunos de los servicios que o o ofrece Paypal.
2.1.
Comprar ahora.
< form action =" https :// www . paypal . com / cgi - bin / webscr " method =" post " > <! - - Identify your business so that you can collect the payments . --> < input type =" hidden " name =" business " value =" h e r s c h e l g o m e z @ x y z z y u . com " > <! - - Specify a Buy Now button . --> < input type =" hidden " name =" cmd " value =" _xclick " > <! - - Specify details about the item that buyers will purchase . --> < input type =" hidden " name =" item_name " value =" Hot Sauce -12 oz . Bottle " > < input type =" hidden " name =" amount " value ="5.95" > < input type =" hidden " name =" currency_code " value =" USD " > <! - - Display the payment button . --> < input type =" image " name =" submit " border ="0" src =" https :// www . paypal . com / en_US / i / btn / btn_buynow_LG . gif " alt =" PayPal - The safer , easier way to pay online " > < img alt ="" border ="0" width ="1" height ="1" src =" https :// www . paypal . com / en_US / i / scr / pixel . gif " > </ form >
Formulario de Donacin o
< form action =" https :// www . paypal . com / cgi - bin / webscr " method =" post " > <! - - Identify your business so that you can collect the payments . --> < input type =" hidden " name =" business " value =" d o n a t i o n s @ k c p a r k f r i e n d s . org " > <! - - Specify a Donate button . --> < input type =" hidden " name =" cmd " value =" _donations " > <! - - Specify details about the contribution --> < input type =" hidden " name =" item_name " value =" Friends of the Park " > < input type =" hidden " name =" item_number " value =" Fall Cleanup Campaign " > < input type =" hidden " name =" currency_code " value =" USD " > <! - - Display the payment button . --> < input type =" image " name =" submit " border ="0" src =" https :// www . paypal . com / en_US / i / btn / btn_donate_LG . gif " alt =" PayPal - The safer , easier way to pay online " > < img alt ="" border ="0" width ="1" height ="1" src =" https :// www . paypal . com / en_US / i / scr / pixel . gif " > </ form >
Formulario de Subscripcin. o
< form action =" https :// www . paypal . com / cgi - bin / webscr " method =" post " > <! - - Identify your business so that you can collect the payments . --> < input type =" hidden " name =" business " value =" alice@mystore . com " > <! - - Specify a Subscribe button . --> < input type =" hidden " name =" cmd " value =" _xclick - subscriptions " > <! - - Identify the subscription . --> < input type =" hidden " name =" item_name " value =" Alice s Weekly Digest " > < input type =" hidden " name =" item_number " value =" DIG Weekly " > <! - - Set the terms of the regular subscription . --> < input type =" hidden " name =" currency_code " value =" USD " > < input type =" hidden " name =" a3 " value ="5.00" > < input type =" hidden " name =" p3 " value ="1" > < input type =" hidden " name =" t3 " value =" M " > <! - - Display the payment button . --> < input type =" image " name =" submit " border ="0" src =" https :// www . paypal . com / en_US / i / btn / b t n _ s u b s c r i b e _ L G . gif " alt =" PayPal - The safer , easier way to pay online "/ > < img alt ="" border ="0" width ="1" height ="1" src =" https :// www . paypal . com / en_US / i / scr / pixel . gif " / > </ form >
Todo este codigo HTML es generado automticamente por la herramienta de integracin a o que ofrece Paypal a sus usuarios. Por tanto, slo tendremos que ir a nuestra cuenta y en dicha o herramienta indicar el servicio que deseamos integrar indicando nuestros datos y copiar el cdigo generado en nuestra aplicacin. o o
Cap tulo 3
Para integrar Paypal en un proyecto desarrollado bajo el framework Ruby on Rails existen numerosas gemas o plugins que nos facilitan en gran medida esta labor. Por poner un ejemplo, si nos vamos a cualquier terminal y escribimos la siguiente orden:
gem list -- remote | grep paypal
Podremos ver una lista de gemas que se dedican a integrar aplicaciones con Paypal. Para este tutorial vamos a basarnos en una gema que es usada en conocidos proyectos de Ruby on Rails llamada ActiveMerchant.
3.2.
A continuacin, vamos a ver como en una serie de pasos podemos integrar la gema o ActiveMerchant en nuestro proyecto. En este tutorial, vamos a implantar un carro de la compra desde la instalacin de la gema hasta su integracin con el modelo. o o
3.2.1.
Instalacin o
Con este comando automticamente se aadir la gema al listado disponible para nuestro a n a proyecto.
3.2.2.
Conguracin o
El siguiente paso tras instalar la gema es indicar los datos de la cuenta de Paypal con la que gestionaremos los pagos de nuestro producto o servicio a nuestros clientes. Para ello, vamos a los archivos de entorno que se encuentran en RAILS ROOT/conf/environment/. Para cada entorno indicaremos una conguracin distinta dependiendo de si es entorno de o produccin, desarrollo o testing. o cong/environment/development.rb
cong/environment/test.rb
config . a f t e r _ i n i t i a l i z e do Acti veMerch ant :: Billing :: Base . mode = : test :: GATEWAY = ActiveMe rchant :: Billing :: BogusGateway . new end
cong/environment/production.rb
config . a f t e r _ i n i t i a l i z e do Acti veMerch ant :: Billing :: Base . mode = : production :: GATEWAY = ActiveMe rchant :: Billing :: PaypalGateway . new ( : login = > " s e l l e r _ 1 2 2 9 8 9 9 1 7 3 _ b i z _ a p i 1 . railscasts . com " , : password = > " F X WU 5 8 S 7 K X F C 6 H B E " , : signature = > " AGjv6SW . mTiKxtkm6L9DcSUCUgePAUDQ3L - k T d s z k P G 8 m R f j a R Z D Y t S u " ) end
Una vez establecida la conguracin para cada entorno, debemos congurar los parmeo a tros de inicializacin de la gema. Esto se realiza aadiendo la siguiente linea al archivo o n conf/environment.rb:
config . gem " acti vemerch ant " , : lib = > " a ct iv e _m er ch a nt " , : version = > "1.4.1"
Con esto slo nos queda integrar dentro de nuestro cdigo los mtodos de la gema para o o e realizar la interoperabilidad con Paypal.
3.2.3.
A continuacin, vamos a ver un ejemplo de como integrar Paypal en nuestra cesta de la o compra usando ActiveMerchant. El primer paso es aadir a nuestro controllers/application.rb la siguiente linea al princin pio:
f i l t e r _ p a r a m e t e r _ l o g g i n g : card_number , : c a r d _ v e r i f i c a t i o n
El siguiente paso, en el controlador donde generamos nuestro carro de la compra (suo o ponemos cart controller.rb), tenemos una accin como la que se muestra a continuacin:
def create @order = current_cart . build_order ( params [: order ]) @order . ip_address = request . remote_ip if @order . save if @order . purchase render : action = > " success " # Comunicacion realizada con exito else render : action = > " failure " # Error de comunicacion con Paypal end else render : action = > " new " # Nuevo carro de la compra end end
Tenemos 3 acciones para las que debemos desarrollar 3 plantillas donde se generar la a respuesta HTML. La plantilla new, contendr el formulario donde realizaremos el pedido, a success indicar el xito de la operacin y failure que la operacin no ha tenido xito. Veamos a e o o e una posible implementacin de estas tres plantillas: o
< % form_for @order do | f | %> < %= f . error _messag es %> <p > < %= f . label : first_name %><br / > < %= f . text_field : first_name %> </p > <p > < %= f . label : last_name %><br / > < %= f . text_field : last_name %> </p > <p > < %= f . label : card_type %><br / > < %= f . select : card_type , [[" Visa " , " visa "] , [" MasterCard " , " master "] , [" Discover " , " discover "] , [" A </p > <p > < %= f . label : card_number %><br / > < %= f . text_field : card_number %> </p > <p > < %= f . label : card_verification , " Card Verification Value ( CVV )" %><br / > < %= f . text_field : c a r d _ v e r i f i c a t i o n %> </p > <p > < %= f . label : c ar d _e xp ir e s_ on %><br / > < %= f . date_select : card_expires_on , : discard_day = > true , : start_year = > Date . today . year , : end_year </p > <p >< %= f . submit " Submit " %></p > < % end %>
success.html.erb
<p > Operacion realizada con exito ! </p >
failure.html.erb
<p > Error en la operacion </p >
Ya tenemos realizada la integracin en la capa de vista y en la de controlador, solo nos o falta la capa del modelo de datos.
3.2.4.
En el modelo de datos necesitamos relacionar el carro de la compra con las ordenes de compra, que son las que contendrn la informacin de la transaccin a realizar. Veamos la a o o conguracin en el modelo de datos en los siguientes pasos: o models/cart.rb
has_one : order
models/order.rb
class Order < ActiveRecord :: Base belongs_to : cart has_many : transactions , : class_name = > " Or d e r T r a n s a c t i o n " attr_accessor : card_number , : c a r d _ v e r i f i c a t i o n v a l i d a t e _ o n _ c r e a t e : validate_card def purchase
10
models/order transaction.rb
class O r d e r T r a n s a c t i o n < ActiveRecord :: Base belongs_to : order serialize : params def response =( response ) self . success = response . success ? self . authorization = response . authorization self . message = response . message self . params = response . params rescue Activ eMercha nt :: A c t i v e M e r c h a n t E r r o r = > e self . success = false self . authorization = nil self . message = e . message self . params = {} end end
Este es un ejemplo de implementacin de la gema ActiveMerchant en nuestro proyecto o Ruby on Rails. Debe de tomarse como una gu y consultar el manual del proyecto para a adaptarla lo mejor posible y para usar el resto de servicios que Paypal ofrece.
Bibliograf a
[1] http://www.scribd.com/doc/2218618/PayPal-integration-guide [2] https://cms.paypal.com/es/cgi-bin/?cmd=_render-content&content_ID= developer/e_howto_html_buynow_buttons [3] http://www.streamhead.com/paypal-integration-guide/ [4] http://www.streamhead.com/choose-your-paypal-api-making-sense-of-the-mess/ [5] http://www.activemerchant.org/
11