Como você bem sabe, a PSD2 chegou há quase um ano e veio para ficar. Hoje em dia, é totalmente obrigatório que nosso terminal tenha a PSD2 ativada. O que acontece? Que na Redsys não está ativada por padrão, quando criam um novo terminal, devem configurar tudo, incluindo tudo o que representa a PSD2.
A PSD2 deve estar ativa para não ter problemas com os pagamentos, pois, caso contrário, os portadores de cartões como Visa ou MasterCard não poderão finalizar seus pagamentos, já que não será exigida a autenticação, o desafio não será o indicado ou o fluxo não será o correto.
Isso se agrava ainda mais quando utilizamos InSite ou pagamento com 1 clique, pois surgem erros no próprio site.
Como podemos saber se temos tudo ativo de forma correta? É muito simples, embora queiramos utilizar InSite, devemos realizar um teste preliminar com redirecionamento. Na realidade, com InSite também se pode ver, mas entram tantos fatores em jogo, que é melhor usar redirecionamento para a verificação.
Como o problema sempre ocorrerá com cartões v2.1 e v2.2 sujeitos à PSD2, utilizaremos um cartão de testes desse tipo, assim que quando chegarmos à Redsys, introduziremos o cartão 4548816131164386 com data de validade 12/32 e CVV 123. Uma vez introduzido, nos levará ao Challenge, quando chegarmos à tela do challenge, já veremos se nosso terminal está bem configurado ou não. Cuidado, com os cartões v.1.0.2 não deve aparecer também esta tela de V1, apenas que não falhará o pagamento.
Se não estiver bem configurado, aparecerá em vermelho e piscando «Simulador de autenticação V1»

Se aparecer isso, já podemos contatar o banco, porque com certeza eles terão muitos clientes para pagar.
No caso do cartão v2.2 que indiquei, deveria aparecer esta tela.

Já pode ver claramente que na autenticação indica a versão do cartão.
Se o cartão for um V1.0.2, deve aparecer a autenticação Finanet

Você vê que é bastante simples verificar no terminal de testes, e com redirecionamento se está funcionando ou não todo o tema da PSD2.
Mas, como sei se está bem configurado através do InSite ou tokenização? Para isso, devemos analisar os logs.
Logicamente, você poderá verificar se os logs estão ativos e se é com meu plugin premium para Redsys, desconheço o nível de debug que outros plugins oferecem.
Observe este log introduzindo um cartão v2.2 em um terminal que não está configurado corretamente:
12-02-2021 @ 12:29:28 - /****************************
12-02-2021 @ 12:29:28 - O 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 passo, perguntamos à Redsys que tipo de cartão é
<DS_MERCHANT_EMV3DS>{“threeDSInfo”:”CardData”}</DS_MERCHANT_EMV3DS>
Fazemos isso porque precisamos saber que cartão é, pois dependendo da versão do cartão, devemos proceder de uma forma ou outra.
Neste caso, podemos ver a resposta $respuesta->protocolVersion: NO_3DS_v2 onde nos diz que é uma NO_3DS_v2. Assim, já começamos mal. Também há muitos números que não conseguimos finalizar o pagamento.
Se fizermos o mesmo em um terminal bem configurado, obteremos o seguinte:
12-02-2021 @ 16:46:42 - /****************************
12-02-2021 @ 16:46:42 - O 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.0Já podemos ver que a resposta é $respuesta->protocolVersion: 2.2.0 assim, a diferença é muito rápida de ver. E também nos aparecerá a tela de Challenge v2.2

Mas ainda há mais. Como eu disse, há várias configurações que devem estar ativas no site, e se qualquer uma delas não estiver ativa, pode trazer problemas. Assim, poderia ser que este ponto estivesse correto e retornasse que o protocolo a ser utilizado é o 2.2, com o que meu plugin começaria a realizar todos os passos para o protocolo 2.2.
Em um dos passos, se o terminal não estiver bem configurado pelo nosso banco, poderíamos nos deparar com esta resposta como esta (cortada):
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"}Observe o código anterior. É um log antigo e não encontrei um da v2.2, mas é a 2.1 e o problema é o mesmo, assim, para mostrar vai bem. No início de tudo você verá isso {“threeDSInfo”:”AuthenticationData”,”protocolVersion”:”2.1.0″... já que é um cartão 2.1 (lembro que isso conseguimos no primeiro passo que mostrei). Mas observe mais abaixo no $XML_RETORNO 13, podemos ver que embora estejamos dizendo à Redsys que é uma 2.1, nos indica um challenge para uma 1.0.2 {“threeDSInfo”:”ChallengeRequest”,”protocolVersion”:”1.0.2“,”acsURL”:… assim, não está fazendo as coisas como deve.
Atente-se, o anterior pode acontecer por dois motivos diferentes, um é que você tenha modificado o checkout de alguma forma, e não estejam sendo enviados uma série de dados necessários, pois não puderam ser obtidos, provocando um fallback da 2.1.0 (ou 2.2) para a 1.0.2. E a segunda razão é um erro na configuração da Redsys.
E você deve estar se perguntando, e como solicito isso à Redsys para não ter problemas? Você deve solicitar 3 coisas, duas na realidade são as mesmas, mas há bancos que entendem de forma diferente. Você deve solicitar:
- Ativação da PSD2
- Ativação do protocolo EMV 3DS.
- Ativação do Fluxo PSD2.
Se ativarem corretamente o anterior, você não deve ter problemas com nenhum tipo de cartão, nem em redirecionamento, nem em InSite, nem com pagamento com 1 clique. Se algo não estiver correto, seus clientes terão erros.
Pessoalmente, não consigo entender o motivo de que isso não esteja ativo por padrão na Redsys e deva ser ativado manualmente, mas é assim e é preciso estar atento.
Você sabe que como usuário do meu plugin premium, tem suporte e inclui que eu instale, configure e teste, e em muitas ocasiões entro nos e-mails com a Redsys, pois é a forma mais rápida de resolver. Assim, embora aqui tenha uma explicação de tudo, abra um ticket e eu ajudarei sem problemas.







