Como bien sabrás, la PSD2 llegó ya hace casi un año y para quedarse. Hoy en día es totalmente obligatorio que nuestro terminal tenga activo PSD2. ¿Qué es lo que sucede? Que en Redsys no está activo por defecto, cuando crean un nuevo terminal, deben configurar todo, incluido todo lo que representa la PSD2.
La PSD2 debe estar activa para no tener problemas con los cobros, ya que, si no, los poseedores de tarjetas como Visa o MasterCard no podrá finalizar sus pagos, ya que no se les requerirá la autenticación , el challenge no será el indicado o el flujo no sea el correcto.
Esto aun se agrava más cuando utilizamos InSite o pago con 1clic, ya que salen errores en el propio sitio.
¿Cómo podemos saber si tenemos todo activo de forma correcta? Es muy sencillo, aunque deseemos utilizar InSite, deberemos realizar una prueba preliminar con redirección. En la realidad con InSite también se pude ver, pero entran tantos factores en marcha, que mejor utilizar redirección para la comprobación.
Como el problema siempre se producirá con tarjetas v2.1 y v2.2 sujetas a la PSD2, utilizaremos una tarjeta de pruebas de este tipo, así que cuando lleguemos a Redsys, introduciremos la tarjeta 4548816131164386 con fecha de caducidad 12/32 y CVV 123. Una vez introducido, nos llevará al Challenge, cuando lleguemos a la pantalla del challenge, ya veremos si nuestro terminal está bien configurado, o no lo está. Cuidado, con las tarjetas v.1.0.2 no debe salir tampoco esta pantalla de V1, solo que no nos fallará el pago.
Si no está bien configurado, nos saldrá en rojo y parpadeando «Simulador de autenticación V1»
Si nos sale esto, ya podemos contactar con el banco, porque seguro que van a tener muchos clientes para pagar.
En el caso de la tarjeta v2.2 que os he indicado, os debería salir esta pantalla.
Ya puedes ver bien claro que en la autenticación indica la versión de la tarjeta.
Si la tarjeta en un V1.0.2, nos debería salir la autenticación Finanet
Ves que es bastante sencillo comprobar en el terminal del pruebas, y con redirección si está funcionando o no todo el tema de la PSD2.
Pero, ¿Como se si está bien configurado mediante InSite o tokenización? Para esto deberemos tirar de logs.
Lógicamente lo podrás mirar si los logs están activos y si es con mi plugin premium para Redsys, desconozco los otros plugins el nivel de debug que ofrecen.
Fíjate en este log introduciendo una tarjeta v2.2 en un terminal que no está configurado de forma correcta:
12-02-2021 @ 12:29:28 - /****************************/
12-02-2021 @ 12:29:28 - The XML
12-02-2021 @ 12:29:28 - /****************************/
12-02-2021 @ 12:29:28 -
12-02-2021 @ 12:29:28 - <REQUEST><DATOSENTRADA><DS_MERCHANT_AMOUNT>3685</DS_MERCHANT_AMOUNT><DS_MERCHANT_ORDER>100000000058</DS_MERCHANT_ORDER><DS_MERCHANT_MERCHANTCODE>XXXXXXXXXXXXXXX</DS_MERCHANT_MERCHANTCODE><DS_MERCHANT_TERMINAL>1</DS_MERCHANT_TERMINAL><DS_MERCHANT_TRANSACTIONTYPE>0</DS_MERCHANT_TRANSACTIONTYPE><DS_MERCHANT_CURRENCY>978</DS_MERCHANT_CURRENCY><DS_MERCHANT_IDOPER>XXXXXXXXXXXXXXXXXXXXXXX</DS_MERCHANT_IDOPER><DS_MERCHANT_EMV3DS>{"threeDSInfo":"CardData"}</DS_MERCHANT_EMV3DS></DATOSENTRADA><DS_SIGNATUREVERSION>HMAC_SHA256_V1</DS_SIGNATUREVERSION><DS_SIGNATURE>XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX</DS_SIGNATURE></REQUEST>
12-02-2021 @ 12:29:28 - $XML_RETORNO 14 IniciaPeticion: SimpleXMLElement Object
(
[CODIGO] => 0
[INFOTARJETA] => SimpleXMLElement Object
(
[Ds_Order] => 100000000058
[Ds_MerchantCode] => 036763159
[Ds_Terminal] => 1
[Ds_TransactionType] => 0
[Ds_EMV3DS] => {"protocolVersion":"NO_3DS_v2","threeDSInfo":"CardConfiguration"}
[Ds_Card_PSD2] => Y
[Ds_Signature] => E0KE/r+s7nNE9G3uXwBXvd6TTM1NDQoG6RV9EwfINxY=
)
)
12-02-2021 @ 12:29:28 - $respuesta: stdClass Object
(
[protocolVersion] => NO_3DS_v2
[threeDSInfo] => CardConfiguration
)
12-02-2021 @ 12:29:28 - $respuesta->protocolVersion: NO_3DS_v2
En el primer paso, preguntamos a Redsys qué tipo de tarjeta es
<DS_MERCHANT_EMV3DS>{“threeDSInfo”:”CardData”}</DS_MERCHANT_EMV3DS>
Esto lo hacemos ya que debemos saber qué tarjeta es, ya que dependiendo de la versión de la tarjeta, deberemos proceder de una forma u otra.
En este caso podemos ver la respuesta$respuesta->protocolVersion: NO_3DS_v2 donde nos dice que es una NO_3DS_v2. Así que ya comenzamos mal. También hay muchos números que no seamos capaces de finalizar el pago.
Si hacemos lo mismo en un terminal bien configurado, obtendremos lo sigueinte:
12-02-2021 @ 16:46:42 - /****************************/
12-02-2021 @ 16:46:42 - The XML
12-02-2021 @ 16:46:42 - /****************************/
12-02-2021 @ 16:46:42 -
12-02-2021 @ 16:46:42 - <REQUEST><DATOSENTRADA><DS_MERCHANT_AMOUNT>10000</DS_MERCHANT_AMOUNT><DS_MERCHANT_ORDER>100000003156</DS_MERCHANT_ORDER><DS_MERCHANT_MERCHANTCODE>XXXXXXXXXXXX</DS_MERCHANT_MERCHANTCODE><DS_MERCHANT_TERMINAL>1</DS_MERCHANT_TERMINAL><DS_MERCHANT_TRANSACTIONTYPE>0</DS_MERCHANT_TRANSACTIONTYPE><DS_MERCHANT_CURRENCY>978</DS_MERCHANT_CURRENCY><DS_MERCHANT_IDOPER>XXXXXXXXXXXXXXXXXXXXXXX</DS_MERCHANT_IDOPER><DS_MERCHANT_EMV3DS>{"threeDSInfo":"CardData"}</DS_MERCHANT_EMV3DS></DATOSENTRADA><DS_SIGNATUREVERSION>HMAC_SHA256_V1</DS_SIGNATUREVERSION><DS_SIGNATURE>XXXXXXXXXXXXXXXXXXXXXXXXX</DS_SIGNATURE></REQUEST>
12-02-2021 @ 16:46:42 - $XML_RETORNO 14 IniciaPeticion: SimpleXMLElement Object
(
[CODIGO] => 0
[INFOTARJETA] => SimpleXMLElement Object
(
[Ds_Order] => 100000003156
[Ds_MerchantCode] => 349567461
[Ds_Terminal] => 1
[Ds_TransactionType] => 0
[Ds_EMV3DS] => {"protocolVersion":"2.2.0","threeDSServerTransID":"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX","threeDSInfo":"CardConfiguration"}
[Ds_Card_PSD2] => Y
[Ds_Signature] => XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX=
)
)
12-02-2021 @ 16:46:42 - $respuesta: stdClass Object
(
[protocolVersion] => 2.2.0
[threeDSServerTransID] => XXXXXXXXXXXXXXXXXXXXXXXXXXXXX
[threeDSInfo] => CardConfiguration
)
12-02-2021 @ 16:46:42 - $respuesta->protocolVersion: 2.2.0
Ya podemos ver que la respuesta es$respuesta->protocolVersion: 2.2.0 así que se ve muy rápido la diferencia. Y también nos saldrá la pantalla de Challenge v2.2
Pero aun hay mas. Como he dicho, hay varias configuraciones que deben estar activas en el sitio, y si cualquiera de ellas no está activa, puede traer problemas. Así que podría ser que este punto fuera correcto, y devolviera que el protocolo a utilizar es el 2.2, con lo que mi plugin comenzaría a realizar todos los pasos para el protocolo 2.2.
En uno de los pasos, si el terminal no estuviera bien configurado por nuestro banco, nos podríamos encontrar con esta respuesta como esta (recortado):
acctInfo: : {"threeDSInfo":"AuthenticationData","protocolVersion":"2.1.0","browserAcceptHeader":"text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9","browserColorDepth":"24","browserIP":"80.XX.XX.XX",...}}
11-05-2021 @ 13:22:18 - trataPeticion 10: <REQUEST><DATOSENTRADA><DS_MERCHANT_AMOUNT>900</DS_MERCHANT_AMOUNT><DS_MERCHANT_ORDER>100000000136</DS_MERCHANT_ORDER><DS_MERCHANT_MERCHANTCODE>XXXXXXXXXXXX</DS_MERCHANT_MERCHANTCODE><DS_MERCHANT_TERMINAL>1</DS_MERCHANT_TERMINAL><DS_MERCHANT_TRANSACTIONTYPE>0</DS_MERCHANT_TRANSACTIONTYPE><DS_MERCHANT_CURRENCY>978</DS_MERCHANT_CURRENCY><DS_MERCHANT_IDOPER>XXXXXXXXXXXXXXXXXXXXXXXX</DS_MERCHANT_IDOPER><DS_MERCHANT_EXCEP_SCA>LWV</DS_MERCHANT_EXCEP_SCA><DS_MERCHANT_EMV3DS>{"threeDSInfo":"AuthenticationData","protocolVersion":"2.1.0",...}</DS_MERCHANT_EMV3DS></DATOSENTRADA><DS_SIGNATUREVERSION>HMAC_SHA256_V1</DS_SIGNATUREVERSION><DS_SIGNATURE>Ckba7sIir5FtBpCyPRqisFVQaMngw3NPc6MbfBUJjBQ=</DS_SIGNATURE></REQUEST>
11-05-2021 @ 13:22:23 -
11-05-2021 @ 13:22:23 - $XML_RETORNO 13: SimpleXMLElement Object
(
[CODIGO] => 0
[OPERACION] => SimpleXMLElement Object
(
[Ds_Amount] => 900
[Ds_Currency] => 978
[Ds_Order] => 100000000136
[Ds_Signature] => gwkc5JNecdaPp9vuntavjIFg2urNiADau+hB1yv8Gws=
[Ds_MerchantCode] => 124770314
[Ds_Terminal] => 2
[Ds_TransactionType] => 0
[Ds_EMV3DS] => {"threeDSInfo":"ChallengeRequest","protocolVersion":"1.0.2","acsURL":"https://sas.redsys.es/sas/Secure","PAReq":"eJxVUttuwjAM/ZWq7yMXyrjIZOoo0/oQhqDbe5RG0AlSlrRb+fs5UHZ5SOJjW8f2ceChOx6iT+N8Vdt5zAY0jozVdVnZ3Tx+LZ7uJvGDgGLvjMm2RrfOCJDGe7UzUVXOY1d6VXVfyjNlNRsnCUs45YwxOkKLsymllN+zWMA63ZgPAX0tgaUGHMgNIqnTe2UbAUp/POYrMWKUsiGQHsLRuDwT2+VGLtepXG4Wz+mqAHJ1g1VHIxYvcr1Jo7d8mxfpFsjFCbpubePOYswTIDcArTuIfdOc/IyQprVmV+uq9nipw8CaBkhIAPLb1roNlkfCriqFfE/Pslh2MnvtVll+lu+SySz9wjMHEjKgVI0RNzEiNpxxPuM40MUP6hg6EdMBpTjjFcAp1Ej7SAj8dQCq73A5ZzEdT3CSGwLTnWprMAP1/LGhNF7jAP3z2/3iOUisG1Tt76b4EDc1YjwZJ5NkEmS/pATyCvXilA4v7AEACSSk3yjp/wNa//7JN5c+wi4=","MD":"8098f2fb1bf6c7988c026be7944cd61e7231b05f"}
Fíjate en el código anterior. Es un log antiguo y no he encontrado uno de la v2.2, pero es la 2.1 y el problema es el mismo, así que para mostrarlo va bien. Al principio de todo verás esto{“threeDSInfo”:”AuthenticationData”,”protocolVersion”:”2.1.0″... ya que es una tarjeta 2.1 (recuerdo que esto lo conseguimos en el primer paso que he mostrado). Pero fíjate más abajo en el$XML_RETORNO 13, podemos ver que aunque a Redsys le estamos diciendo que es una 2.1, nos indica un challenge para una 1.0.2{“threeDSInfo”:”ChallengeRequest”,”protocolVersion”:”1.0.2“,”acsURL”:… así que no está haciendo las cosas como debe.
Ojo, lo anterior puede suceder por dos motivos diferentes, uno es que hayáis modificado el checkout de alguna forma, y no se estén enviando una serie de datos necesarios ya que no se han podido conseguir, provocando un fallback de la 2.1.0 (o 2.2) a la 1.0.2. Y la segunda razón es un error en la configuración de Redsys.
Y te estarás preguntando, ¿Y cómo solicito esto a Redsys para no tener problemas? Deberás solicitar 3 cosas, dos en la realidad son los mismo, pero hay bancos que lo entienden de forma diferente. Debéis solicitar:
- Activación de PSD2
- Activación de protocolo EMV 3DS.
- Activación de Flujo PSD2.
Si te activan de forma correcta lo anterior, no deberías tener problemas ningún tipo de tarjeta, ni en redirección, ni en InSite, ni con pago con 1clic. Si algo no es correcto, tendrán errores tus clientes.
Personalmente no acabo de entender el motivo de que esto no esté activo por defecto en Redsys y se deba activar de forma. manual, pero es así y hay que estar atento.
Ya sabes que como usuario de mi plugin premium, tienes soporte e incluye que te lo instale, configure y pruebe y en muchísimas ocasiones entro en los hilos de correo con Redsys, ya que es la forma más rápida de solucionarlo. Así que aunque aquí tienes una explicación de todo, abre un ticket y te ayudaré sin problemas.