You do not get the values after buying redsys

0

As the title says, you do not get the values of the purchase after having done all the steps, and I do not understand, why, I use a file previously developed which works correctly, but in the new web no.

I leave my files to see suddenly I skip something:

Redsys.php

<?PHP
include "apiRedsys.php";
$miObj              = new RedsysAPI;
$order              = date("ymdHis");
// Real

$url_tpvv           = 'https://sis.redsys.es/sis/realizarPago';
$clave              = 'xxxxxxxy';
$code               = 'xxxxxxx';
$terminal           = '1';

// Pruebas
/*
$url_tpvv           = 'https://sis-t.redsys.es:25443/sis/realizarPago';
$clave              = 'xxxxx';
$code               = 'xxxxx';
$terminal           = '01';
*/
$version            = "HMAC_SHA256_V1";
$name               = 'EMPRESA X';
$amount             = $Total * 100;
$currency           = '978';
$consumerlng        = '001';
$transactionType    = '0';

if (isset($facturacionID)) {
    $urlMerchant        = $url_base_com . 'fpendiente.php';
    $urlweb_ok          = $url_base_com . 'pagofpendiente.php?ie=' . $Factura . '&amt=' . $precioTotal;
    $urlweb_ko          = $url_base_com . 'ptarjetap.php';
} else {
    $urlMerchant        = $url_base_com . 'formulario.php';
    $urlweb_ok          = $url_base_com . 'pago-tarjeta.php';
    $urlweb_ko          = $url_base_com . 'pago-cancelar.php';
}
// Importe
$miObj->setParameter("DS_MERCHANT_AMOUNT", $amount);
// Moneda
$miObj->setParameter("DS_MERCHANT_CURRENCY", $currency);
// Número de Pedido
$miObj->setParameter("DS_MERCHANT_ORDER", $order);
// Identificación de comercio: código FUC
$miObj->setParameter("DS_MERCHANT_MERCHANTCODE", $code);
// Número de terminal
$miObj->setParameter("DS_MERCHANT_TERMINAL", $terminal);
// Tipo de transacción
$miObj->setParameter("DS_MERCHANT_TRANSACTIONTYPE", $transactionType);
// URL del comercio para la notificación online
$miObj->setParameter("DS_MERCHANT_MERCHANTURL", $urlMerchant);
// URL OK
$miObj->setParameter("DS_MERCHANT_URLOK", $urlweb_ok);
// URL KO
$miObj->setParameter("DS_MERCHANT_URLKO", $urlweb_ko);
// Identificación de comercio
$miObj->setParameter("DS_MERCHANT_MERCHANTNAME", $name);
// Idioma del titular
$miObj->setParameter("DS_MERCHANT_CONSUMERLANGUAGE", $consumerlng);
// Datos del comercio
$miObj->setParameter("DS_MERCHANT_MERCHANTDATA", $IDUnicoTarificador);
// Descripción del producto
// Ds_Merchant_ProductDescription
// Nombre y apellidos del titular
// Ds_Merchant_Titular
// Importe total (cuota recurrente)
// Ds_Merchant_SumTotal
$params    = $miObj->createMerchantParameters();
$signature = $miObj->createMerchantSignature($clave);

?>

payment-card.php

<?php
/* Iniciar sesion */
ini_set("session.cookie_lifetime", 10800);
ini_set("session.gc_maxlifetime", 10800);
session_start();
/* Mostrar errores */
/*
error_reporting(E_ALL);
ini_set("display_errors", 1);
*/
/* Datos de conexion a MS SQL Server */
include_once('inc/database.php');
/* Carga de cabecera y menu */
include_once('inc/header.php');
include_once('inc/sidebar.php');
include_once('inc/funciones.php');
?>
<p> </p>
<p> </p>
<?php
include "inc/apiRedsys.php";

$miObj           = new RedsysAPI;
$params          = $_GET['Ds_MerchantParameters'];
$decodec         = $miObj->decodeMerchantParameters($params);
$codigoRespuesta = $miObj->getParameter("DS_MERCHANT_AMOUNT");
$obj             = json_decode($decodec);

$indice   = 0;
$aIdEnvio = array();

