Carrito de compra en PHP, MySql y forma de pago Paypal (Parte 6: Añadir PayPal como método de pago a nuestro carro de compra)

Ya tenemos nuestro carro de compra casi al completo pero claro, ¿qué sería de un carro de compra sin una forma con la que pagar los productos elegidos?.

En esta parte del tutorial Carrito de compras en php veremos como finalizar una compra con el método de pago PayPal gracias a su API y la facilidad con la que podemos interactuar con ella.

Crear una cuenta de pruebas en Paypal

Para realizar las pruebas de nuestro script podríamos usar nuestras propias cuentas de PayPal pero lo cierto es que no os lo aconsejo, a no ser que queráis perder dinero xD.

Para hacer pruebas con api de Paypal antes de lanzar nuestra tienda virtual al público existe una plataforma llamada Paypal Sandbox para desarrolladores con la que podremos hacer pruebas con cuentas ficticias.

Así que lo primero que haremos es registrarnos, donde nos pedirán algunos datos personales como Nombre, Apellidos, email y password (recomiendo no usar vuestros propios nombres).

Pruebas Paypal

Una vez tenemos registrado nuestro usuario de pruebas de Paypal es hora de crear las 2 partes "humanas" que interactuan en una tienda virtual, el comprador y el vendedor, para así tener constancia de que se efectua la compra y que el vendedor recibe el pago.

Crear cuenta de pruebas Paypal SandBox para Vender

Una vez hemos activado nuestro usuario de Paypal Sandbox a través del e-mail y nos hemos logueado correctamente, entramos en el panel de administración.

Para crear una cuenta Paypal SandBox para vender con datos que ellos mismo nos proporcionan (es lo más fácil ya que no tenemos que validar la cuenta), seguimos los siguientes pasos:

  1. Ir a Test Accounts
  2. Clic en Preconfigured y rellenar los datos que nos piden tal y como veis en la siguiente imagen.

Pruebas Paypal

El mail que se va a utilizar aquí, tal y como indican en el formulario, es una dirección simulada, así que no hace falta registraros en gmail

Crear cuenta de pruebas Paypal SandBox para Comprar

El sistema es muy parecido, solo cambia en el tipo de cuenta (Account Type) que lo seleccionaremos como Buyer en lugar de Seller.

Pruebas Paypal

Ahora si que estamos preparados para hacer pruebas comprando en nuestra tienda virtual.

Lo siguiente que haremos es preparar la página “comprar.php“.

COMPRAR.PHP

Bueno pues ha llegado la hora de preparar nuestro script para finalizar la compra de nuestro carrito.

Lo que haremos con este script será lo siguiente:

  1. Continuar sesión, añadir includes de la estructura web y la conexión a la base de datos.
  2. Crear formulario con las variables que se le enviarán a paypal en input ocultos.

La primera parte está bastante clara si habeis seguido todas las partes del tutorial. Lo conseguimos de la siguiente forma:

[php]
session_start();

$titulo = “Carrito de Compra con Php y Mysql”;
include(“conecta.php”);
include(“meta_tags.php”);
include(“cabecera.php”);
[/php]

La segunda es donde está el código que nos interesa y que no hemos visto con anterioridad.

Primero os quiero dejar un esquema de como funciona Paypal cuando se le hacen peticiones para realizar una compra

Diagrama Paypal

El funcionamiento es bastante simple viendo el diagrama. Lo primero y es lo que trataremos en esta parte del tutorial es preparar una página con un formulario que envie los datos necesarios a https://www.paypal.com/cgi-bin/webscr. En nuestro caso como estamos haciendo pruebas y Paypal nos proporciona un sitio especifio para tal fin, en el action del formulario utilizaremos https://www.sandbox.paypal.com/cgi-bin/webscr.

