Como implementar una pasarela de pago con Stripe y PHP

Tutorial y código de ejemplo que te permite implementar una pasarela de pago básico con Stripe utilizando PHP. Ejemplo dona 1€ para agradecer este tutorial.

03/07/2019

En este artículo vamos a ver como implementar fácil y rápidamente una pasarela de pago básica con Stripe utilizando PHP.

Stripe es la mejor plataforma de software para gestionar una empresa en Internet. Opera con miles de millones de dólares anuales provenientes de los modelos de negocios más innovadores en todo el mundo. Esta es la descripción oficial.

Esta herramienta hace que el procesamiento de pagos por Internet para negocios en línea sea rápido y seguro.

Stripe tiene una API de pago muy potente que impulsa el comercio para empresas en línea de cualquier tamaño y que incluye prevención de fraude y gestión de suscripciones. Es ideal para aceptar y procesar pagos por Internet como solución de comercio fácil de usar.

La forma más rápida de comenzar a tener ingresos con Stripe es utilizar Stripe Checkout, un flujo de pago directo diseñado para impulsar la conversión, ya sea para vender productos únicos o suscripciones. Se integra en minutos y te permite aceptar pagos de manera segura con tarjeta.

Stripe Checkout se integra rápidamente en tu sitio Web basado en PHP para proporcionar a los usuarios una experiencia de pago optimizada y lista para dispositivos móviles.

Aunque en la mayoría de gestores de contenido y plataformas de e-commerce ya disponen de un plugin o módulo con esta implementación, siempre puede ser interesante realizar una pasarela de pago a medida sin necesidad de utilizar ningún gestor de contenido ni plataforma de e-commerce. Si esto es lo que necesitas, sigue con este tutorial.

En Stripe es posible utilizar la documentación para usar Checkout y PHP.

En el ejemplo en funcionamiento, estamos mostrando un botón que al pulsarlo se abre una ventana modal que te permite indicar un email, un número de tarjeta, la fecha de caducidad y el código de seguridad.

El ejemplo en funcionamiento es una página que permite enviar un donativo de 1€ para agradecer este tutorial que espero te sea de utilidad.

Requisitos

El entorno de desarrollo mínimo para trabajar con Stripe es:

  • PHP >= 5.3.3
  • Librería Stripe para PHP
  • Cuenta de Stripe Es gratis.

Instalación de Stripe

La librería PHP para usar Stripe en tu sitio Web puede ser instalada vía Composer ejecutando la siguiente línea en el terminal de tu computadora situándote previamente en el directorio donde esté tu proyecto:

composer require stripe/stripe-php

Si no lo tienes todavía, antes de ejecutar esta línea en la línea de comandos, descarga e instala en tu ordenador el programa Composer que puedes encontrar en la página oficial.

Después de ejecutar esta instrucción vía Composer debería aparecer algo como lo siguiente en la consola:

Donde se está indicando que el paquete necesario para utilizar los pagos mediante Stripe ya están disponibles para usar en la ruta de tu proyecto.

Datos de configuración

En la raiz de tu proyecto crea el archivo config.php  y agrega el siguiente código:

<?php
require_once('vendor/autoload.php');
 
$stripe = array(
    'secret_key' => 'TU CLAVE SECRETA AQUÍ',
    'publishable_key' => 'TU CLAVE PÚBLICA AQUÍ',
);
 
\Stripe\Stripe::setApiKey($stripe['secret_key']);
?>

La primera linea hace referencia a la biblioteca Stripe para PHP que has instalado previamente mediante el Composer.

A continuación creamos un array con la clave secreta y la clave pública de tu cuenta Stripe.

Cambia la clave secreta y la pública por las de tu cuenta Stripe. Lo puedes encontrar en el panel de control de tu cuenta Stripe, justamente en Desarrolladores – Claves de API.

Formulario

Dentro del cuerpo de la página o dentro de la etiqueta <body>, allí donde más desees puedes agregar el formulario para Stripe Checkout. De forma básica puedes agregar algo como lo siguiente:

<?php require_once('config.php'); ?>
<form action="charge.php" method="post">
    <script src="https://checkout.stripe.com/checkout.js" class="stripe-button"
        data-key="<?php echo $stripe['publishable_key']; ?>"
        data-description="Envia un donativo simbolico de 1€"
        data-amount="100"
        data-currency="eur"
        data-locale="es"></script>
</form>

Donde estamos incluyendo el archivo config.php que permite conectar con tu cuenta de Stripe.

Seguidamente, estamos armando el formulario de pago mediante Stripe que utiliza Checkout. Un formulario HTML incorporado que se hará cargo de la validación de los datos, el manejo de errores y el envío seguro de números de tarjetas de crédito a Stripe.

Si te fijas un poco en el código, puedes observar que la etiqueta <script> contiene unos atributos especiales que quizás no has visto nunca. Son como parámetros que puedes mandar a la plataforma Stripe para generar el pago con datos dinámicos.

En el caso del ejemplo en funcionamiento, estamos pasando la clave pública de la API, la descripción, la cantidad, el tipo de moneda y el idioma.

Procesamiento del pago con PHP

Tal y como puedes ver en el atributo action del formulario, los datos del formulario son enviados al servidor.

El archivo charge.php es el archivo que recibe los datos del formulario.  Este archivo puede contener el siguiente código:

<?php
require_once('config.php');
 
$token = $_POST['stripeToken'];
$email = $_POST['stripeEmail'];
 
$customer = \Stripe\Customer::create([
  'email' => $email,
  'source'  => $token,
]);
 
$charge = \Stripe\Charge::create([
  'customer' => $customer->id,
  'amount'   => 100,
  'currency' => 'eur',
]);
 