require 'vendor/PHPMailer/PHPMailerAutoload.php';
$mail = new PHPMailer;
$mail->SMTPAutoTLS = false;
$mail->isSMTP();
$mail->Host        = 'localhost';
$mail->Username    = '[email protected]';
$mail->Password    = 'xxxxxxx';
$mail->Port        = 25;
$mail->isHTML(true);
$mail->setFrom('[email protected]', 'xxxxxxxx');

    /*************************************************
     * ACTUALIZAR DATOS GRABAR TRAS VOLVER PAGO RedSys
     * EXEC [dbo].[EnviosGrabarFormaDePago] 
     *************************************************/
    /* Conectar con el procedimiento almacenado */
    $stmt21       = mssql_init('EnviosGrabarFormaDePago');
    /* Parametros pasados al procedimiento almacenado */
    $ControlError = '';
    $EnvioID      = NULL;
    $FormaPago    = 36;
    $FechaPago    = date("Ymd");
    $MontoPago    = ($obj->Ds_Amount) / 100;
    mssql_bind($stmt21, '@ControlError', $ControlError, SQLVARCHAR, true, false, 40);
    mssql_bind($stmt21, '@EnvioID', $EnvioID, SQLINT1);
    mssql_bind($stmt21, '@IdentificadorEnvio', $obj->Ds_MerchantData, SQLVARCHAR, false, false, 25);
    mssql_bind($stmt21, '@FormaDePago', $FormaPago, SQLINT1);
    mssql_bind($stmt21, '@FechaDePago', $FechaPago, SQLVARCHAR, false, false, 19);
    mssql_bind($stmt21, '@ReferenciaPago', $obj->Ds_Order, SQLVARCHAR, false, false, 40);
    mssql_bind($stmt21, '@MontoPago', $MontoPago, SQLFLT8);
    /* Ejecutamos el procedimiento */
    $resultado21 = mssql_execute($stmt21);
    $row         = mssql_fetch_row($resultado21);
    /* Liberar los recursos */
    mssql_free_statement($stmt21);

    /*****************************************************
     * OBTENER DATOS PARA ENVIO CORREO
     * EXEC [dbo].[EnviosSelectUnicoIdentificadorEnvioWEB]
     *****************************************************/
    /* Conectar con el procedimiento almacenado */
    $stmt27 = mssql_init('EnviosSelectUnicoIdentificadorEnvioWEB');
    /* Parametros pasados al procedimiento almacenado */
    mssql_bind($stmt27, '@ControlError', $ControlError, SQLVARCHAR, true, false, 40);
    mssql_bind($stmt27, '@IdentificadorEnvio', $obj->Ds_MerchantData, SQLVARCHAR, false, false, 25);
    /* Ejecutamos el procedimiento */
    $resultado27 = mssql_execute($stmt27);
    $row27       = mssql_fetch_array($resultado27);
    /* Liberar los recursos */
    mssql_free_statement($stmt27);

    $aIdEnvio[0] = $row27['IdentificadorEnvio'];

 /* cuerpo del mensaje que se envia con los datos cuando se retornan */
 /* codigos extras del envio del correo */
?>
<p><strong>El pago se ha realizado correctamente:</strong></p>
<p>Importe: <?php echo $MontoPago; ?>€</p>
<p>Referencia: <?php echo $obj->Ds_Order; ?></p>
<p>Identificador envío: <?php echo $obj->Ds_MerchantData; ?></p>
<p>&nbsp;</p>
<p><a class="btnClose" href="<?php echo $url_base_com; ?>formulario.php" title="Volver">Volver</a></p>

The database is OK, but the problem is that the values do not return to the page "tarjeta-pago.php"

the values of the "apiRedsys.php" are these:

