A continuación, 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ías, también sirve para la mayoría de TPV´S 4B, que ahora trabajan con Redsys.
Evidentemente, necesitaréis los datos que el banco os adjuntará una vez os den el alta del servicio.
El código (en php) consta de dos archivos. El primero, será el que envíe todos los datos a la pasarela de pago. Es un formulario en POST que deberá ser ejecutado para enviar todos vuestros datos al banco.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
<!--?<br /--> $message = $amount.$order.$code.$currency.$transactionType.$urlMerchant.$clave; $signature = sha1($message); ?> <form id="enviar_tpv" action="<?= $url_tpvv ?>" method="post" name="enviar_tpv"><input type="hidden" name="Ds_Merchant_Amount" value="<?= $amount ?>" /> <input type="hidden" name="Ds_Merchant_Currency" value="<?= $currency ?>" /> <input type="hidden" name="Ds_Merchant_Order" value="<?= $order ?>" /> <input type="hidden" name="Ds_Merchant_MerchantCode" value="<?= $code ?>" /> <input type="hidden" name="Ds_Merchant_Terminal" value="<?= $terminal ?>" /> <input type="hidden" name="Ds_Merchant_TransactionType" value="<?= $transactionType ?>" /> <input type="hidden" name="Ds_Merchant_MerchantURL" value="<?= $urlMerchant ?>" /> <input type="hidden" name="Ds_Merchant_UrlOK" value="<?= $urlOK ?>" /> <input type="hidden" name="Ds_Merchant_UrlKO" value="<?= $urlKO ?>" /> <input type="hidden" name="Ds_Merchant_MerchantSignature" value="<?= $signature ?>" /> <input type="hidden" name="Ds_Merchant_ConsumerLanguage" value="<?= $ar_idiomas_tpv[0] ?>" /></form> |
Cuando el usuario rellene sus datos y proceda al pago, el banco ejecutará el archivo que le indiquéis mediante la variable post Ds_Merchant_MerchantURL del formulario anterior.
El banco enviará distintos datos por post que podéis gestionar como deseéis. Está explicado en el propio código.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
<!--?<br /--> try { /* por si hay algun fallo se captura las excepciones */ if (isset($_POST['Ds_Signature'])) { /* creamos las variables para usar */ $Ds_Response = $_POST['Ds_Response']; //codigo de respuesta $Ds_Amount = $_POST['Ds_Amount']; //monto de la orden $Ds_Order = $_POST['Ds_Order']; //numero de orden $Ds_MerchantCode = $_POST['Ds_MerchantCode']; //codigo de comercio $Ds_Currency = $_POST['Ds_Currency']; //moneda $firmaBanco = $_POST['Ds_Signature']; //firma hecha por el banco $Ds_Date = $_POST['Ds_Date']; //fecha $CLAVE = XXXX; //nuestra clave secreta proporcionada por el banco /* creamos la firma para comparar */ $firma = strtoupper(sha1($Ds_Amount . $Ds_Order . $Ds_MerchantCode . $Ds_Currency . $Ds_Response . $CLAVE)); $Ds_Response += 0; //convertimos la respuenta en un numero concreto. if ($firma == $firmaBanco) { // LA RESPUESTA DEL BANCO ES AUTÉNTICA, GESTIONAMOS EL PEDIDO } catch (Exception $e) { /* mail con el error si hay excepciones */ } |