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.