ssheduardo / sermepa

Clase para utilizar la pasarela de pagos redsys, sermepa.
MIT License
194 stars 59 forks source link

SIS0042 :-( #46

Closed vsalvans closed 7 years ago

vsalvans commented 7 years ago

Hola Eduardo, tengo un problema para integrar el módulo. He probado varias configuraciones y no salgo del error SIS0042 (la firma enviada no es correcta, a pesar que en pantalla sale importe 0 no asignado)

No le configuro ni el Tradename ni el Titular porque no dispongo de esta información, no se si son necesarios para la firma.

El código de comercio sale correcto, el importe 0 sin embargo. Estoy intentando hacerlo en test y con la clave "qwertyasdf0123456789". Es con el Banco de Sabadell.

Lo he probado en local y en un servidor de pruebas por si hubiera algún problema con el "localhost".

Algún consejo o pista? Hay que activar el entorno de pruebas de Redsys del cliente o siempre esta disponible.

Muchas gracias!!

ssheduardo commented 7 years ago

Hola, Lo más simple es probar el ejemplo que viene en la documentación, si esta funciona correctamente puedes pasar directamente a PRO. Yo acabo de realizar una prueba en mi local/server de la prueba que te comento y funciona correctamente. Prueba con un importe superior a 0€

vsalvans commented 7 years ago

Gracias por tu rápida respuesta! No sabia que la configuración del ejemplo se podía usar. La verdad es que ha sido un alivio poder usar tu ejemplo e ir descartando parámetros erróneos.

Los problemas eran varios.

El principal es que el número de orden o pedido debe ser de mínimo 4 caracteres, cosa que se mencionas en tu código pero no lo había visto : -P. Estaba pasando un entero menor de 1000 (de un reciente autonúmerico)

El segundo es que estaba usando una clave de la versión antigua de ejemplo que proporciona Redsys, el famoso "qwertyasdf01233456789"

Para el primer problema, no sé si se podría solucionar de esta manera:

/**
     * Set Order number - [The firsts 4 digits must be numeric.] (required)
     * @param $order
     * @throws Exception
     */
    public function setOrder($order)
    {
        $order = trim($order);

        if(strlen($order) < 5 &&  is_numeric(substr($order,0,4))) {
            $this->_setParameters['DS_MERCHANT_ORDER'] = $order;
            return $this;
        }

        throw new Exception('Order id must be a 4 digit string at least');
    }