Convertir encriptación en PHP 3DES en C#

Recientemente ha avisado que el sistema de pago por TPV virtual de Redsys se va a actualizar. En esta actualización se van a incorporar medidas de cifrado más potentes que la firma actual que se tiene implementado. Para ello los bancos han enviado cierta documentación (un poco tarde…) para hacer esta migración, puesto que el 23/11/2015 se supone que dejará de funcionar el sistema de encriptación actual.

Realizando la migración en mi empresa me he encontrado con un escollo que me ha costado un poco de solventar, y por lo que veo a muchos más desarrolladores de .NET les ha sucedido lo mismo. El problema está en el cifrado triple DES.

Este es el código de ejemplo que te facilitan en Redsys para realizar este cifrado.

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;
}


$key = $this->decodeBase64($key);
$ciphertext = $this->encrypt_3DES($message, $key);

La variable $message sería el texto a encryptar (en el caso de Redsys el número de pedido). La variable $key es la clave de encriptación de Redsys que previamente la decodificamos en Base64.
Al final obtenemos un resultado ($ciphertext) que es un array de bytes.

Ahora viene cuando hacemos lo mismo en .NET C#.


///
/// Uso de la encriptación TripleDES con IV todo 0 -> byte [] IV = {0, 0, 0, 0, 0, 0, 0, 0}
/// Esta encriptación se usa así para los TPV's de Redsys
///


///Texto a encriptar ///Clave de la encriptación en un array de Bytes ///
public static byte[] EncriptarTripleDES_IV_0(string texto, byte[] key)
{
using (TripleDESCryptoServiceProvider tdes = new TripleDESCryptoServiceProvider())
{
byte[] iv_0 = { 0, 0, 0, 0, 0, 0, 0, 0 };  //same IV that Redsys
byte[] toEncryptArray = Encoding.ASCII.GetBytes(texto);
tdes.IV = iv_0;
//assign the secret key
tdes.Key = key;
tdes.Mode = CipherMode.CBC;
tdes.Padding = PaddingMode.Zeros;
ICryptoTransform cTransform = tdes.CreateEncryptor();
//transform the specified region of bytes array to resultArray
byte[] resultArray = cTransform.TransformFinalBlock(toEncryptArray, 0,toEncryptArray.Length);
//Clear to Best Practices
tdes.Clear();
return resultArray;
}
}

Esta función nos devuelve el mismo resultado que la orginial proporcionada por Redsys en PHP.

