Como ben saberás, a PSD2 chegou xa fai case un ano e para quedarse. Hoxe en día é totalmente obrigatorio que o noso terminal teña activo PSD2. ¿Que é o que sucede? Que en Redsys non está activo por defecto, cando crean un novo terminal, deben configurar todo, incluído todo o que representa a PSD2.
A PSD2 debe estar activa para non ter problemas cos cobros, xa que, se non, os poseedores de tarxetas como Visa ou MasterCard non poderán finalizar os seus pagos, xa que non se lles requirirá a autenticación, o challenge non será o indicado ou o fluxo non sexa o correcto.
Iso aínda se agrava máis cando utilizamos InSite ou pago con 1clic, xa que saen erros no propio sitio.
¿Como podemos saber se temos todo activo de forma correcta? É moi sinxelo, aínda que desexemos utilizar InSite, deberemos realizar unha proba preliminar con redirección. Na realidade con InSite tamén se pode ver, pero entran tantos factores en marcha, que é mellor utilizar redirección para a comprobación.
Como o problema sempre se producirá con tarxetas v2.1 e v2.2 suxeitas á PSD2, utilizaremos unha tarxeta de probas deste tipo, así que cando cheguemos a Redsys, introduciremos a tarxeta 4548816131164386 con data de caducidade 12/32 e CVV 123. Unha vez introducido, nos levará ao Challenge, cando cheguemos á pantalla do challenge, xa veremos se o noso terminal está ben configurado, ou non o está. Coidado, coas tarxetas v.1.0.2 non debe saír tampouco esta pantalla de V1, só que non nos fallará o pago.
Se non está ben configurado, sairá en vermello e parpadeando «Simulador de autenticación V1»

Se nos sae isto, xa podemos contactar co banco, porque seguro que van a ter moitos clientes para pagar.
No caso da tarxeta v2.2 que vos indiquei, debería saír esta pantalla.

Xa podes ver ben claro que na autenticación indica a versión da tarxeta.
Se a tarxeta é un V1.0.2, debería saírnos a autenticación Finanet

Ves que é bastante sinxelo comprobar no terminal de probas, e con redirección se está funcionando ou non todo o tema da PSD2.
Pero, ¿Como sei se está ben configurado mediante InSite ou tokenización? Para isto deberemos tirar de logs.
Loxicamente poderás miralo se os logs están activos e se é co meu plugin premium para Redsys, desconozco os outros plugins o nivel de debug que ofrecen.
Fíxate neste log introducindo unha tarxeta v2.2 nun terminal que non 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_v2No primeiro paso, preguntamos a Redsys que tipo de tarxeta é
<DS_MERCHANT_EMV3DS>{"threeDSInfo":"CardData"}</DS_MERCHANT_EMV3DS>
Isto faino xa que debemos saber que tarxeta é, xa que dependendo da versión da tarxeta, deberemos proceder dunha forma ou outra.
No caso podemos ver a resposta $respuesta->protocolVersion: NO_3DS_v2 onde nos di que é unha NO_3DS_v2. Así que xa comezamos mal. Tamén hai moitos números que non seamos capaces de finalizar o pago.
Se facemos o mesmo nun terminal ben configurado, obteremos o seguinte:
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.0Xa podemos ver que a resposta é $respuesta->protocolVersion: 2.2.0 así que se ve moi rápido a diferencia. E tamén nos sairá a pantalla de Challenge v2.2

Pero aínda hai máis. Como dixen, hai varias configuracións que deben estar activas no sitio, e se calquera delas non está activa, pode traer problemas. Así que podería ser que este punto fose correcto, e devolvese que o protocolo a utilizar é o 2.2, co que o meu plugin comezaría a realizar todos os pasos para o protocolo 2.2.
Nun dos pasos, se o terminal non estivese ben configurado polo noso banco, poderiamos atoparnos con esta resposta como esta (recortada):
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íxate no código anterior. É un log antigo e non atopei un da v2.2, pero é a 2.1 e o problema é o mesmo, así que para mostralo vai ben. No principio de todo verás isto {"threeDSInfo":"AuthenticationData","protocolVersion":"2.1.0"... xa que é unha tarxeta 2.1 (recórdoche que isto o conseguimos no primeiro paso que mostrei). Pero fíxate máis abaixo no $XML_RETORNO 13, podemos ver que a pesar de que a Redsys lle estamos dicindo que é unha 2.1, indícanos un challenge para unha 1.0.2 {"threeDSInfo":"ChallengeRequest","protocolVersion":"1.0.2","acsURL":… así que non está facendo as cousas como debe.
Ojo, o anterior pode suceder por dous motivos diferentes, un é que modificáchedes o checkout de algunha forma, e non se están enviando unha serie de datos necesarios xa que non se puideron conseguir, provocando un fallback da 2.1.0 (ou 2.2) á 1.0.2. E a segunda razón é un erro na configuración de Redsys.
E estarás preguntando, ¿E como solicito isto a Redsys para non ter problemas? Deberás solicitar 3 cousas, dúas na realidade son as mesmas, pero hai bancos que o entenden de forma diferente. Debedes solicitar:
- Activación de PSD2
- Activación de protocolo EMV 3DS.
- Activación de Flujo PSD2.
Se che activan de forma correcta o anterior, non deberías ter problemas ningún tipo de tarxeta, nin en redirección, nin en InSite, nin con pago con 1clic. Se algo non é correcto, terán erros os teus clientes.
Personalmente non acabo de entender o motivo de que isto non estea activo por defecto en Redsys e deba activarse de forma manual, pero é así e hai que estar atento.
Xa sabes que como usuario do meu plugin premium, tes soporte e inclúe que che o instale, configure e probe e en moitas ocasións entro nos fíos de correo con Redsys, xa que é a forma máis rápida de solucionarlo. Así que aínda que aquí tes unha explicación de todo, abre un ticket e axudaréiche sen problemas.







