9.9.11

Cómo utilizar el API de Paypal en Java (III)

4. Poniendo el código en el proyecto

He creado un sencillo proyecto con un único paquete y he puesto en él los dos ficheros de código generados por el wizard de Paypal. Como se puede ver tienen algunos fallitos, pero nada que sea difícil de corregir.

Vamos a empezar añadiendo al código el botón de pago por Paypal (creado por el wizard). Cuando el cliente pulsa este botón, significa que quiere pagar mediante Paypal, así que tendremos que hacer la operación SetExpressCheckout.

Por no complicar el ejemplo, utilizaré el formulario vacío creado por el wizard. He añadido el formulario al servlet EjemploPaypalServlet y he modificado la URL de la etiqueta action del formulario. El código completo se muestra a continuación.




package ejemplopaypal;

import java.io.IOException;
import javax.servlet.http.*;

@SuppressWarnings("serial")
public class EjemploPaypalServlet extends HttpServlet {
public void doGet(HttpServletRequest req, HttpServletResponse resp)
throws IOException {
HttpSession session = req.getSession(true);
session.setAttribute("Payment_Amount", "30.00");

resp.setContentType("text/html");
resp.getWriter().println("-- Código del formulario aquí --");
}
}



Al pulsar el botón, se ejecutarà el código que invoca la operación de la API que ya generó el wizard (archivo expresscheckout.java), pero hay que modificar este archivo un poco para que funcione.

Además, se ha añadido al servlet una variable de sesión que guarda el total del pedido que facturará Paypal.


5. Operación SetExpressCheckout

El archivo expresschecout.java es un Servet que realiza una operación utilizando los métodos del paypalfunctions.java, en concreto, el método: CallShortcutExpressCheckout (paymentAmount, returnURL, cancelURL);

Lo primero que tenemos que hacer es añadirle la declaración del paquete. En mi caso es esta: package ejemplopaypal;
Una vez añadida esta línea, el código ya no da más errores sintácticos.
Para poder invocar a CallShortcutExpressCheckout necesitamos tres parámetros: la cuantía total de la factura, la URL a la que paypal nos enviará si el cliente confirma el pago y la URL la que nos enviará si surge un error. Los dos últimos parámetros ya los tenemos bien configurados gracias a las URLs que pusimos en el wizard.
La cantidad, se toma de una variable de sesión de tipo String con clave Payment_Amount. Ya vimos en el código de EjemploPaypalServlet como ponerlo.

Para aprender un poco como funciona Paypal, os aconsejo que hagáis una modificación al código para que os muestre todo lo que Paypal responde al invocar al método CallShortcutExpressCheckout . Para eso, podemos modificar el código del archivo expresscheckout.java) añadiendo las siguientes líneas:


// Buscar esta línea
HashMap nvp = ppf.CallShortcutExpressCheckout (paymentAmount, returnURL, cancelURL);

//* -- Añadir
for (Object o: nvp.entrySet()) {
Map.Entry e = (Map.Entry)o;
System.out.println(e.getKey() + ": " + e.getValue());
}

String strAck = nvp.get("ACK").toString();




Nota: Google Application Engine soporta las sesiones de Servlets, pero este soporte no está activdo por defecto. Para que funcione es necesario añadir la etiqueta sessions-enabled con un valor a true

Aún no podemos ejecutar el sistema, ya que paypalfunctions tiene errores que hay que corregir. Eso es justo lo que haremos a continuación.

30.8.11

Cómo utilizar el API de Paypal en Java (II)

2.5. Creando una tienda de prueba

