Como implementar una pasarela de pago con Stripe y PHP
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:
[…] Como implementar una pasarela de pago con Stripe y PHP […]
Hola, luego de efectuada la compra se puede obtener la informacion del pago y datos del cliente y la tarjeta?
Hola,
No. Solo el email.
Saludos
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é.
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
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
Hola,
Dejaré la pregunta abierta por si alguien sabe la respuesta.
SAludos
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.
Hola,
La función array_key_exists() quedó en desuso. Tendrás que buscar su sustituta.
Saludos
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 ?
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
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. ?
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
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
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
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?
Hola,
Puedes seguir los pasos indicados en este tutorial en un servidor local y luego subir el resultado a tu servidor.
Saludos
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.
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