{"id":150,"date":"2012-09-02T12:20:14","date_gmt":"2012-09-02T11:20:14","guid":{"rendered":"http:\/\/www.dgcmedia.es\/blog\/?p=150"},"modified":"2013-04-28T14:19:53","modified_gmt":"2013-04-28T13:19:53","slug":"como-hacer-tpv-sermepa","status":"publish","type":"post","link":"https:\/\/www.dgcmedia.es\/blog\/como-hacer-tpv-sermepa\/","title":{"rendered":"C\u00f3mo Hacer TPV Sermepa &#8211; Redsys"},"content":{"rendered":"<p>A continuaci\u00f3n, voy a echar un cable a aquellos que necesiten desarrollar un TPV con Sermepa (casi todos los bancos Servired lo usan).<\/p>\n<p>Desde hace unos d\u00edas, tambi\u00e9n sirve para la mayor\u00eda de TPV\u00b4S 4B, que ahora trabajan con Redsys.<\/p>\n<p>Evidentemente, necesitar\u00e9is los datos que el banco os adjuntar\u00e1 una vez os den el alta del servicio.<\/p>\n<p>El c\u00f3digo (en php) consta de dos archivos. El primero, ser\u00e1 el que env\u00ede todos los datos a la pasarela de pago. Es un formulario en POST que deber\u00e1 ser ejecutado para enviar todos vuestros datos al banco.<\/p>\n<p>&nbsp;<\/p>\n<p>[crayon lang=&#8221;php&#8221;]<br \/>\n<!--?<br \/--> $message = $amount.$order.$code.$currency.$transactionType.$urlMerchant.$clave;<br \/>\n$signature = sha1($message);<br \/>\n?&gt;<\/p>\n<form id=\"enviar_tpv\" action=\"&lt;?= $url_tpvv ?&gt;\" method=\"post\" name=\"enviar_tpv\"><input type=\"hidden\" name=\"Ds_Merchant_Amount\" value=\"&lt;?= $amount ?&gt;\" \/><br \/>\n<input type=\"hidden\" name=\"Ds_Merchant_Currency\" value=\"&lt;?= $currency ?&gt;\" \/><br \/>\n<input type=\"hidden\" name=\"Ds_Merchant_Order\" value=\"&lt;?= $order ?&gt;\" \/><br \/>\n<input type=\"hidden\" name=\"Ds_Merchant_MerchantCode\" value=\"&lt;?= $code ?&gt;\" \/><br \/>\n<input type=\"hidden\" name=\"Ds_Merchant_Terminal\" value=\"&lt;?= $terminal ?&gt;\" \/><br \/>\n<input type=\"hidden\" name=\"Ds_Merchant_TransactionType\" value=\"&lt;?= $transactionType ?&gt;\" \/><br \/>\n<input type=\"hidden\" name=\"Ds_Merchant_MerchantURL\" value=\"&lt;?= $urlMerchant ?&gt;\" \/><br \/>\n<input type=\"hidden\" name=\"Ds_Merchant_UrlOK\" value=\"&lt;?= $urlOK ?&gt;\" \/><br \/>\n<input type=\"hidden\" name=\"Ds_Merchant_UrlKO\" value=\"&lt;?= $urlKO ?&gt;\" \/><br \/>\n<input type=\"hidden\" name=\"Ds_Merchant_MerchantSignature\" value=\"&lt;?= $signature ?&gt;\" \/><br \/>\n<input type=\"hidden\" name=\"Ds_Merchant_ConsumerLanguage\" value=\"&lt;?= $ar_idiomas_tpv[0] ?&gt;\" \/><\/form>\n<p>[\/crayon]<\/p>\n<p>Cuando el usuario rellene sus datos y proceda al pago, el banco ejecutar\u00e1 el archivo que le indiqu\u00e9is mediante la variable post\u00a0Ds_Merchant_MerchantURL del formulario anterior.<\/p>\n<p>El banco enviar\u00e1 distintos datos por post que pod\u00e9is gestionar como dese\u00e9is. Est\u00e1 explicado en el propio c\u00f3digo.<\/p>\n<p>[crayon lang=&#8221;php&#8221;]<br \/>\n<!--?<br \/--> try<br \/>\n{<br \/>\n\/* por si hay algun fallo se captura las excepciones *\/<\/p>\n<p>if (isset($_POST[&#8216;Ds_Signature&#8217;]))<br \/>\n{<br \/>\n\/* creamos las variables para usar *\/<br \/>\n$Ds_Response = $_POST[&#8216;Ds_Response&#8217;]; \/\/codigo de respuesta<br \/>\n$Ds_Amount = $_POST[&#8216;Ds_Amount&#8217;]; \/\/monto de la orden<br \/>\n$Ds_Order = $_POST[&#8216;Ds_Order&#8217;]; \/\/numero de orden<br \/>\n$Ds_MerchantCode = $_POST[&#8216;Ds_MerchantCode&#8217;]; \/\/codigo de comercio<br \/>\n$Ds_Currency = $_POST[&#8216;Ds_Currency&#8217;]; \/\/moneda<br \/>\n$firmaBanco = $_POST[&#8216;Ds_Signature&#8217;]; \/\/firma hecha por el banco<br \/>\n$Ds_Date = $_POST[&#8216;Ds_Date&#8217;]; \/\/fecha<br \/>\n$CLAVE = XXXX; \/\/nuestra clave secreta proporcionada por el banco<\/p>\n<p>\/* creamos la firma para comparar *\/<br \/>\n$firma = strtoupper(sha1($Ds_Amount . $Ds_Order . $Ds_MerchantCode . $Ds_Currency . $Ds_Response . $CLAVE));<\/p>\n<p>$Ds_Response += 0; \/\/convertimos la respuenta en un numero concreto.<\/p>\n<p>if ($firma == $firmaBanco)<br \/>\n{<br \/>\n\/\/ LA RESPUESTA DEL BANCO ES AUT\u00c9NTICA, GESTIONAMOS EL PEDIDO<br \/>\n}<\/p>\n<p>catch (Exception $e)<br \/>\n{<br \/>\n\/* mail con el error si hay excepciones *\/<br \/>\n}<\/p>\n<p>[\/crayon]<\/p>\n","protected":false},"excerpt":{"rendered":"<p>A continuaci\u00f3n, voy a echar un cable a aquellos que necesiten desarrollar un TPV con Sermepa (casi todos los bancos Servired lo usan). Desde hace unos d\u00edas, tambi\u00e9n sirve para la mayor\u00eda de TPV\u00b4S 4B, que ahora trabajan con Redsys. &hellip; <a href=\"https:\/\/www.dgcmedia.es\/blog\/como-hacer-tpv-sermepa\/\">Sigue leyendo <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[23,78],"tags":[80,112,79,157],"_links":{"self":[{"href":"https:\/\/www.dgcmedia.es\/blog\/wp-json\/wp\/v2\/posts\/150"}],"collection":[{"href":"https:\/\/www.dgcmedia.es\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.dgcmedia.es\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.dgcmedia.es\/blog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.dgcmedia.es\/blog\/wp-json\/wp\/v2\/comments?post=150"}],"version-history":[{"count":4,"href":"https:\/\/www.dgcmedia.es\/blog\/wp-json\/wp\/v2\/posts\/150\/revisions"}],"predecessor-version":[{"id":233,"href":"https:\/\/www.dgcmedia.es\/blog\/wp-json\/wp\/v2\/posts\/150\/revisions\/233"}],"wp:attachment":[{"href":"https:\/\/www.dgcmedia.es\/blog\/wp-json\/wp\/v2\/media?parent=150"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.dgcmedia.es\/blog\/wp-json\/wp\/v2\/categories?post=150"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.dgcmedia.es\/blog\/wp-json\/wp\/v2\/tags?post=150"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}