83 opiniones en “Convertir encriptación en PHP 3DES en C#”

  1. and for this code?

    /****** MAC Function ******/
    function mac256($ent,$key){
    $res = hash_hmac(‘sha256’, $ent, $key, true);//(PHP 5 >= 5.1.2)
    return $res;
    }

    1. Hi Roberto, it may be like this.

      public static byte[] EncriptarSHA256(string texto, byte[] privateKey)
      {
      var encoding = new System.Text.UTF8Encoding();
      byte[] key = privateKey;
      var myhmacsha256 = new HMACSHA256(key);
      byte[] hashValue = myhmacsha256.ComputeHash(encoding.GetBytes(texto));
      myhmacsha256.Clear();
      return hashValue;
      }

  2. Muy bueno el artículo. Yo tengo el mismo problema de actualizar el TPV en c# y me ha servido de mucho. Pero no me funciona …
    Con esta secuencia de generación de firma con tus funciones no me funciona, redsys me da error de firma incorrecta (SIS0042). ¿?

    // Se decodifica la clave Base64, 24 chars
    byte[] key = Convert.FromBase64String(HashReal);

    // Se diversifica la clave con el Número de Pedido
    var key2 = TripleDESEncrypt(Order, key);

    // MAC256 del parámetro Ds_MerchantParameters
    var res = EncriptarSHA256(MerchantParameters, key2);

    // Se codifican los datos Base64
    var firma = Convert.ToBase64String(res);

    1. ¿Estas usando la clave (HashReal) antigua de Redsys o la nueva? . Con estos cambios de Redsys no vale la secretkey que se usaba hasta ahora. Entrado desde la administración del TPV Virtual podrás acceder a ver la secretKey nueva y también la vieja.

      1. Check using test key reported in the example and everything is ok.
        If I used the production key provided me by sms I got the same error.
        I’m waiting for an answer for support.
        My prod key does not work even with the php code provided by RedSys.
        I think there is something wrong in the production url reported in the manual….
        I tried to call the support, but they are in trouble if I speak English…

      2. Pues estoy usando la nueva. Me la enviaron por SMS, en la administración del TPV (es del Sabadell) no está esa la opción de ver la clave .

          1. Using testing key reported in the example provided by RedSys, it works.
            Using the key provided by SMS no.

          2. Yes sure.
            I tried using the example provided by Redsys “As is”. It works.
            Then I replaced in the same example the URL, Merchant_Code, Terminal and the Key using data provided for production
            I got error. In the page all 0 and error.

            Then I used my own interface in C#. Using example data, it works. With the production data no.

    2. Hola, acabo de implentar las funciones y he comparado los resultados con el ejemplo que hay en php y los resultados son los mismos. Ahora cuando cambio los datos por los míos me da error: SIS0042 – La firma enviada no es correcta.

      ¿Sabéis si los de redsys aun están haciendo cambios o debería de funcionar ya? Lo he probado tanto en la url de pruebas como en la de producción y me da el mismo error. Los de soporte del tpv no me contestan….

      1. A mi con las claves que me facilitan para el entorno de pruebas, no funciona. En cambio con las claves de su ejemplo sí.
        Por otro lado he probado con las claves que me facilitan en el entorno de pruebas en el entorno real y si que me ha dejado.
        Otra prueba que he realizado ha sido en el entorno de pruebas antiguo. Ahí me ha funcionado correctamente.

        Esta sería la URL Pruebas:
        https://sis-t.redsys.es:25443/sis/realizarPago

        Esta sería la URL Producción:
        https://sis.redsys.es/sis/realizarPago

          1. Hola Rebeca,
            He visto que preguntabas por los códigos en ASP clásico, yo tengo el mismo problema, has conseguido algo?? me puedes ayudar??
            Gracias.

  3. Tengo una duda importante
    Cada vez que ejecuto el php de prueba me genera una clave diferente (ejemploGeneraPet.php), sin embargo mi c# con los datos de prueba siempre me genera la misma. ¿que me falta?

    1. El ejemplo tal cual está de PHP, creo recordar que siempre devolvía los mismos datos puesto que no cambian en las llamadas.
      Debería de devolverte el mismo resultado, salvo que cambies algún dato como el Número de pedido o algo similar.

  4. Hola,

    Gracias por el código, me ha funcionado genial.

    Ahora me da un error que no se por donde cogerlo.

    Entiendo que los parámetros los paso bien, el objeto es:

    Merchant_Parameters parameters = new Merchant_Parameters()
    {
    Ds_Merchant_Amount = importe (multiplicado por cien para evitar comas.),
    Ds_Merchant_MerchantCode = ConfigurationManager.AppSettings["Ds_Merchant_MerchantCode"],
    Ds_Merchant_Currency = ConfigurationManager.AppSettings["Ds_Merchant_Currency"],
    Ds_Merchant_TransactionType = "0", //autorización
    Ds_Merchant_Terminal = ConfigurationManager.AppSettings["Ds_Merchant_Terminal"],
    Ds_Merchant_Order = order,
    Ds_Merchant_MerchantURL = ConfigurationManager.AppSettings["Ds_Merchant_MerchantURL"],
    Ds_Merchant_UrlOK = String.Format("{0}://{1}/pago_ok", protocol, entorno),
    Ds_Merchant_UrlKO = String.Format("{0}://{1}/pago_ko", protocol, entorno)
    };

    Pasado a JSON.

    El error es: “Error en datos enviados. Contacte con su comercio.”

    gracias por la ayuda.

  5. Gracias por los ejemplos, me estaba volviendo un poco “loco” buscando por la red como adaptarlo a C# (aunque el sitio usa asp clasico, intentaremos cambiar la pasarela salvo que encontremos ejemplos).

    El problema viene despues de realizar todo el proceso envio el formulario de la siguiente manera :

    Realizando el pago.

    Siguiendo el esquema del PDF, pero no hay manera ni en el sandbox, ni en produccion siempre el mismo error :

    Importe 0 Sin Asignar
    Código Comercio 0
    Terminal 0
    Número pedido
    Error en datos enviados. Contacte con su comercio.

    Un saludo!

      1. Parece que el error aparece cuando el codigo de comercio no existe o algo similar. Al introducir el codigo de comercio correcto la pagina de prueba funciona

      1. //Capturo los parámetros que me manda Redsys por POST
        string ds_SignatureVersion = Request.Form[“Ds_SignatureVersion”].ToString();
        string ds_MerchantParameters = Request.Form[“Ds_MerchantParameters”].ToString();
        string ds_Signature = Request.Form[“Ds_Signature”].ToString();

        //Decodifico los parámetros para obtener el JSON
        string parametrosJSON = string.Empty;
        if(!string.IsNullOrEmpty(ds_MerchantParameters))
        {
        var base64EncodedBytes = System.Convert.FromBase64String(ds_MerchantParameters);
        parametrosJSON = System.Text.Encoding.UTF8.GetString(base64EncodedBytes);

        //RedsysRespuestaJSON es una clase que he creado con la estructura que devuelve Redsys (la verás en el ejemplo de PHP)
        RedsysRespuestaJSON oRedsys = Newtonsoft.Json.JsonConvert.DeserializeObject(parametrosJSON);

        //A partir de aquí ya tienes en el objeto oRedsys todos los datos que te ha llegado de la pasarela. Una buena práctica (creo que se hace también en el ejemplo de PHP) sería comprobar la firma.
        }

        1. De antemano mil gracias Jesus.
          he implementado eso pero me dice que falta la directiva de ensamblado para el Newtonsoft.Json
          cual es la directiva?
          using …?
          Saludos y gracias otra vez

          1. Hola,
            alguien me puede decir si hay un ejemplo que funciona en cualquier lenguaje de programación?
            El ejemplo en lenguaje php disponible en esta dirección:
            http://www.redsys.es/wps/portal/redsys/publica/areadeserviciosweb,
            proporcionada por Redsys estaba en funcionamiento hasta hace unos días.
            ahora ya no.
            pero ahora no funciona más.
            Los otros ejemplos en esta página no funcionan

            Incluyendo los códigos de producción proporcionados por el banco no funciona, hay siempre el error “Error en Datos Enviados. Contacte con el comercial”.

          2. Yo estoy probando directamente en Real. Luego me devuelvo la operación desde la administración del TPV.
            El entorno de pruebas no me funciona, les he mandado correos pero no me responden.

          3. Muchas Gracias por todo Jesús :):):), indagando había encontrado la librería y ya conseguí que retornase el OK.

  6. Por cierto, una pregunta mas “mercantil o de negocio” que cobrareis a vuestros clientes por el cambio de SHA1 a SHA256?

  7. Os habéis encontrado con un error como este?

    PAGO_TARJETA_POST – FIRMA GENERADA – rgd3uHJTL0D9wlath/+s/koThfMweEAXKzfdaxc4Ucw=
    PAGO_TARJETA_POST – SIGNATURE PARAMETERS – rgd3uHJTL0D9wlath_-s_koThfMweEAXKzfdaxc4Ucw=

    Genero la firma para validar que los datos que me devuelven, una vez hecha la operación, son correctos y pueda procesar y meter en el sistema el pago.
    Esta firma generada es la primera, la que me llega por parámetro es la segunda.

    Como podéis ver, las diferencias son con los “SIMBOLOS”, y esto no me había pasado nunca.

    ¿Me podéis ayudar?
    Gracias de antemano

    1. a mi me pasa lo mismo. Al generar la firma aparecen “símbolos” raros y en la respuesta me aparece otra firma. He podido hacer pagos hasta ahora, en todos los que no ha aparecido ningún símbolo, los hace perfectamente.

      mi script es para cobrar los pagos “recurrentes”:

      function download_page($url,$xml){
      $ch = curl_init();
      curl_setopt($ch, CURLOPT_URL, $url);
      curl_setopt($ch, CURLOPT_POST, 1);
      curl_setopt($ch, CURLOPT_POSTFIELDS, “entrada=$xml”);
      curl_setopt($ch, CURLOPT_FAILONERROR,1);
      curl_setopt($ch, CURLOPT_FOLLOWLOCATION,1);
      curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
      curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
      curl_setopt($ch, CURLOPT_TIMEOUT, 15);
      $result = curl_exec($ch);
      curl_close($ch);

      return $result;
      }

      $xml = ”

      $Merchant_Amount
      $Merchant_Order
      $Merchant_Code
      $Merchant_Currency
      $Merchant_TransactionType
      $Merchant_Terminal

      HMAC_SHA256_V1
      $signature
      “;

      $sXML = download_page($url,$xml);

      $oXML = new SimpleXMLElement($sXML);

      me devuelve “error en la firma” SIS0042

      esto es lo que yo le mando -> Gf9hsF3zVb9H55+8hjCe4LhQNoq6Fa+O4ubbNcyRrtU=
      esto es lo que me responde -> Gf9hsF3zVb9H55 8hjCe4LhQNoq6Fa O4ubbNcyRrtU=

      Insisto, si al generar la firma no aparecen símbolos, me funciona correctamente.

      alguna idea?

      Gracias!!

    2. a mi me pasa lo mismo. Al generar la firma aparecen “símbolos” raros y en la respuesta me aparece otra firma. He podido hacer pagos hasta ahora, en todos los que no ha aparecido ningún símbolo, los hace perfectamente.

      mi script es para cobrar los pagos “recurrentes”:


      function download_page($url,$xml){
      $ch = curl_init();
      curl_setopt($ch, CURLOPT_URL, $url);
      curl_setopt($ch, CURLOPT_POST, 1);
      curl_setopt($ch, CURLOPT_POSTFIELDS, "entrada=$xml");
      curl_setopt($ch, CURLOPT_FAILONERROR,1);
      curl_setopt($ch, CURLOPT_FOLLOWLOCATION,1);
      curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
      curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
      curl_setopt($ch, CURLOPT_TIMEOUT, 15);
      $result = curl_exec($ch);
      curl_close($ch);

      return $result;
      }

      $xml = "

      $Merchant_Amount
      $Merchant_Order
      $Merchant_Code
      $Merchant_Currency
      $Merchant_TransactionType
      $Merchant_Terminal

      HMAC_SHA256_V1
      $signature
      ";

      $sXML = download_page($url,$xml);

      $oXML = new SimpleXMLElement($sXML);

      me devuelve “error en la firma” SIS0042

      esto es lo que yo le mando -> Gf9hsF3zVb9H55+8hjCe4LhQNoq6Fa+O4ubbNcyRrtU=
      esto es lo que me responde -> Gf9hsF3zVb9H55 8hjCe4LhQNoq6Fa O4ubbNcyRrtU=

      Insisto, si al generar la firma no aparecen símbolos, me funciona correctamente.

      alguna idea?

      Gracias!!

    3. a mi me pasa lo mismo. Al generar la firma aparecen “símbolos” raros y en la respuesta me aparece otra firma. He podido hacer pagos hasta ahora, en todos los que no ha aparecido ningún símbolo, los hace perfectamente.

      mi script es para cobrar los pagos “recurrentes”:

      http://pastie.org/10663831

      me devuelve “error en la firma” SIS0042

      esto es lo que yo le mando -> Gf9hsF3zVb9H55+8hjCe4LhQNoq6Fa+O4ubbNcyRrtU=
      esto es lo que me responde -> Gf9hsF3zVb9H55 8hjCe4LhQNoq6Fa O4ubbNcyRrtU=

      Insisto, si al generar la firma no aparecen símbolos, me funciona correctamente.

      alguna idea?

      Gracias!!

  8. La verdad que yo me encontré con eso al validar la firma en la respuesta. Según investigué tiene que ver con las codificaciones elegidas. A pesar de que hice mil pruebas con distintas codificaciones siempre me aparecía algo mal.
    Una cosa que encontré navegando con gente que también ha sufrido problemas similares es reemplazar los símbolos.

    “Replace(“=”, String.Empty).Replace(‘+’, ‘-‘).Replace(‘/’, ‘_’)” // Al parecer sólo pasa con estos símbolos.

    //Esta sería la comparación de firmas para validar la operación.
    if (claveSha256Encodeada.Replace(“=”, String.Empty).Replace(‘+’, ‘-‘).Replace(‘/’, ‘_’) == ds_Signature.Replace(“=”, String.Empty).Replace(‘+’, ‘-‘).Replace(‘/’, ‘_’))

  9. Hola Compañeros,

    Tengo el entorno montado y todo ok, las cadenas cifradas son las mismas que las del ejemplo de PHP, pero siempre me devuele error “Error en datos enviados. Contacte con su comercio.”, todavia no tengo la clave del comercio, estoy a espensas de recibirla, ¿sabeis si existe alguna clave de prueba para probar mi código?

    Los datos del ejemplo tampoco me funcionan, incluso el ejemplo de PHP no me funciona, el problema que tengo es que no puedo probar si esta bien lo que he hecho.

    Un saludo y gracias de antemano!

    1. Las últimas pruebas que hice en el entorno de pruebas de Redsys, con el FUC (número de comercio) y con la clave de encriptación del ejemplo. Llegaba hasta poder introducir la tarjeta. Si con esto no te funciona, según con que banco tengas contratado el TPV, en la página de administración del mismo podrás consultar la nueva clave de encriptación. Si tampoco lo tienes disponible contacta con soporte del banco que seguramente tengan un sistema de citas para que te ayuden con la implementación.

      1. Hola Compañeros,

        Finalmente conseguí llegar al TPV, el problema era que estaba probando en la URL de pruebas y esa no funciona, no llego ni a meter los datos de la tarjeta… pero el mismo código ejecutado en el real si me funciona, lo digo por si a alguien le ayuda esta información.

        Un saludo

        1. Buenas,

          Acabo de comprobar que cambiando solo la clave de comercio del ejemplo por la que me han facilitado me da error, pero si pruebo con la clave de comercio del ejemplo, llego sin ningún problema, ¿alguien me puede orientar sobre esto?, ¿puede estar mal la clave?, ¿a lo mejor la tienen que dar de alta?

          Un saludo y gracias de antemano!

        1. En el ejemploGeneraPet.php

          $fuc=”999008881″;
          $kc = ‘Mk9m98IfEblmPfrpsawt7BmxObt98Jev’;//Clave recuperada de CANALES
          “http://sis-d.redsys.es/sis/realizarPago”

          Esto sería para el entorno de pruebas, con el código de comercio de las pruebas del y la clave de encriptación del ejemplo también.

      1. Gracias, con esta clave he conseguido simular un pago en el entorno de pruebas, de esta forma ya descarto que sea un problema de la codificación el problema que tenemos en el real.

        Un saludo

  10. Hola,

    Implementando la migración de sha256 me estoy encontrando con varios problemillas:

    En el campo Ds_MerchantParameters el cual según el ejemplo de la documentación es: eyJEU19NRVJDSEFOVF9BTU9VTlQiOiIxNDUiLCJEU19NRVJDSEFOVF9PUkRFUiI6IjE0NDI3NzI2NDUiLCJEU19NRVJDSEFOVF9NRVJDSEFOVENPREUiOiI5OTkwMDg4ODEiLCJEU19NRVJDSEFOVF9DVVJSRU5DWSI6Ijk3OCIsIkRTX01FUkNIQU5UX1RSQU5TQUNUSU9OVFlQRSI6IjAiLCJEU19NRVJDSEFOVF9URVJNSU5BTCI6Ijg3MSIsIkRTX01FUkNIQU5UX01FUkNIQU5UVVJMIjoiaHR0cHM6XC9cL2VqZW1wbG9cL2VqZW1wbG9fVVJMX05vdGlmLnBocCIsIkRTX01FUkNIQU5UX1VSTE9LIjoiaHR0cHM6XC9cL2VqZW1wbG9cL2VqZW1wbG9fVVJMX09LX0tPLnBocCIsIkRTX01FUkNIQU5UX1VSTEtPIjoiaHR0cHM6XC9cL2VqZW1wbG9cL2VqZW1wbG9fVVJMX09LX0tPLnBocCJ9

    al decodificar la cadena veo que han escapado las ‘/’ de las url de DS_MERCHANT_URLKO, DS_MERCHANT_URLOK y DS_MERCHANT_MERCHANTURL -> {“DS_MERCHANT_AMOUNT”:”145″,”DS_MERCHANT_ORDER”:”1442772645″,”DS_MERCHANT_MERCHANTCODE”:”999008881″,”DS_MERCHANT_CURRENCY”:”978″,”DS_MERCHANT_TRANSACTIONTYPE”:”0″,”DS_MERCHANT_TERMINAL”:”871″,”DS_MERCHANT_MERCHANTURL”:”https:\\/\\/ejemplo\\/ejemplo_URL_Notif.php”,”DS_MERCHANT_URLOK”:”https:\\/\\/ejemplo\\/ejemplo_URL_OK_KO.php”,”DS_MERCHANT_URLKO”:”https:\\/\\/ejemplo\\/ejemplo_URL_OK_KO.php”} pero en la documentación no indica que se deba hacer este paso… debo escapar las ‘/’ de los campos de url?

    Otro de los problemas que estoy encontrando es que no me cuadra la firma que estoy generando (MZlhNz6iUbVQ6cZbGIi/jVITH0uu1Go8BSnvKKy68kw=) con la del ejemplo de la documentación (hueCwD/cbvrCi+9IDY86WteMpXulIl0IDNXNlYgcZHM=). Me estoy volviendo un poco loco ya que he copiado las funciones que habéis utilizado en este post y no encuentro donde estoy fallando…

    Al realizar el paso de la encriptación de 3DES estoy obteniendo el siguiente array de bytes(189, 26, 154, 155, 155, 245, 19, 253, 66, 202, 127, 104, 198, 37, 0, 234) que al hacer el hash HMACSHA256 con la cadena que hay en la documentación de los parámetros, en formato base64 del JSON de los diferentes campos que se envian, me da el resultado ya comentado anteriormente ‘MZlhNz6iUbVQ6cZbGIi/jVITH0uu1Go8BSnvKKy68kw=’

    Te suena que es lo que podría estar fallando?

    1. Hola James,

      En el ejemplo, para que cuadre con tu Ds_MerchantParameters si no lo tienes “escapado”, puedes retocarlo con json_encode($reponse, JSON_UNESCAPED_SLASHES); aunque no controlo mucho de php

        1. Ya he conseguido que funcione! resulta que el ejemplo de la documentación está mal por eso nunca me daba la misma firma… el tema de ‘escapar’ la url ni caso, error del ejemplo también.
          La Key de pruebas es la que ha comentado mbuenoferrer: “sq7HjrUOBfKmC576ILgskD5srU870gJ7” y sirve para cualquier terminal
          El único problema que me queda por resolver es el que ya ha comentado Maria sobre la firma que se recibe en la respuesta del tpv con los caracteres ‘-‘ y ‘_’. Habéis encontrado alguna solución que no sea substituir los caracteres ‘/’ y ‘+’ ?

          Gracias por la ayuda

          1. El tema de los caracteres ‘-‘ y ‘_’ no depende de la codificación. He repasado la api de php que tienen colgada y en la respuesta sustituyen los caracteres ‘+’ y ‘/’ por ‘-‘ y ‘_’ en la función que utilizan para generar la firma y compararla con la que se recibe

            function base64_url_encode($input){
            return strtr(base64_encode($input), ‘+/’, ‘-_’);
            }

  11. Hola a todos, nos hemos puesto en contacto con la entidad bancaria de nuestro sistema y nuestro error estaba en el formato de la clave: ‘i’ mayúscula por ‘ele’ minúscula… fijaos en eso, también nos han indicado que ha habido gente con problemas con la ‘o’ (de Oviedo) y el ‘0’ (cero). ¡Vigilad con estos caracteres que nos pueden confundir!

    Entre esta tarde y mañana, pruebo los métodos en .NET y si funciona os confirmo que los métodos aqui publcados van bien.

    Un saludo y ¡suerte!

  12. Para los interesados, si os poneis en contacto con redsys os pueden facilitar librerias para ASP.NET. A mi no me sirven pero veo que varios utilizais este lenguaje.

  13. Por si a alguien le sirve: el error en nuestro caso estaba que habíamos olvidado meter el parametro Ds_Merchant_Terminal al generar el Ds_MerchantParameters. La pasarela no da el error adecuado como podía ser “nº de terminal incorrecto” o ” falta nº de terminal”, sino que daba el error este que se viene repitiendo en este artículo.

    Por otro lado, revisando el codigo de mbuenoferrer (buenísima aportacion) hemos visto que nosotros estabamos codificando en BASE64 con Encoding.UTF8 y en la librería de mbuenoferrer lo hace con Encoding.GetEncoding(1252).
    No sabemos si esto ultimo ha influido o no, o solo por el tema del nº de terminal, pero después de hacer estas dos modificaciones todo ha funcionado correctamente.

  14. Buenas a todos,

    A ver si alguien me puede echar una mano… estamos intentando conectar al entorno real y siempre nos devuelve el mismo error

    SIS0026 => “Error No existe el comercio / terminal enviado”,

    Pero no puede ser, estamos obteniendo el FUC y asignándolo al DS_MERCHANT_MERCHANTCODE y el terminal y asignándolo a DS_MERCHANT_TERMINAL y los datos los cogemos desde la parte de administración del TPV, ¿alguien sabe que nos puede estar pasando?, el problema no es que no funcione nuestro código… no funciona ni el ejemplo…. Está claro que alguno de los dataos no le está gustando y no sabemos cuál es.

    Un saludo y gracias de antemano!

    1. Prueba a enviar el terminal con tres dígitos. Por ejemplo terminal 1 -> 001.
      Comprueba que estas usando los datos del entorno (preproducción / producción) con sus URL correspondientes.
      Ante la duda consulta con Redsys… si te lo cogen 🙂

  15. Bueno,

    Pues la situación ha cambiado desde mi ultimo mensaje, finalmente he conseguido que todo me funcione en el entorno de pruebas, cerrando ciclos de pago, pero en el real me da el error SIS0260, poco se sabe sobre este error porque no esta documentado, ¿alguien sabe que puede estar pasando?

    Un saludo y gracias!

    1. Lo que he visto por ahí es SIS0260:–>Error en datos enviados , pero vamos contacta si puedes con el servicio técnico para que te lo confirmen.

      saludos!

  16. Buenos días

    A ver si me podéis echar una mano porque estamos con el agua al cuello por las fechas. Tenemos nuestro TPV programado en VB.NET 2005 y aunque agregamos sin aparentes problemas las 2 librerías que nos proporcionan (RedsysAPI.DLL y Newtonsoft.json.dll, es imposible hacer luego un Import de sus namespaces en el código .NET

    ¿Alguien que haya conseguido solucionar este problema? Mil gracias de antemano

    Un saludo

    1. Podría deberse a la versión de framework que utilizáis. Por ejemplo, si estáis compilando con una versión 2.0 y las DLL’s son de la 4.0 no vas a poder importarlas.

      Saludos!

  17. Gracias por la respuesta.

    En el equipo de desarrollo (W7 64 bits) tenemos instalada .NET Framework 4.5.2 por lo que entiendo que no deberíamos tener problemas en ese aspecto. ¡¡¡Intentar ponerse en contacto con Redsys es poco menos que una quimera!!!

    Gracias de nuevo

  18. Buenos días

    Pues tal y como dijo Jesús, creemos que es algo así. Aunque en la máquina de desarrollo teníamos instalado Framework 4.5.2, resulta que Visual Studio 2005 solo funciona con Framework 2. Hemos bajado una versión Trial de Visual Studio 2015 y ya podemos importar y utilizar las DLL´s sin problemas

    Me parece muy mal que ahora nos obliguen a comprar una licencia de Visual Studio 2015. Podían al menos versionar las DLL´s o dar cierta retrocompatibilidad

    En fin, por lo menos ahora podremos avanzar, aunque pegándonos con desarrollo y con nuevo entorno.

    Gracias y un saludo

    1. Buenos días Alberto, como alternativa tienes la versión comunity que creo que hasta 5 licencias es gratuita y puedes comercializar los productos desarrollados con esa versión. No obstante consulta las páginas de Microsoft para asegurarte.

      Saludos!

    2. Mi consejo es que copiéis las 3 o 4 funciones de la api en una clase que creéis vosotros en vuestro proyecto. Nosotros lo hicimos así para nuestra aplicación en VB.NET
      Por cierto, estuve probando la función Encrypt3DES que tienen en la api que han colgado de .net y al menos a mi no me funciona añadiendo esto:
      // Block size 64 bit (8 bytes)
      tdes.BlockSize = 64;
      // Key Size 192 bit (24 bytes)
      tdes.KeySize = 192;

      Saludos!

  19. Yo he copiado las funciones de la api que han subido de .net a redsys y al pasarlo a visual basic la función Encrypt3DES me devuelve diferentes valores. Alguien ha podido solucionar esto? O ha hecho que funcione para visual basic? Gracias

    1. Hola Ane,
      Yo estuve probando la función Encrypt3DES que tienen en la api que han colgado de .net y al menos a mi no me funciona añadiendo esto:
      // Block size 64 bit (8 bytes)
      tdes.BlockSize = 64;
      // Key Size 192 bit (24 bytes)
      tdes.KeySize = 192;

  20. Buenas tardes. De nuevo os pido ayuda.

    Ya tenemos funcionando uno de los TPV en .NET. Una vez instalamos Visual Studio 2015 e importamos las librerías, apenas tuvimos que modificar una docena de líneas de código para que arrancara sin problemas. Genial

    El problema lo tenemos ahora con otro TPV que tenemos programado en ASP clásico sobre un IIS6 con .NET Framework 2 y 4 instalado. Hemos registrado las librerías .NET utilizando regasm.exe y aparentemente todo ha ido bien pero somos incapaces de instanciar los objetos para poder usarlos: Utilizamos para ello:

    set r = server.CreateObject(“RedsysAPI.RedsysAPI”) pero siempre nos da el error “can´t create object”

    ¿Alguien nos puede dar alguna otra solución para utilizar la librería .NET desde ASP clásico? ¿Cómo se llama la clase principal de RedsysAPI.dll? (lo digo por si estamos instanciando mal el objeto)

    Mil gracias otra vez. Gracias a vosotros hemos podido avanzar porque si fuera por Redsys seguíamos parados.

    Un saludo

  21. Hola a todos.
    Alguien tiene o ha desarrollado una versión para VBScript? La web que me han propuesto adaptar está hecha en asp clásico y no consigo pasar la versión en PHP a este lenguaje(no lo habia tocado nunca).
    De momento sigo peleandome con ello, si consigo que funcione colgaré aqui el código.
    A ver si alguien está en las mismas que yo, saludos.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *