{"id":6791,"date":"2016-07-19T14:14:29","date_gmt":"2016-07-19T14:14:29","guid":{"rendered":"https:\/\/www.jose-aguilar.com\/blog\/?p=6791"},"modified":"2019-06-14T10:51:33","modified_gmt":"2019-06-14T10:51:33","slug":"como-implementar-una-pasarela-de-pago-mediante-tarjeta-de-credito-con-php","status":"publish","type":"post","link":"https:\/\/www.jose-aguilar.com\/blog\/como-implementar-una-pasarela-de-pago-mediante-tarjeta-de-credito-con-php\/","title":{"rendered":"Como implementar una pasarela de pago mediante tarjeta de cr\u00e9dito utilizando PHP"},"content":{"rendered":"<p>En este art\u00edculo vamos a ver como <strong>implementar una pasarela de pago<\/strong> mediante <strong>tarjeta de cr\u00e9dito con PHP<\/strong> empleando el Servidor Integrado de <strong>Redsys<\/strong> (Servidor del <strong>TPV Virtual<\/strong>) (SIS).<\/p>\n<h2>\u00bfQu\u00e9 es un TPV virtual?<\/h2>\n<p>Las siglas <strong>TPV<\/strong> significan <strong>Terminal de Punto de Venta<\/strong> y viene acompa\u00f1ado de la palabra <strong>virtual<\/strong> para indicar que se trata de un sistema de pago online que permite a las tiendas online o p\u00e1ginas Web aceptar el pago de sus clientes o usuarios mediante tarjetas de cr\u00e9dito o d\u00e9bito. Este sistema de pago tiene much\u00edsimas ventajas frente a otros sistemas de pago. Acepta una gran cantidad de tipos de tarjetas (VISA, MASTERCARD, MAESTRO, etc). Es una forma de pago mucho m\u00e1s segura y los datos son gestionados directamente por tu banco. No hay un tercero que ampl\u00ede la comisi\u00f3n.<\/p>\n<p>Pr\u00e1cticamente todos los bancos ofrecen este servicio. Pregunta en tu banco sobre las condiciones para ver si te interesa contratarlo.<\/p>\n<h2>Forma de integraci\u00f3n<\/h2>\n<p>Aunque en la mayor\u00eda de gestores de contenido y plataformas de Ecommerce ya disponen de un plugin o m\u00f3dulo con esta implementaci\u00f3n, siempre puede ser interesante realizar una pasarela de pago a medida sin necesidad de utilizar ning\u00fan gestor de contenido ni plataforma de Ecommerce. Si este es tu caso, este tutorial te puede resultar muy \u00fatil para integrar la pasarela de pago en tu p\u00e1gina Web.<\/p>\n<p>Existen varias formas de <strong>implementar una pasarela de pago con tarjeta de cr\u00e9dito utilizando PHP<\/strong>. Nos centraremos en explicar como desarrollar una forma muy sencilla utilizando una <strong>programaci\u00f3n orientada a objetos<\/strong> con el objetivo de realizar una integraci\u00f3n con el <strong>TPV Virtual<\/strong> mediante conexi\u00f3n por redirecci\u00f3n del navegador del cliente comprador.<\/p>\n<p>Esta forma de conexi\u00f3n permite trasladar la sesi\u00f3n del cliente final al <strong>TPV Virtual<\/strong>, de forma que la selecci\u00f3n del medio de pago y la introducci\u00f3n de datos se llevan a cabo en el entorno seguro del servidor del <strong>TPV Virtual<\/strong> y fuera de la responsabilidad del comercio. Adem\u00e1s de la sencillez de implementaci\u00f3n para el comercio y la tranquilidad respecto a la responsabilidad de los datos de pago, este modo de conexi\u00f3n da cabida a la utilizaci\u00f3n de mecanismos de autenticaci\u00f3n como el <strong>3D Secure<\/strong>, donde el banco de la tarjeta solicita directamente al titular un dato secreto que permite dotar de m\u00e1s seguridad a las compras.<\/p>\n<h2>Requisitos para empezar<\/h2>\n<p>Antes de ponerte a programar, si a\u00fan no lo tienes, es necesario que contrates un servicio <strong>TPV Virtual<\/strong> de cualquier banco que trabaje con <strong>Redsys<\/strong> y el mismo banco debe facilitarte los par\u00e1metros necesario para conectar con dicho <strong>TPV<\/strong>.<\/p>\n<p>Cuando se ha contratado el servicio de <strong>TPV Virtual<\/strong> nos deben facilitar la siguiente informaci\u00f3n que ser\u00e1 imprescindible para realizar la conexi\u00f3n con <strong>Redsys<\/strong>:<\/p>\n<ul>\n<li>Nombre del comercio<\/li>\n<li>C\u00f3digo del comercio<\/li>\n<li>Clave secreta SHA-256<\/li>\n<\/ul>\n<h2>Formulario de pago inicial<\/h2>\n<p>En el ejemplo en funcionamiento que hemos creado para este art\u00edculo hemos decidido crear un formulario donde el usuario decide que cantidad quiere pagar y al pulsar en el bot\u00f3n \u00abpagar\u00bb se construyen los par\u00e1metros necesarios para mandar al Servidor del <strong>TPV Virtual<\/strong>.<\/p>\n<p>Nuestro formulario inicial ser\u00e1 tan simple como lo siguiente:<\/p>\n<div id=\"wpshdo_1\" class=\"wp-synhighlighter-outer\"><div id=\"wpshdt_1\" class=\"wp-synhighlighter-expanded\"><table border=\"0\" width=\"100%\"><tr><td align=\"left\" width=\"80%\"><a name=\"#codesyntax_1\"><\/a><a id=\"wpshat_1\" class=\"wp-synhighlighter-title\" href=\"#codesyntax_1\"  onClick=\"javascript:wpsh_toggleBlock(1)\" title=\"Click to show\/hide code block\">Source code<\/a><\/td><td align=\"right\"><a href=\"#codesyntax_1\" onClick=\"javascript:wpsh_code(1)\" title=\"Show code only\"><img decoding=\"async\" border=\"0\" style=\"border: 0 none\" src=\"https:\/\/www.jose-aguilar.com\/blog\/wp-content\/plugins\/wp-synhighlight\/themes\/default\/images\/code.png\" \/><\/a>&nbsp;<a href=\"#codesyntax_1\" onClick=\"javascript:wpsh_print(1)\" title=\"Print code\"><img decoding=\"async\" border=\"0\" style=\"border: 0 none\" src=\"https:\/\/www.jose-aguilar.com\/blog\/wp-content\/plugins\/wp-synhighlight\/themes\/default\/images\/printer.png\" \/><\/a>&nbsp;<a href=\"https:\/\/www.jose-aguilar.com\/blog\/wp-content\/plugins\/wp-synhighlight\/About.html\" target=\"_blank\" title=\"Show plugin information\"><img decoding=\"async\" border=\"0\" style=\"border: 0 none\" src=\"https:\/\/www.jose-aguilar.com\/blog\/wp-content\/plugins\/wp-synhighlight\/themes\/default\/images\/info.gif\" \/><\/a>&nbsp;<\/td><\/tr><\/table><\/div><div id=\"wpshdi_1\" class=\"wp-synhighlighter-inner\" style=\"display: block;\"><pre class=\"html4strict\" style=\"font-family:monospace;\"><span class=\"sc2\">&lt;<a href=\"http:\/\/december.com\/html\/4\/element\/form.html\"><span class=\"kw2\">form<\/span><\/a> <span class=\"kw3\">class<\/span><span class=\"sy0\">=<\/span><span class=\"st0\">&quot;form-amount&quot;<\/span> <span class=\"kw3\">action<\/span><span class=\"sy0\">=<\/span><span class=\"st0\">&quot;index.php&quot;<\/span> <span class=\"kw3\">method<\/span><span class=\"sy0\">=<\/span><span class=\"st0\">&quot;post&quot;<\/span>&gt;<\/span>\n    <span class=\"sc2\">&lt;<a href=\"http:\/\/december.com\/html\/4\/element\/div.html\"><span class=\"kw2\">div<\/span><\/a> <span class=\"kw3\">class<\/span><span class=\"sy0\">=<\/span><span class=\"st0\">&quot;form-group&quot;<\/span>&gt;<\/span>\n        <span class=\"sc2\">&lt;<a href=\"http:\/\/december.com\/html\/4\/element\/label.html\"><span class=\"kw2\">label<\/span><\/a> <span class=\"kw3\">for<\/span><span class=\"sy0\">=<\/span><span class=\"st0\">&quot;amount&quot;<\/span>&gt;<\/span>Cantidad<span class=\"sc2\">&lt;<span class=\"sy0\">\/<\/span><a href=\"http:\/\/december.com\/html\/4\/element\/label.html\"><span class=\"kw2\">label<\/span><\/a>&gt;<\/span>\n        <span class=\"sc2\">&lt;<a href=\"http:\/\/december.com\/html\/4\/element\/input.html\"><span class=\"kw2\">input<\/span><\/a> <span class=\"kw3\">type<\/span><span class=\"sy0\">=<\/span><span class=\"st0\">&quot;text&quot;<\/span> <span class=\"kw3\">id<\/span><span class=\"sy0\">=<\/span><span class=\"st0\">&quot;amount&quot;<\/span> <span class=\"kw3\">name<\/span><span class=\"sy0\">=<\/span><span class=\"st0\">&quot;amount&quot;<\/span> <span class=\"kw3\">class<\/span><span class=\"sy0\">=<\/span><span class=\"st0\">&quot;form-control&quot;<\/span> placeholder<span class=\"sy0\">=<\/span><span class=\"st0\">&quot;Por ejemplo: 50.00&quot;<\/span>&gt;<\/span>\n    <span class=\"sc2\">&lt;<span class=\"sy0\">\/<\/span><a href=\"http:\/\/december.com\/html\/4\/element\/div.html\"><span class=\"kw2\">div<\/span><\/a>&gt;<\/span>\n    <span class=\"sc2\">&lt;<a href=\"http:\/\/december.com\/html\/4\/element\/input.html\"><span class=\"kw2\">input<\/span><\/a> <span class=\"kw3\">class<\/span><span class=\"sy0\">=<\/span><span class=\"st0\">&quot;btn btn-lg btn-primary btn-block&quot;<\/span> <span class=\"kw3\">name<\/span><span class=\"sy0\">=<\/span><span class=\"st0\">&quot;submitPayment&quot;<\/span> <span class=\"kw3\">type<\/span><span class=\"sy0\">=<\/span><span class=\"st0\">&quot;submit&quot;<\/span> <span class=\"kw3\">value<\/span><span class=\"sy0\">=<\/span><span class=\"st0\">&quot;Pagar&quot;<\/span>&gt;<\/span>\n<span class=\"sc2\">&lt;<span class=\"sy0\">\/<\/span><a href=\"http:\/\/december.com\/html\/4\/element\/form.html\"><span class=\"kw2\">form<\/span><\/a>&gt;<\/span><\/pre><\/div><\/div>\n<p>Tan solo es un formulario con un campo para escribir la cantidad a pagar y un bot\u00f3n para enviar.<\/p>\n<h2>Controlador del formulario de pago<\/h2>\n<p>En el mismo fichero donde hemos agregado el formulario podemos agregar el c\u00f3digo <strong>PHP\u00a0<\/strong> que recibe los datos para ser procesados.<\/p>\n<p>A continuaci\u00f3n mostramos el c\u00f3digo que debe ejecutarse al enviar la cantidad que el usuario desea pagar:<\/p>\n<div id=\"wpshdo_2\" class=\"wp-synhighlighter-outer\"><div id=\"wpshdt_2\" class=\"wp-synhighlighter-expanded\"><table border=\"0\" width=\"100%\"><tr><td align=\"left\" width=\"80%\"><a name=\"#codesyntax_2\"><\/a><a id=\"wpshat_2\" class=\"wp-synhighlighter-title\" href=\"#codesyntax_2\"  onClick=\"javascript:wpsh_toggleBlock(2)\" title=\"Click to show\/hide code block\">Source code<\/a><\/td><td align=\"right\"><a href=\"#codesyntax_2\" onClick=\"javascript:wpsh_code(2)\" title=\"Show code only\"><img decoding=\"async\" border=\"0\" style=\"border: 0 none\" src=\"https:\/\/www.jose-aguilar.com\/blog\/wp-content\/plugins\/wp-synhighlight\/themes\/default\/images\/code.png\" \/><\/a>&nbsp;<a href=\"#codesyntax_2\" onClick=\"javascript:wpsh_print(2)\" title=\"Print code\"><img decoding=\"async\" border=\"0\" style=\"border: 0 none\" src=\"https:\/\/www.jose-aguilar.com\/blog\/wp-content\/plugins\/wp-synhighlight\/themes\/default\/images\/printer.png\" \/><\/a>&nbsp;<a href=\"https:\/\/www.jose-aguilar.com\/blog\/wp-content\/plugins\/wp-synhighlight\/About.html\" target=\"_blank\" title=\"Show plugin information\"><img decoding=\"async\" border=\"0\" style=\"border: 0 none\" src=\"https:\/\/www.jose-aguilar.com\/blog\/wp-content\/plugins\/wp-synhighlight\/themes\/default\/images\/info.gif\" \/><\/a>&nbsp;<\/td><\/tr><\/table><\/div><div id=\"wpshdi_2\" class=\"wp-synhighlighter-inner\" style=\"display: block;\"><pre class=\"php\" style=\"font-family:monospace;\"><span class=\"kw2\">&lt;?php<\/span>\n<span class=\"kw1\">if<\/span> <span class=\"br0\">&#40;<\/span><span class=\"re0\">$_POST<\/span><span class=\"br0\">[<\/span><span class=\"st_h\">'submitPayment'<\/span><span class=\"br0\">]<\/span><span class=\"br0\">&#41;<\/span> <span class=\"br0\">&#123;<\/span>\n    <span class=\"kw1\">include<\/span> <span class=\"st0\">&quot;api\/apiRedsys.php&quot;<\/span><span class=\"sy0\">;<\/span>  \n    <span class=\"re0\">$miObj<\/span> <span class=\"sy0\">=<\/span> <span class=\"kw2\">new<\/span> RedsysAPI<span class=\"sy0\">;<\/span>\n&nbsp;\n    <span class=\"re0\">$amount<\/span> <span class=\"sy0\">=<\/span> <span class=\"re0\">$_POST<\/span><span class=\"br0\">[<\/span><span class=\"st_h\">'amount'<\/span><span class=\"br0\">]<\/span><span class=\"sy0\">;<\/span>    \n    <span class=\"re0\">$url_tpv<\/span> <span class=\"sy0\">=<\/span> <span class=\"st_h\">'https:\/\/sis.redsys.es\/sis\/realizarPago'<\/span><span class=\"sy0\">;<\/span>\n    <span class=\"re0\">$version<\/span> <span class=\"sy0\">=<\/span> <span class=\"st0\">&quot;HMAC_SHA256_V1&quot;<\/span><span class=\"sy0\">;<\/span> \n    <span class=\"re0\">$clave<\/span> <span class=\"sy0\">=<\/span> <span class=\"st_h\">'TU CLAVE DE COMERCIO'<\/span><span class=\"sy0\">;<\/span> <span class=\"co1\">\/\/poner la clave SHA-256 facilitada por el banco<\/span>\n    <span class=\"re0\">$name<\/span> <span class=\"sy0\">=<\/span> <span class=\"st_h\">'TU NOMBRE DE COMERCIO'<\/span><span class=\"sy0\">;<\/span>\n    <span class=\"re0\">$code<\/span> <span class=\"sy0\">=<\/span> <span class=\"st_h\">'TU CODIGO DE COMERCIO'<\/span><span class=\"sy0\">;<\/span>\n    <span class=\"re0\">$terminal<\/span> <span class=\"sy0\">=<\/span> <span class=\"st_h\">'1'<\/span><span class=\"sy0\">;<\/span>\n    <span class=\"re0\">$order<\/span> <span class=\"sy0\">=<\/span> <a href=\"http:\/\/www.php.net\/date\"><span class=\"kw3\">date<\/span><\/a><span class=\"br0\">&#40;<\/span><span class=\"st_h\">'ymdHis'<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span>\n    <span class=\"re0\">$amount<\/span> <span class=\"sy0\">=<\/span> <span class=\"re0\">$amount<\/span> <span class=\"sy0\">*<\/span> <span class=\"nu0\">100<\/span><span class=\"sy0\">;<\/span>\n    <span class=\"re0\">$currency<\/span> <span class=\"sy0\">=<\/span> <span class=\"st_h\">'978'<\/span><span class=\"sy0\">;<\/span>\n    <span class=\"re0\">$consumerlng<\/span> <span class=\"sy0\">=<\/span> <span class=\"st_h\">'001'<\/span><span class=\"sy0\">;<\/span>\n    <span class=\"re0\">$transactionType<\/span> <span class=\"sy0\">=<\/span> <span class=\"st_h\">'0'<\/span><span class=\"sy0\">;<\/span>\n    <span class=\"re0\">$urlMerchant<\/span> <span class=\"sy0\">=<\/span> <span class=\"st_h\">'http:\/\/your-domain.com\/'<\/span><span class=\"sy0\">;<\/span>\n    <span class=\"re0\">$urlweb_ok<\/span> <span class=\"sy0\">=<\/span> <span class=\"st_h\">'http:\/\/your-domain.com\/tpv_ok.php'<\/span><span class=\"sy0\">;<\/span>\n    <span class=\"re0\">$urlweb_ko<\/span> <span class=\"sy0\">=<\/span> <span class=\"st_h\">'http:\/\/your-domain.com\/tpv_ko.php'<\/span><span class=\"sy0\">;<\/span>\n&nbsp;\n    <span class=\"re0\">$miObj<\/span><span class=\"sy0\">-&gt;<\/span><span class=\"me1\">setParameter<\/span><span class=\"br0\">&#40;<\/span><span class=\"st0\">&quot;DS_MERCHANT_AMOUNT&quot;<\/span><span class=\"sy0\">,<\/span> <span class=\"re0\">$amount<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span>\n    <span class=\"re0\">$miObj<\/span><span class=\"sy0\">-&gt;<\/span><span class=\"me1\">setParameter<\/span><span class=\"br0\">&#40;<\/span><span class=\"st0\">&quot;DS_MERCHANT_CURRENCY&quot;<\/span><span class=\"sy0\">,<\/span> <span class=\"re0\">$currency<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span>\n    <span class=\"re0\">$miObj<\/span><span class=\"sy0\">-&gt;<\/span><span class=\"me1\">setParameter<\/span><span class=\"br0\">&#40;<\/span><span class=\"st0\">&quot;DS_MERCHANT_ORDER&quot;<\/span><span class=\"sy0\">,<\/span> <span class=\"re0\">$order<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span>\n    <span class=\"re0\">$miObj<\/span><span class=\"sy0\">-&gt;<\/span><span class=\"me1\">setParameter<\/span><span class=\"br0\">&#40;<\/span><span class=\"st0\">&quot;DS_MERCHANT_MERCHANTCODE&quot;<\/span><span class=\"sy0\">,<\/span> <span class=\"re0\">$code<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span>\n    <span class=\"re0\">$miObj<\/span><span class=\"sy0\">-&gt;<\/span><span class=\"me1\">setParameter<\/span><span class=\"br0\">&#40;<\/span><span class=\"st0\">&quot;DS_MERCHANT_TERMINAL&quot;<\/span><span class=\"sy0\">,<\/span> <span class=\"re0\">$terminal<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span>\n    <span class=\"re0\">$miObj<\/span><span class=\"sy0\">-&gt;<\/span><span class=\"me1\">setParameter<\/span><span class=\"br0\">&#40;<\/span><span class=\"st0\">&quot;DS_MERCHANT_TRANSACTIONTYPE&quot;<\/span><span class=\"sy0\">,<\/span> <span class=\"re0\">$transactionType<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span>\n    <span class=\"re0\">$miObj<\/span><span class=\"sy0\">-&gt;<\/span><span class=\"me1\">setParameter<\/span><span class=\"br0\">&#40;<\/span><span class=\"st0\">&quot;DS_MERCHANT_MERCHANTURL&quot;<\/span><span class=\"sy0\">,<\/span> <span class=\"re0\">$urlMerchant<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span>\n    <span class=\"re0\">$miObj<\/span><span class=\"sy0\">-&gt;<\/span><span class=\"me1\">setParameter<\/span><span class=\"br0\">&#40;<\/span><span class=\"st0\">&quot;DS_MERCHANT_URLOK&quot;<\/span><span class=\"sy0\">,<\/span> <span class=\"re0\">$urlweb_ok<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span>      \n    <span class=\"re0\">$miObj<\/span><span class=\"sy0\">-&gt;<\/span><span class=\"me1\">setParameter<\/span><span class=\"br0\">&#40;<\/span><span class=\"st0\">&quot;DS_MERCHANT_URLKO&quot;<\/span><span class=\"sy0\">,<\/span> <span class=\"re0\">$urlweb_ko<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span>\n    <span class=\"re0\">$miObj<\/span><span class=\"sy0\">-&gt;<\/span><span class=\"me1\">setParameter<\/span><span class=\"br0\">&#40;<\/span><span class=\"st0\">&quot;DS_MERCHANT_MERCHANTNAME&quot;<\/span><span class=\"sy0\">,<\/span> <span class=\"re0\">$name<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span> \n    <span class=\"re0\">$miObj<\/span><span class=\"sy0\">-&gt;<\/span><span class=\"me1\">setParameter<\/span><span class=\"br0\">&#40;<\/span><span class=\"st0\">&quot;DS_MERCHANT_CONSUMERLANGUAGE&quot;<\/span><span class=\"sy0\">,<\/span> <span class=\"re0\">$consumerlng<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span>    \n&nbsp;\n    <span class=\"re0\">$params<\/span> <span class=\"sy0\">=<\/span> <span class=\"re0\">$miObj<\/span><span class=\"sy0\">-&gt;<\/span><span class=\"me1\">createMerchantParameters<\/span><span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span>\n    <span class=\"re0\">$signature<\/span> <span class=\"sy0\">=<\/span> <span class=\"re0\">$miObj<\/span><span class=\"sy0\">-&gt;<\/span><span class=\"me1\">createMerchantSignature<\/span><span class=\"br0\">&#40;<\/span><span class=\"re0\">$clave<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span>\n    <span class=\"sy1\">?&gt;<\/span>\n    &lt;form id=&quot;realizarPago&quot; action=&quot;<span class=\"kw2\">&lt;?php<\/span> <span class=\"kw1\">echo<\/span> <span class=\"re0\">$url_tpv<\/span><span class=\"sy0\">;<\/span> <span class=\"sy1\">?&gt;<\/span>&quot; method=&quot;post&quot;&gt;\n        &lt;input type='hidden' name='Ds_SignatureVersion' value='<span class=\"kw2\">&lt;?php<\/span> <span class=\"kw1\">echo<\/span> <span class=\"re0\">$version<\/span><span class=\"sy0\">;<\/span> <span class=\"sy1\">?&gt;<\/span>'&gt; \n        &lt;input type='hidden' name='Ds_MerchantParameters' value='<span class=\"kw2\">&lt;?php<\/span> <span class=\"kw1\">echo<\/span> <span class=\"re0\">$params<\/span><span class=\"sy0\">;<\/span> <span class=\"sy1\">?&gt;<\/span>'&gt; \n        &lt;input type='hidden' name='Ds_Signature' value='<span class=\"kw2\">&lt;?php<\/span> <span class=\"kw1\">echo<\/span> <span class=\"re0\">$signature<\/span><span class=\"sy0\">;<\/span> <span class=\"sy1\">?&gt;<\/span>'&gt; \n    &lt;\/form&gt;\n    &lt;script&gt;\n    $(document).ready(function () {\n        $(&quot;#realizarPago&quot;).submit();\n    });\n    &lt;\/script&gt;\n<span class=\"kw2\">&lt;?php<\/span>\n<span class=\"br0\">&#125;<\/span>  \n<span class=\"sy1\">?&gt;<\/span><\/pre><\/div><\/div>\n<p>En este caso, tenemos un condicional que verifica la pulsaci\u00f3n del bot\u00f3n \u00abpagar\u00bb. Cuando se pulsa en este bot\u00f3n estamos incluyendo en nuestro script la clase de la API. En la p\u00e1gina oficial de <a href=\"http:\/\/www.redsys.es\/\" target=\"_blank\" rel=\"noopener noreferrer\">Redsys<\/a> puedes encontrar ayuda y descargar los archivos de la API para <strong>PHP<\/strong> entre otros lenguajes. Creando un objeto de la API y guardando la cantidad a pagar en nuestra variable $amount.<\/p>\n<p>Seguidamente estamos declarando:<\/p>\n<ul>\n<li>La url del tpv en la variable $url_tpv. Para ponerlo en modo pruebas debes poner: https:\/\/sis-t.redsys.es:25443\/sis\/realizarPago<\/li>\n<li>La versi\u00f3n de la firma en la variable $version.<\/li>\n<li>La clave SHA-256 en la variable $clave.<\/li>\n<li>El nombre de comercio en la variable $name, facilitado por el banco.<\/li>\n<li>El c\u00f3digo de comercio en la variable $code, facilitado por el banco.<\/li>\n<li>El terminal en la variable $terminal, suele ser 1 casi siempre.<\/li>\n<li>La fecha del pago en la variable $order con el formato espec\u00edfico para que el TPV Virtual lo sepa interpretar.<\/li>\n<li>La cantidad a pagar en $amount. La cantidad que escribe el usuario se debe multiplicar por 100 para enviarla al TPV.<\/li>\n<li>La moneda en la variable $currency con valor \u00ab978\u00bb = Euro.<\/li>\n<li>El idioma en la variable $consumerlng. En el ejemplo estamos poniendo \u00ab001\u00bb para que aparezca el TPV en espa\u00f1ol.<\/li>\n<li>El tipo de transacci\u00f3n en la variable $transactionType con valor \u00ab0\u00bb.<\/li>\n<li>La url del comerciante en la variable $urlMerchant. Debe ser la url para enviar las notificaciones desde el TPV Virtual.<\/li>\n<li>La url para los pagos correctos en la variable $urlweb_ok. Debes crear una p\u00e1gina para informar al usuario de que el pago se ha realizado correctamente.<\/li>\n<li>La url para los pagos cancelados o incorrectos en la variable $urlweb_ko. Debes crear una p\u00e1gina para informar al usuario de que su pago ha sido err\u00f3neo.<\/li>\n<\/ul>\n<p>Seguidamente usamos la funci\u00f3n setParameter() de la clase de la API Redys para establecer los par\u00e1metros necesarios para que la conexi\u00f3n con el <strong>TPV Virtual<\/strong> tenga \u00e9xito. Se crean los par\u00e1metros utilizando la funci\u00f3n createMerchantParameters(). Y finalmente se genera la firma con la clave SHA-256.<\/p>\n<p>Toda esta informaci\u00f3n se deposita en los correspondientes inputs ocultos dentro de otro formulario que se env\u00eda autom\u00e1ticamente al <strong>TPV Virtual<\/strong> con <strong>JavaScript<\/strong>.<\/p>\n<p>En principio debe funcionar con cualquier banco que disponga del servicio de TPV Virtual con <strong>Redsys<\/strong>. Actualmente, en el ejemplo estamos trabajando con <strong>CAIXABANK<\/strong>.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-6993\" src=\"https:\/\/www.jose-aguilar.com\/blog\/wp-content\/uploads\/2016\/07\/tpv-virtual-redsys-caixabank-php.png\" alt=\"\" width=\"967\" height=\"661\" srcset=\"https:\/\/www.jose-aguilar.com\/blog\/wp-content\/uploads\/2016\/07\/tpv-virtual-redsys-caixabank-php.png 967w, https:\/\/www.jose-aguilar.com\/blog\/wp-content\/uploads\/2016\/07\/tpv-virtual-redsys-caixabank-php-300x205.png 300w, https:\/\/www.jose-aguilar.com\/blog\/wp-content\/uploads\/2016\/07\/tpv-virtual-redsys-caixabank-php-768x525.png 768w\" sizes=\"auto, (max-width: 967px) 100vw, 967px\" \/><\/p>\n<p style=\"text-align: center;\"><em>Esta entrada ha sido actualizada el 28\/08\/2018.<\/em><\/p>\n<p style=\"text-align: center;\"><a class=\"btn btn-secondary\" href=\"https:\/\/www.jose-aguilar.com\/scripts\/php\/redsys-pago-con-tarjeta\/\" target=\"_blank\" rel=\"noopener noreferrer\"><i class=\"fa fa-eye\"><\/i> Ver demo<\/a> <a class=\"btn btn-primary\" href=\"https:\/\/www.jose-aguilar.com\/scripts\/php\/redsys-pago-con-tarjeta\/redsys-pago-con-tarjeta.zip\"><i class=\"fa fa-download\"><\/i> Descargar<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Tutorial y c\u00f3digo de ejemplo que te permite conseguir realizar una integraci\u00f3n de pago con tarjeta de cr\u00e9dito utilizando PHP, Redsys y el TPV del banco.<\/p>\n","protected":false},"author":1,"featured_media":7327,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[3],"tags":[177,84],"class_list":["post-6791","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-php","tag-formas-de-pago","tag-formularios"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v25.6 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Como implementar una pasarela de pago mediante tarjeta de cr\u00e9dito utilizando PHP - Jose Aguilar Blog<\/title>\n<meta name=\"description\" content=\"Tutorial y c\u00f3digo de ejemplo que te permite conseguir realizar una integraci\u00f3n de pago con tarjeta de cr\u00e9dito utilizando PHP, Redsys y el TPV del banco.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<meta property=\"og:locale\" content=\"es_ES\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Como implementar una pasarela de pago mediante tarjeta de cr\u00e9dito utilizando PHP - Jose Aguilar Blog\" \/>\n<meta property=\"og:description\" content=\"Tutorial y c\u00f3digo de ejemplo que te permite conseguir realizar una integraci\u00f3n de pago con tarjeta de cr\u00e9dito utilizando PHP, Redsys y el TPV del banco.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.jose-aguilar.com\/blog\/como-implementar-una-pasarela-de-pago-mediante-tarjeta-de-credito-con-php\/\" \/>\n<meta property=\"og:site_name\" content=\"Jose Aguilar Blog\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/joseaguilarblog\" \/>\n<meta property=\"article:published_time\" content=\"2016-07-19T14:14:29+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2019-06-14T10:51:33+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.jose-aguilar.com\/blog\/wp-content\/uploads\/2016\/07\/como-implementar-una-pasarela-de-pago-mediante-tarjeta-de-credito-con-php.png\" \/>\n\t<meta property=\"og:image:width\" content=\"250\" \/>\n\t<meta property=\"og:image:height\" content=\"250\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Jose Aguilar\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@JoseAguilarBlog\" \/>\n<meta name=\"twitter:site\" content=\"@JoseAguilarBlog\" \/>\n<meta name=\"twitter:label1\" content=\"Escrito por\" \/>\n\t<meta name=\"twitter:data1\" content=\"Jose Aguilar\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tiempo de lectura\" \/>\n\t<meta name=\"twitter:data2\" content=\"7 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.jose-aguilar.com\/blog\/como-implementar-una-pasarela-de-pago-mediante-tarjeta-de-credito-con-php\/\",\"url\":\"https:\/\/www.jose-aguilar.com\/blog\/como-implementar-una-pasarela-de-pago-mediante-tarjeta-de-credito-con-php\/\",\"name\":\"Como implementar una pasarela de pago mediante tarjeta de cr\u00e9dito utilizando PHP - Jose Aguilar Blog\",\"isPartOf\":{\"@id\":\"https:\/\/www.jose-aguilar.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.jose-aguilar.com\/blog\/como-implementar-una-pasarela-de-pago-mediante-tarjeta-de-credito-con-php\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.jose-aguilar.com\/blog\/como-implementar-una-pasarela-de-pago-mediante-tarjeta-de-credito-con-php\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.jose-aguilar.com\/blog\/wp-content\/uploads\/2016\/07\/como-implementar-una-pasarela-de-pago-mediante-tarjeta-de-credito-con-php.png\",\"datePublished\":\"2016-07-19T14:14:29+00:00\",\"dateModified\":\"2019-06-14T10:51:33+00:00\",\"author\":{\"@id\":\"https:\/\/www.jose-aguilar.com\/blog\/#\/schema\/person\/e6d485db1e1140866e95971d17105d11\"},\"description\":\"Tutorial y c\u00f3digo de ejemplo que te permite conseguir realizar una integraci\u00f3n de pago con tarjeta de cr\u00e9dito utilizando PHP, Redsys y el TPV del banco.\",\"breadcrumb\":{\"@id\":\"https:\/\/www.jose-aguilar.com\/blog\/como-implementar-una-pasarela-de-pago-mediante-tarjeta-de-credito-con-php\/#breadcrumb\"},\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.jose-aguilar.com\/blog\/como-implementar-una-pasarela-de-pago-mediante-tarjeta-de-credito-con-php\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\/\/www.jose-aguilar.com\/blog\/como-implementar-una-pasarela-de-pago-mediante-tarjeta-de-credito-con-php\/#primaryimage\",\"url\":\"https:\/\/www.jose-aguilar.com\/blog\/wp-content\/uploads\/2016\/07\/como-implementar-una-pasarela-de-pago-mediante-tarjeta-de-credito-con-php.png\",\"contentUrl\":\"https:\/\/www.jose-aguilar.com\/blog\/wp-content\/uploads\/2016\/07\/como-implementar-una-pasarela-de-pago-mediante-tarjeta-de-credito-con-php.png\",\"width\":250,\"height\":250},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.jose-aguilar.com\/blog\/como-implementar-una-pasarela-de-pago-mediante-tarjeta-de-credito-con-php\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Portada\",\"item\":\"https:\/\/www.jose-aguilar.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Como implementar una pasarela de pago mediante tarjeta de cr\u00e9dito utilizando PHP\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.jose-aguilar.com\/blog\/#website\",\"url\":\"https:\/\/www.jose-aguilar.com\/blog\/\",\"name\":\"Jose Aguilar Blog\",\"description\":\"Desarrollo Web con PrestaShop, WordPress, PHP, jQuery y Ajax\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.jose-aguilar.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"es\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.jose-aguilar.com\/blog\/#\/schema\/person\/e6d485db1e1140866e95971d17105d11\",\"name\":\"Jose Aguilar\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\/\/www.jose-aguilar.com\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/abbfef5f1d75260c549d0f2c2842bb697ba1aadff3b2836b39d2590c8a625415?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/abbfef5f1d75260c549d0f2c2842bb697ba1aadff3b2836b39d2590c8a625415?s=96&d=mm&r=g\",\"caption\":\"Jose Aguilar\"},\"description\":\"Director ejecutivo y tecnol\u00f3gico en JA Modules. Experto programador PrestaShop y Experto programador WordPress.\",\"sameAs\":[\"https:\/\/plus.google.com\/114357189801512615537\"],\"url\":\"https:\/\/www.jose-aguilar.com\/blog\/author\/josea902\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Como implementar una pasarela de pago mediante tarjeta de cr\u00e9dito utilizando PHP - Jose Aguilar Blog","description":"Tutorial y c\u00f3digo de ejemplo que te permite conseguir realizar una integraci\u00f3n de pago con tarjeta de cr\u00e9dito utilizando PHP, Redsys y el TPV del banco.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"og_locale":"es_ES","og_type":"article","og_title":"Como implementar una pasarela de pago mediante tarjeta de cr\u00e9dito utilizando PHP - Jose Aguilar Blog","og_description":"Tutorial y c\u00f3digo de ejemplo que te permite conseguir realizar una integraci\u00f3n de pago con tarjeta de cr\u00e9dito utilizando PHP, Redsys y el TPV del banco.","og_url":"https:\/\/www.jose-aguilar.com\/blog\/como-implementar-una-pasarela-de-pago-mediante-tarjeta-de-credito-con-php\/","og_site_name":"Jose Aguilar Blog","article_publisher":"https:\/\/www.facebook.com\/joseaguilarblog","article_published_time":"2016-07-19T14:14:29+00:00","article_modified_time":"2019-06-14T10:51:33+00:00","og_image":[{"width":250,"height":250,"url":"https:\/\/www.jose-aguilar.com\/blog\/wp-content\/uploads\/2016\/07\/como-implementar-una-pasarela-de-pago-mediante-tarjeta-de-credito-con-php.png","type":"image\/png"}],"author":"Jose Aguilar","twitter_card":"summary_large_image","twitter_creator":"@JoseAguilarBlog","twitter_site":"@JoseAguilarBlog","twitter_misc":{"Escrito por":"Jose Aguilar","Tiempo de lectura":"7 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/www.jose-aguilar.com\/blog\/como-implementar-una-pasarela-de-pago-mediante-tarjeta-de-credito-con-php\/","url":"https:\/\/www.jose-aguilar.com\/blog\/como-implementar-una-pasarela-de-pago-mediante-tarjeta-de-credito-con-php\/","name":"Como implementar una pasarela de pago mediante tarjeta de cr\u00e9dito utilizando PHP - Jose Aguilar Blog","isPartOf":{"@id":"https:\/\/www.jose-aguilar.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.jose-aguilar.com\/blog\/como-implementar-una-pasarela-de-pago-mediante-tarjeta-de-credito-con-php\/#primaryimage"},"image":{"@id":"https:\/\/www.jose-aguilar.com\/blog\/como-implementar-una-pasarela-de-pago-mediante-tarjeta-de-credito-con-php\/#primaryimage"},"thumbnailUrl":"https:\/\/www.jose-aguilar.com\/blog\/wp-content\/uploads\/2016\/07\/como-implementar-una-pasarela-de-pago-mediante-tarjeta-de-credito-con-php.png","datePublished":"2016-07-19T14:14:29+00:00","dateModified":"2019-06-14T10:51:33+00:00","author":{"@id":"https:\/\/www.jose-aguilar.com\/blog\/#\/schema\/person\/e6d485db1e1140866e95971d17105d11"},"description":"Tutorial y c\u00f3digo de ejemplo que te permite conseguir realizar una integraci\u00f3n de pago con tarjeta de cr\u00e9dito utilizando PHP, Redsys y el TPV del banco.","breadcrumb":{"@id":"https:\/\/www.jose-aguilar.com\/blog\/como-implementar-una-pasarela-de-pago-mediante-tarjeta-de-credito-con-php\/#breadcrumb"},"inLanguage":"es","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.jose-aguilar.com\/blog\/como-implementar-una-pasarela-de-pago-mediante-tarjeta-de-credito-con-php\/"]}]},{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/www.jose-aguilar.com\/blog\/como-implementar-una-pasarela-de-pago-mediante-tarjeta-de-credito-con-php\/#primaryimage","url":"https:\/\/www.jose-aguilar.com\/blog\/wp-content\/uploads\/2016\/07\/como-implementar-una-pasarela-de-pago-mediante-tarjeta-de-credito-con-php.png","contentUrl":"https:\/\/www.jose-aguilar.com\/blog\/wp-content\/uploads\/2016\/07\/como-implementar-una-pasarela-de-pago-mediante-tarjeta-de-credito-con-php.png","width":250,"height":250},{"@type":"BreadcrumbList","@id":"https:\/\/www.jose-aguilar.com\/blog\/como-implementar-una-pasarela-de-pago-mediante-tarjeta-de-credito-con-php\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Portada","item":"https:\/\/www.jose-aguilar.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Como implementar una pasarela de pago mediante tarjeta de cr\u00e9dito utilizando PHP"}]},{"@type":"WebSite","@id":"https:\/\/www.jose-aguilar.com\/blog\/#website","url":"https:\/\/www.jose-aguilar.com\/blog\/","name":"Jose Aguilar Blog","description":"Desarrollo Web con PrestaShop, WordPress, PHP, jQuery y Ajax","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.jose-aguilar.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"es"},{"@type":"Person","@id":"https:\/\/www.jose-aguilar.com\/blog\/#\/schema\/person\/e6d485db1e1140866e95971d17105d11","name":"Jose Aguilar","image":{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/www.jose-aguilar.com\/blog\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/abbfef5f1d75260c549d0f2c2842bb697ba1aadff3b2836b39d2590c8a625415?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/abbfef5f1d75260c549d0f2c2842bb697ba1aadff3b2836b39d2590c8a625415?s=96&d=mm&r=g","caption":"Jose Aguilar"},"description":"Director ejecutivo y tecnol\u00f3gico en JA Modules. Experto programador PrestaShop y Experto programador WordPress.","sameAs":["https:\/\/plus.google.com\/114357189801512615537"],"url":"https:\/\/www.jose-aguilar.com\/blog\/author\/josea902\/"}]}},"_links":{"self":[{"href":"https:\/\/www.jose-aguilar.com\/blog\/wp-json\/wp\/v2\/posts\/6791","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.jose-aguilar.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.jose-aguilar.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.jose-aguilar.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.jose-aguilar.com\/blog\/wp-json\/wp\/v2\/comments?post=6791"}],"version-history":[{"count":0,"href":"https:\/\/www.jose-aguilar.com\/blog\/wp-json\/wp\/v2\/posts\/6791\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.jose-aguilar.com\/blog\/wp-json\/wp\/v2\/media\/7327"}],"wp:attachment":[{"href":"https:\/\/www.jose-aguilar.com\/blog\/wp-json\/wp\/v2\/media?parent=6791"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.jose-aguilar.com\/blog\/wp-json\/wp\/v2\/categories?post=6791"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.jose-aguilar.com\/blog\/wp-json\/wp\/v2\/tags?post=6791"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}