echo '<h1>Successfully charged 1€!</h1>';
?>

Donde incluimos el archivo config.php para conectar con la cuenta de Stripe. Recibimos el token y el email del formulario para crear el cliente y el pago. Así de simple.

En la documentación de Stripe Checkout PHP puede ver más información.

Resultado

El pago aparece reflejado en la cuenta de Stripe:

Ver demo Descargar

18 comentarios

pep
Publicado el 31/10/2019 14:29

Buenas tardes jose,


Mi nombre es Pep tengo implementado este metodo de stripe con php en una web y me gustaría saber como se actualiza a la nueva normativa de SCA.


Gracias.

Jose Aguilar
Publicado el 07/11/2019 10:12

Hola,


Tienes que implementar los PaymentIntent. Son nuevas clases que ha agregado Stripe para cumplir con la normativa de SCA.


En el siguiente enlace puedes ver más información: https://stripe.com/docs/payments/payment-intents


Saludos

Luis Correa
Publicado el 02/04/2020 18:03

tengo mi site en Bluehost y no estoy usando wordpress.

mi site es hecho a mano.

En Bluehost no puedo instalar y ejecutar el composer.

¿Entonces, como instalo la libreria PHP sin composer?

Jose Aguilar
Publicado el 06/04/2020 16:05

Hola,


Puedes seguir los pasos indicados en este tutorial en un servidor local y luego subir el resultado a tu servidor.


Saludos

Fran
Publicado el 15/05/2020 10:40

Hola José.


Hice todo, y me funciona correctamente. Lo único , es que no redirige si el pago ha sido correcto o erróneo. Vuelve a la página de pago.


Gracias por tus consejos


Salu2

Jose Aguilar
Publicado el 15/05/2020 11:02

Hola,


En ese caso tendrás que hacer algún redirect a la página que tu quieras cuando el pago se haya completado. Creo que Stripe retorna alguna información al respecto para que lo puedas considerar.


Saludos

Elvis Pérez
Publicado el 22/11/2020 19:11

Buenas José Aguilar excelente aporte. Tengo una duda. Pienso implementar una web tipo chat y tendrá opciones de pago. Para poder usar stripe es necesario que tenga una cuenta en dólares ? Si solo tengo Paypal puedo canjear los pagos recibidos. ?

Edwin Albeiro Caipa Ramirez
Publicado el 25/11/2020 14:48

Buenos dias estoy tratando de buscar de como implementar un boton de pago ya tengo el boto creado solo necesito consumir el api por donde te puedo contactar para una explicacion ?

Jose Aguilar
Publicado el 24/12/2020 17:05

Hola,


Si, esto lo puedes hacer tanto con Stripe como con PayPal. Requerirá que te pases por la API de estas dos plataformas para conseguirlo.


Saludos

Jose Aguilar
Publicado el 24/12/2020 17:05

Hola,


Si todavía necesitas ayuda, puedes enviar un mensaje al centro de soporte técnico situado en:

https://www.jamodules.com/prestashop-addons/es/soporte


indicando todos los detalles de tu petición para que lo podamos estudiar.


Saludos

Rogelio
Publicado el 15/01/2021 00:15

Me marca error en lo siguiente:


Deprecated: array_key_exists(): Using array_key_exists() on objects is deprecated. Use isset() or property_exists() instead in C:\wamp64\www\stripe\vendor\stripe\stripe-php\lib\ApiRequestor.php on line 402


1 0.0009 366896 {main}( ) …\charge.php:0

2 0.0055 384680 Stripe\Customer::create( ) …\charge.php:9

3 0.0056 384720 Stripe\ApiResource::_staticRequest( ) …\Create.php:23

4 0.0062 384896 Stripe\ApiRequestor->request( ) …\Request.php:57

5 0.0062 384896 Stripe\ApiRequestor->_requestRaw( ) …\ApiRequestor.php:125

6 1.0683 399336 array_key_exists ( ) …\ApiRequestor.php:402


pero al hacer la prueba se ve reflejado en la pagina de stripe.

Jose Aguilar
Publicado el 22/01/2021 18:35

Hola,


La función array_key_exists() quedó en desuso. Tendrás que buscar su sustituta.


Saludos

Victor Daniel
Publicado el 12/02/2021 18:35

Buenas tardes.

Muy buen tutorial, pero tengo una duda, como agregar un customer en un paymentIntent, ya que lo quiero agregar y me marca un error de que no existe ese atributo, te agradeceria que me respondieras esa duda, gracias

Sergio
Publicado el 02/03/2021 07:30

Hola, buenos días. He hecho todo lo descrito y la verdad que funciona. Me gustaría cambiar el botón que viene por defecto o poder cambiar «Pay with card» y ponerlo en español. Cómo se podría cambiar al español? gracias de antemano José.

Giselld
Publicado el 18/03/2021 06:36

Hola, luego de efectuada la compra se puede obtener la informacion del pago y datos del cliente y la tarjeta?

Jose Aguilar
Publicado el 08/04/2021 17:23

Hola,


Dejaré la pregunta abierta por si alguien sabe la respuesta.


SAludos

Jose Aguilar
Publicado el 08/04/2021 17:34

Hola,


En el sitio de demostración lo estuvimos intentando agregando el siguiente atributo al elemento:


data-locale=»es»


pero parece que no es la solución.


Puedes investigarlo en stripe. Seguramente hay algo para eso pero no he podido averiguarlo.


Saludos

Jose Aguilar
Publicado el 08/04/2021 17:42

Hola,


No. Solo el email.


Saludos

Añadir comentario

© 2026 . All rights reserved.

Desarrollador con amor por Komodo Website