<?php
/**
* NOTA SOBRE LA LICENCIA DE USO DEL SOFTWARE
* 
* El uso de este software está sujeto a las Condiciones de uso de software que
* se incluyen en el paquete en el documento "Aviso Legal.pdf". También puede
* obtener una copia en la siguiente url:
* http://www.redsys.es/wps/portal/redsys/publica/areadeserviciosweb/descargaDeDocumentacionYEjecutables
* 
* Redsys es titular de todos los derechos de propiedad intelectual e industrial
* del software.
* 
* Quedan expresamente prohibidas la reproducción, la distribución y la
* comunicación pública, incluida su modalidad de puesta a disposición con fines
* distintos a los descritos en las Condiciones de uso.
* 
* Redsys se reserva la posibilidad de ejercer las acciones legales que le
* correspondan para hacer valer sus derechos frente a cualquier infracción de
* los derechos de propiedad intelectual y/o industrial.
* 
* Redsys Servicios de Procesamiento, S.L., CIF B85955367
*/
class RedsysAPI{
    /******  Array de DatosEntrada ******/
    var $vars_pay = array();
    /******  Set parameter ******/
    function setParameter($key,$value){
        $this->vars_pay[$key]=$value;
    }
    /******  Get parameter ******/
    function getParameter($key){
        return $this->vars_pay[$key];
    }
    //////////////////////////////////////////////////////////////////////////////////////////////
    //////////////////////////////////////////////////////////////////////////////////////////////
    ////////////                    FUNCIONES AUXILIARES:                             ////////////
    //////////////////////////////////////////////////////////////////////////////////////////////
    //////////////////////////////////////////////////////////////////////////////////////////////

    /******  3DES Function  ******/
    function encrypt_3DES($message, $key){
        // Se establece un IV por defecto
        $bytes = array(0,0,0,0,0,0,0,0); //byte [] IV = {0, 0, 0, 0, 0, 0, 0, 0}
        $iv = implode(array_map("chr", $bytes)); //PHP 4 >= 4.0.2

        // Se cifra
        $ciphertext = mcrypt_encrypt(MCRYPT_3DES, $key, $message, MCRYPT_MODE_CBC, $iv); //PHP 4 >= 4.0.2
        return $ciphertext;
    }
    /******  Base64 Functions  ******/
    function base64_url_encode($input){
        return strtr(base64_encode($input), '+/', '-_');
    }
    function encodeBase64($data){
        $data = base64_encode($data);
        return $data;
    }
    function base64_url_decode($input){
        return base64_decode(strtr($input, '-_', '+/'));
    }
    function decodeBase64($data){
        $data = base64_decode($data);
        return $data;
    }
    /******  MAC Function ******/
    function mac256($ent,$key){
        $res = hash_hmac('sha256', $ent, $key, true);//(PHP 5 >= 5.1.2)
        return $res;
    }
    //////////////////////////////////////////////////////////////////////////////////////////////
    //////////////////////////////////////////////////////////////////////////////////////////////
    ////////////       FUNCIONES PARA LA GENERACIÓN DEL FORMULARIO DE PAGO:           ////////////
    //////////////////////////////////////////////////////////////////////////////////////////////
    //////////////////////////////////////////////////////////////////////////////////////////////

    /******  Obtener Número de pedido ******/
    function getOrder(){
        $numPedido = "";
        if(empty($this->vars_pay['DS_MERCHANT_ORDER'])){
            $numPedido = $this->vars_pay['Ds_Merchant_Order'];
        } else {
            $numPedido = $this->vars_pay['DS_MERCHANT_ORDER'];
        }
        return $numPedido;
    }
    /******  Convertir Array en Objeto JSON ******/
    function arrayToJson(){
        $json = json_encode($this->vars_pay); //(PHP 5 >= 5.2.0)
        return $json;
    }
    function createMerchantParameters(){
        // Se transforma el array de datos en un objeto Json
        $json = $this->arrayToJson();
        // Se codifican los datos Base64
        return $this->encodeBase64($json);
    }
    function createMerchantSignature($key){
        // Se decodifica la clave Base64
        $key = $this->decodeBase64($key);
        // Se genera el parámetro Ds_MerchantParameters
        $ent = $this->createMerchantParameters();
        // Se diversifica la clave con el Número de Pedido
        $key = $this->encrypt_3DES($this->getOrder(), $key);
        // MAC256 del parámetro Ds_MerchantParameters
        $res = $this->mac256($ent, $key);
        // Se codifican los datos Base64
        return $this->encodeBase64($res);
    }

