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.
Tabla de contenidos
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).
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:
- Ir a Test Accounts
- Clic en Preconfigured y rellenar los datos que nos piden tal y como veis en la siguiente imagen.
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.
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:
- Continuar sesión, añadir includes de la estructura web y la conexión a la base de datos.
- 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
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
- Parte 1: Introducción
- Parte 2: ¿Qué nos hace falta?
- Parte 3: Diagrama de Flujo
- Parte 4: Base de datos de un carro de compra
- Parte 5.1: Scripts necesarios para un carro de compra en PHP y MySQL
- Parte 5.2: Scripts necesarios para un carro de compra en PHP y MySQL
- Parte 6: Añadir PayPal como método de pago a nuestro carro de compra
- Parte 7: Factura y envío de e-mail al comprador
- Parte 8: Descarga de archivos
10 comentarios
me tira cuando entro a paypal error carrito de compra vacio
es como que no esta mandando los datos
Excelente manual, le he aplicado con exito en mi sitio, se los agradezco, si tienen alguna actualizacion no duden en publicarla, saludos desde Cancun, Mexioc
gracias, un saludo
buenas de nuevo!
he conseguido completar el pago satisfactoriamente, pero a la hora de redireccionar desde paypal a la web de «exito.php»
aparte de mostrarme «EL PAGO SE HA COMPLETADO» también me muestra el siguiente error que creo que es debido a que no consigue guardar la sesion despues del pago:
«Warning: session_start() [function.session-start]: Cannot send session cache limiter – headers already sent (output started at /home/tuvidaso/public_html/carroCompras/carroCompras/exito.php:1) in /home/tuvidaso/public_html/carroCompras/carroCompras/exito.php on line 2»
Saludos y gracias por tu excelente ayuda!!!
creo que ya se a que se debe este error.
me falta por completar lo siguiente:
//1. recogemos los valores del cliente y de la compra.
//2. llamamos a una función para enviar el mail con la factura al cliente.
pasaré al siguiente punto del tutorial que seguramente esté recogido ahí.
Gracias,
saludos!
La mayoría de las veces es problema porque session_start() debe ser ejecutado antes de cualquier salida HTML porque envía headers HTTP al navegador. MIra que no tengas ningun «echo» en el script antes del session_start()…
Tambien prueba a quitar todos los displays que tengas en el archivo, a ver si asi te funciona.
Muchísimas gracias por este excelente tutorial. He ido cogiendo los trocitos que necesitaba, pues ya tenía la tienda y sólo me faltaba programar el pago por Paypal. Me has ahorrado mucho tiempo.
Un saludo,
Javier
Hola, es un excelente tutorial. Tengo algunas dudas, como puedo enviar los datos del comprador a la base de datos y a paypal?
Ejemplo:
Nombre
Dirección
Teléfono
email
Yo he trabajado en muchas ocaciones con DB pero no entiendo como hacer que los datos vayan a mi DB y a Paypal cuando se pulsa el boton de comprar de Paypal
Hola a todos
me he dado cuenta que que hacer unos pequeños cambios en comprar.php (del archivo rar bajado en el capitulo anterior 5.1) ya que algunos campos no corresponden a los que se explica en el capitulo de creación de la base de datos:
Nota, estoy usando: php 5.3.8 y MySQL 5.5.16 hay
$resultado = mysql_query(«SELECT id, producto, precio FROM productos WHERE id=$id»);
$id = $mifila[‘id’];
$producto = $mifila[‘producto’];
por:
$resultado = mysql_query(«SELECT id_producto, nombre, precio FROM productos WHERE id_producto=$id»);
$id = $mifila[‘id_producto’];
$producto = $mifila[‘nombre’];
-linea 56 hay un ‘p’ en vez de ‘r’
‘http://localhost/varios/paypal/carrp/errorPaypal.php’>
y es
‘http://localhost/varios/paypal/carro/errorPaypal.php’>
joder, pense que hacer referencia a la cuenta de paypal era mediante la api o algo asi, creo que ya me estaba malviajando muchas gracias ha sido de gran ayuda !