redsys / tpv
用于连接Redsys/Sermepa/Servired TPV的软件包
Requires
- php: >=5.3
- redsys/messages: ^1
Requires (Dev)
- phpunit/phpunit: ^7
README
此脚本允许您生成与Redsys(以前称为Sermepa / Servired)支付网关集成的表单。
安装
使用composer添加依赖:"redsys/tpv": "2.*"
composer update
即时支付示例
此过程用于即时支付,无需未来确认(TransactionType = 0)
# Incluye tu arquivo de configuración (copia config.php para config.local.php) $config = require (__DIR__.'/config.local.php'); # Cargamos la clase con los parámetros base $TPV = new Redsys\Tpv\Tpv($config); # Indicamos los campos para el pedido $TPV->setFormHiddens(array( 'TransactionType' => '0', 'MerchantData' => 'Televisor de 50 pulgadas', 'Order' => '012121323', 'Amount' => '568,25', 'UrlOK' => 'http://dominio.com/direccion-todo-correcto/', 'UrlKO' => 'http://dominio.com/direccion-error', 'MerchantURL' => 'http://dominio.com/direccion-control-pago' )); # Imprimimos el pedido el formulario y redirigimos a la TPV echo '<form action="'.$TPV->getPath('/realizarPago').'" method="post">'.$TPV->getFormHiddens().'</form>'; die('<script>document.forms[0].submit();</script>');
为了进行支付控制,TPV将通过在MerchantURL中指定的URL与我们通信。
此脚本将不可见且不应响应任何内容,只需验证支付即可。
银行始终将通过此URL与我们通信,无论正确与否。
我们可以编写一个脚本(例如,示例中的http://dominio.com/direccion-control-pago),以以下方式验证支付:
# Incluye tu arquivo de configuración (copia config.php para config.local.php) $config = require (__DIR__.'/config.local.php'); # Cargamos la clase con los parámetros base $TPV = new Redsys\Tpv\Tpv($config); # Realizamos la comprobación de la transacción try { $datos = $TPV->checkTransaction($_POST); $success = true; $message = ''; } catch (Exception $e) { $datos = $TPV->getTransactionParameters($_POST); $success = false; $message = $e->getMessage(); } # Actualización del registro en caso de pago (ejemplo usando mi framework) $Db->update(array( 'table' => 'tpv', 'limit' => 1, 'data' => array( 'pagado' => $success, 'mensaje' => $message, 'operacion' => $datos['Ds_TransactionType'], 'fecha_pago' => date('Y-m-d H:i:s'), 'variables' => json_encode($datos), 'post' => json_encode($_POST) ), 'conditions' => array( 'id' => $datos['Ds_Order'] ) )); die();
延迟支付示例
此过程用于通过初始授权和后续支付确认进行的支付,而无需客户在场(TransactionType = 1)
过程与前面完全相同,只需将TransactionType
的初始值从0
更改为1
。
完成所有前面的过程后,我们必须在我们的项目中创建两个脚本,一个用于启动支付确认,另一个用于验证过程。
# Incluye tu arquivo de configuración (copia config.php para config.local.php) $config = require (__DIR__.'/config.local.php'); # Cargamos la clase con los parámetros base $TPV = new Redsys\Tpv\Tpv($config); # Indicamos los campos para la confirmación del pago $response = $TPV->sendXml(array( 'TransactionType' => '2', // Código para la Confirmación del cargo 'MerchantURL' => 'http://dominio.com/direccion-control-pago-xml', // A esta URL enviará el banco la confirmación del cobro 'Amount' => '568,25', // La cantidad final a cobrar 'Order' => '012121323', // El número de pedido, que debe existir en el sistema bancario a través de una autorización previa 'MerchantData' => 'Televisor de 50 pulgadas', ));
此执行将返回一个包含对此发送的响应的XML,但关于操作结果的响应将从银行发送到在MerchantURL中指定的URL。
为了验证发送是否正确,银行返回一个包含用于标签CODIGO
的值的XML,我们必须验证此值以确定发送是否正确。
现在我们将编写http://dominio.com/direccion-control-pago-xml
的脚本,用于收集支付结果
# Incluye tu arquivo de configuración (copia config.php para config.local.php) $config = require (__DIR__.'/config.local.php'); # Cargamos la clase con los parámetros base $TPV = new Redsys\Tpv\Tpv($config); # Realizamos la comprobación de la transacción try { $datos = $TPV->checkTransactionXml($_POST); } catch (Exception $e) { die(file_put_contents(__DIR__.'/logs/errores-tpv.log', $e->getMessage(), FILE_APPEND)); } # Actualización del registro en caso de pago (ejemplo usando mi framework) $Db->update(array( 'table' => 'tpv', 'limit' => 1, 'data' => array( 'pagado' => 1, 'operacion' => $datos['Ds_TransactionType'], 'fecha_pago' => date('Y-m-d H:i:s') ), 'conditions' => array( 'id' => $datos['Ds_Order'] ) )); die();
如果您需要有关参数或选项的更多信息,Google可以提供帮助 https://www.google.es/search?q=manual+instalaci%C3%B3n+redsys+php+filetype%3Apdf