    //////////////////////////////////////////////////////////////////////////////////////////////
    //////////////////////////////////////////////////////////////////////////////////////////////
    //////////// FUNCIONES PARA LA RECEPCIÓN DE DATOS DE PAGO (Notif, URLOK y URLKO): ////////////
    //////////////////////////////////////////////////////////////////////////////////////////////
    //////////////////////////////////////////////////////////////////////////////////////////////

    /******  Obtener Número de pedido ******/
    function getOrderNotif(){
        $numPedido = "";
        if(empty($this->vars_pay['Ds_Order'])){
            $numPedido = $this->vars_pay['DS_ORDER'];
        } else {
            $numPedido = $this->vars_pay['Ds_Order'];
        }
        return $numPedido;
    }
    function getOrderNotifSOAP($datos){
        $posPedidoIni = strrpos($datos, "<Ds_Order>");
        $tamPedidoIni = strlen("<Ds_Order>");
        $posPedidoFin = strrpos($datos, "</Ds_Order>");
        return substr($datos,$posPedidoIni + $tamPedidoIni,$posPedidoFin - ($posPedidoIni + $tamPedidoIni));
    }
    function getRequestNotifSOAP($datos){
        $posReqIni = strrpos($datos, "<Request");
        $posReqFin = strrpos($datos, "</Request>");
        $tamReqFin = strlen("</Request>");
        return substr($datos,$posReqIni,($posReqFin + $tamReqFin) - $posReqIni);
    }
    function getResponseNotifSOAP($datos){
        $posReqIni = strrpos($datos, "<Response");
        $posReqFin = strrpos($datos, "</Response>");
        $tamReqFin = strlen("</Response>");
        return substr($datos,$posReqIni,($posReqFin + $tamReqFin) - $posReqIni);
    }
    /******  Convertir String en Array ******/
    function stringToArray($datosDecod){
        $this->vars_pay = json_decode($datosDecod, true); //(PHP 5 >= 5.2.0)
    }
    function decodeMerchantParameters($datos){
        // Se decodifican los datos Base64
        $decodec = $this->base64_url_decode($datos);
        return $decodec;    
    }
    function createMerchantSignatureNotif($key, $datos){
        // Se decodifica la clave Base64
        $key = $this->decodeBase64($key);
        // Se decodifican los datos Base64
        $decodec = $this->base64_url_decode($datos);
        // Los datos decodificados se pasan al array de datos
        $this->stringToArray($decodec);
        // Se diversifica la clave con el Número de Pedido
        $key = $this->encrypt_3DES($this->getOrderNotif(), $key);
        // MAC256 del parámetro Ds_Parameters que envía Redsys
        $res = $this->mac256($datos, $key);
        // Se codifican los datos Base64
        return $this->base64_url_encode($res);  
    }
    /******  Notificaciones SOAP ENTRADA ******/
    function createMerchantSignatureNotifSOAPRequest($key, $datos){
        // Se decodifica la clave Base64
        $key = $this->decodeBase64($key);
        // Se obtienen los datos del Request
        $datos = $this->getRequestNotifSOAP($datos);
        // Se diversifica la clave con el Número de Pedido
        $key = $this->encrypt_3DES($this->getOrderNotifSOAP($datos), $key);
        // MAC256 del parámetro Ds_Parameters que envía Redsys
        $res = $this->mac256($datos, $key);
        // Se codifican los datos Base64
        return $this->encodeBase64($res);   
    }
    /******  Notificaciones SOAP SALIDA ******/
    function createMerchantSignatureNotifSOAPResponse($key, $datos, $numPedido){
        // Se decodifica la clave Base64
        $key = $this->decodeBase64($key);
        // Se obtienen los datos del Request
        $datos = $this->getResponseNotifSOAP($datos);
        // Se diversifica la clave con el Número de Pedido
        $key = $this->encrypt_3DES($numPedido, $key);
        // MAC256 del parámetro Ds_Parameters que envía Redsys
        $res = $this->mac256($datos, $key);
        // Se codifican los datos Base64
        return $this->encodeBase64($res);   
    }
}
?>
    
asked by Eduardo Manuel Leon Cuya 21.09.2018 в 18:27
source

0 answers