Antes de continuar, vamos a crear una cuenta vendedora para usarla en nuestro ejemplo. Lo primero es ir al sandbox (https://developer.paypal.com/) y hacer login con el usuario y clave que registrado en el paso anterior (ver la primera entrada de este tutorial).

Allí, vamos a l opción API Credentials y creamos una nueva cuenta asegurándonos que es una cuenta de tipo vendedor (Seller). Cuando tengamos el código hecho, comprobaremos que nuestra cuenta compradora ha pagado y nuestra cuenta vendedora ha recibido el dinero. Pero eso será al final del tutorial.

Una vez hecho esto, veremos los datos que necesitamos para acceder a la API. Vamos a copiarlos que los necesitaremos más adelante. Un detalle, comprobad que las cuentas están enabled, si alguna os aparece como disable, pulsad en esa misma palabra (“disabled”) para activarla.


3. Creando el código con el wizard de Paypal

Por suerte, Paypal puede generar el código que necesitamos gracias a su wizard. La URL es: https://www.paypal-labs.com/integrationwizard/

En el wizard, elegimos la opción 1, así crearemos el código necesario para el flujo de Express Checkout (consulta la documentación de desarrolladores de Paypal, ahí viene bien explicado).

En cuanto a lenguaje, elegimos “Java SDK”, como URLs yo usaré: http://localshost:8888/sucess y http://localshost:8888/cancel. Si tu contenedor de Servlets (Tomcat, Jetty, etc.) está configurado para usar una URL distinta, usa dicha URL.
Ahora, copia el código HTML generado y guárdalo.

Copia los dos archivos .java y guárdalos también. Veamos lo que son. El archivo expresscheckout.java es el servlet que ejecuta la primera operación del API SetExpressCheckout y redirige al servidor de Paypal. El archivo paypalfunctions.java es un objeto que contiene métodos para invocar operacons del API de Paypal que vamos a necesitar.

S quieres puedes continuar generando el código para elr estod e los psos. Pero, con lo que ya tenemos, podemos montar la primera operación (SetExpresscheckout) e, incluso, las otras dos operaciones escirbiéndo algo de código por nosotros mismos.

Si quieres puedes continuar generando el código para el resto de los pasos. Pero, con lo que ya tenemos, podemos montar la primera operación e, incluso, las otras dos operaciones escribiendo algo de código por nosotros mismos.

Manos a la obra (en la siguiente entrega).

27.8.11

Cómo utilizar el API de Paypal en Java

El objetivo de este tutorial es crear un sistema Java muy básico que sea capaz de realizar un pago utilizando Paypal. Nuestro sistema se conectará con Paypal, le dirá lo que tiene que cobrar, nos enviará a la página de Paypal y recibirá el resultado de la operación.

Lo que necesitas para seguir este tutorial es el J2EE de Java (cualquier versión vale), ya que en este tutorial usaremos Servlets. Además, necesitarás un servidor capaz de ejecutar los Servlets. Cualquier Tomcat o Jetty debería servir. En mi caso concreto he utilizado Google Application Engine, no por nada en especial sino porque es lo que tengo más a amno ahora.

Empezamos.


1. Un poco de teoría

Lo que vamos a implementar es un pago express, o express checkout, el cuál es uno de los servicios que Paypal ofrece. Para hacer este pago sólo tenemos que hacer tres operaciones con (y una de ella no es obligatoria). Veámoslas:

SetExpressCheckout: Prepara un nuevo pago. La llamaremos justo antes de enviar a un cliente a Paypal. El servidor nos devolverá el token que identifica el pago.

GetExpressCheckout (opcional): Nos permite obtener información sobre el cliente.

DoExpressCheckoutPayment: Concluye y confirma el pago.

Para comunicarnos con Paypal (y hacer las tres operaciones anteriores) tenemos dos opciones, utilizar la API NVP y la API SOAP. NVP son la siglas de Name-Value Pair (par clave-valor) y eso es exactamente en lo que consiste, en construir conjuntos de pares clave valor, con la información que Paypal necesita y mandárselo. En este ejemplo usaremos la API NVP.



2. Creando un usuario de sandbox

Para hacer pruebas necesitamos usuarios de prueba: un usuario que represente la tienda a la que pagamos y usuarios que representen los clientes que hacen el pago. Algunos de ejemplos ya vienen configurados para hacer pagos a una tienda imaginaria, así que vamos a empezar creando un cliente imaginario. Este cliente será el que usemos en Paypal para pagar. Para crear los clientes de pruebas podemos usar esta URL https://developer.paypal.com/

La manera de trabajar es registrarnos en el sandbox para, mediante nuestra cuenta, generar los usuarios de prueba que necesitemos. El proceso no es complejo. La cuenta de correo debe ser auténtica ya que nos mandarán un mensaje para activarla.

Una vez activa, entramos con nuestro correo y contraseña y ya podemos crear nuestra primera test account. En mi caso he creado una cuenta de comprador (buyer) preconfigurada

Ojo que las cuentas se crean con el mismo dominio que la dirección e correo original y variantes aleatorias. Con este método se pueden crear todas las que se quieran.


Ahora sí vámonos de cabeza al código.



Continuará en un par de días.

9.8.11

Nueva página sobre Test-Driven Development y testing: www.portaltdd.org

Actualizo este blog para comentar que estoy participando en la página Portal TDD (www.portaltdd.org)

El objetivo de este portal es publicar referencias a toda la información que aparece en Internet sobre Test-Driven Development y pruebas del softwareen general.
También queremos publicar artículos prácticos y, más adelante, intentar organizar encuentros y promover reuniones para intercambiar experiencias.

Espero veros por allí.

Un saludo.