drauta/redsys-tpv

连接到Redsys/Sermepa/Servired TPV的包

v1.0.4 2015-05-16 23:13 UTC

This package is not auto-updated.

Last update: 2024-09-14 17:42:47 UTC


README

此脚本允许您生成与Redsys(之前为Sermepa / Servired)支付网关的集成表单。

安装

使用Composer添加依赖项:"redsys/tpv": "1.*"

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 {
    $TPV->checkTransaction($_POST);
} catch (\Exception $e) {
    file_put_contents(__DIR__.'/logs/errores-tpv.log', $e->getMessage(), FILE_APPEND);
    die();
}

# Actualización del registro en caso de pago (ejemplo usando mi framework)

$Db->update(array(
    'table' => 'tpv',
    'limit' => 1,
    'data' => array(
        'operacion' => $_POST['Ds_TransactionType'],
        'fecha_pago' => date('Y-m-d H:i:s')
    ),
    'conditions' => array(
        'id' => $_POST['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

$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);

# Obtenemos los datos remitidos por el banco en formato `array`

$datos = $TPV->xmlString2array($_POST['datos']);

# Realizamos la comprobación de la transacción

try {
    $TPV->checkTransaction($datos);
} catch (\Exception $e) {
    file_put_contents(__DIR__.'/logs/errores-tpv.log', $e->getMessage(), FILE_APPEND);
    die();
}

# 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();

与Redsys/Fake的集成

如果您想使用Redsys的私有服务器进行测试,可以在您的服务器上安装以下服务:https://github.com/eusonlito/redsys-Fake

连接到此服务的配置如下

$TPV = new Redsys\Tpv\Tpv(array(
    'environments' => array(
        'local' => 'http://redsys-fake.mydomain.com'
    ),

    'Environment' => 'local',
    'Key' => 'asdfghjkd0123456789', // Debe coincidir con el valor de Key del entorno de pruebas

    ....
));

有关参数和选项的更多信息,Google可能会提供帮助 https://www.google.es/search?q=manual+instalaci%C3%B3n+redsys+php+filetype%3Apdf