Para que Paypal pueda efectuar los pagos necesita conocer una serie de datos como son:

  • cmd: Indica el tipo de fichero que va a recoger PayPal, que pueden ser: _cart (varios items), _donations (donaciones), _xclick (boton de compra)
  • business:Indica el identificador del negocio registrado en paypal. Aquí vendrá la dirección e-mail de registro en Paypal del vendedor.
  • shopping_url: La dirección de nuestra tienda online.
  • currency_code: El tipo de moneda (USD , EUR …)
  • return: Sera el enlace de vuelta a nuestro negocio que ofrece paypal
  • notify_url: En esta página es donde recogeremos el estado del pago y un gran numeros de variables con informacion adicional en nuestro caso lo hemos llamado paypalipn.php
  • rm: Indica el método que se va a utilizar para enviar la información de vuelta a nuestro sitio. RM=1 (información enviada por GET) , RM=2 (información enviada por POST)(En este caso usamos este método porque es un script php el que recoge los datos).
  • item_number_X: Identificador del producto. Aquí tendremos que definir tantos productos como haya en el carro de compra. Ejemplo item_number_1, item_number_2, etc ..
  • item_name_X: Nombre del producto. Aquí tendremos que definir tantos nombres de productos como haya en el carro de compra. Ejemplo item_name_1, item_name_2, etc ..
  • amount_X: Precio del producto. Aquí tendremos que definir tantos precios de producto como haya en el carro de compras. Ejemplo amount_1, amount_2, etc ..
  • quantity_X: Cantidad del producto. Aquí tendremos que definir tantos cantidad de producto como haya en el carro de compras. Ejemplo quantity_1, quantity_2, etc ..

Estos datos ya son suficientes para que Paypal pueda efectuar la compra correctamente. Para ver todos los tipos de variables que podemos enviar a Paypal podéis acceder a la siguiente dirección.

El formulario quedaría de la siguiente manera:

[php]










[/php]

Como veis, nos faltan algunas variables en el formulario para enviar a Paypal con información sobre productos, precios, cantidad del carro de compra. Como este tipo de información lo tenemos almacenado en variables de sesión de nuestro aplicación, vamos a recuperarlos llamando a la función “recuperar_productos”.

[php]
function recuperar_productos(){
$contador = 0;
//recorremos el array de SESION hasta el final
foreach($_SESSION[‘carro’] as $id => $x){
$contador++; //Número de item que después usaremos en el atribute name de los inputs
$resultado = mysql_query(“SELECT id, producto, precio FROM productos WHERE id=$id”);
$mifila = mysql_fetch_array($resultado);
$id = $mifila[‘id’];
$producto = $mifila[‘producto’];
//acortamos el nombre del producto a 40 caracteres
$producto = substr($producto,0,40);
$precio = $mifila[‘precio’];
?>
” type=”hidden” value=”“>
” type=”hidden” value=”“>
realizar el pago del carrito de compra en Paypal, pero como veis hemos definido tres variables que hacen referencia a 3 páginas de nuestra aplicación, y 2 de ellas aun no la hemos creado (errorPaypal.php y exito.php que veremos a continuación).

Aquí tenéis el código completo de comprar.php

[php]
$x){
$contador++; //Número de item que después usaremos en el atribute name de los inputs
$resultado = mysql_query(“SELECT id, producto, precio FROM productos WHERE id=$id”);
$mifila = mysql_fetch_array($resultado);
$id = $mifila[‘id’];
$producto = $mifila[‘producto’];
//acortamos el nombre del producto a 40 caracteres
$producto = substr($producto,0,40);
$precio = $mifila[‘precio’];
?>
” type=”hidden” value=”“>
” type=”hidden” value=”“>

Conectando con Paypal ……















[/php]

errorPaypal.php

Empecemos por la página errorPaypal.php. Esta página será la que se ejecutará automáticamente cuando se cancele el pago por parte de Paypal. Y haremos una simple página de aviso de que no ha ido bien la conexión con Paypal. Podéis crearlo con un simple texto informando de que no se ha podido efectuar el pago con éxito.

[php]

No se ha podido realizar la compra. Por favor revise su cuenta Paypal e inténtelo de nuevo


[/php]

exito.php

La otra página que tenemos que crear es exito.php, que como el nombre indica, será la página que se mostrará en el caso de que todo haya ido bien con Paypal. Podéis crearlo con un simple texto informando de que se ha efectuado el pago con éxito.

[php]

Compra realizada con éxito, por favor revisa su correo para ver la notificación.


[/php]

Ahora ya tenemos la aplicación adaptada para realizar la compra con Paypal. Aunque ya que Paypal se encarga de enviar un mail con los detalles de la compra, en el próximo capitulo veremos como dar de alta ese pedido en nuestra tabla PEDIDOS y DET_PEDIDOS (Detalle de pedidos).

Guía Carrito de Compra en Php con forma de pago Paypal