redsys/tpv

用于连接Redsys/Sermepa/Servired TPV的软件包

v2.3.3 2020-10-06 17:03 UTC

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