Implementando operações de transferência de cartão para cartão de gateway P2P

Para o meu projeto, eu precisava perceber a capacidade de transferir de cartão para cartão. Para conexão oficial com a interface de qualquer banco, é necessário concluir um contrato e atender a várias condições. Por isso, foi decidido fazer um gateway para a página pública do banco. Para esses propósitos, foram selecionados dois bancos, o Tinkoff e o BIN Bank, que oferecem a oportunidade de transferir para "seus" cartões sem comissão. Você pode encontrar mais informações sobre tarifas e restrições sobre transferências nas páginas relevantes dos bancos. Este artigo descreve brevemente a operação de um gateway que implementa a funcionalidade de aceitar pagamentos para um cartão.

É necessário implementar uma transferência de qualquer cartão para um cartão pré-selecionado, com suporte para o procedimento de autorização do 3DSecure. O 3DSecure é um protocolo de autorização de usuário seguro para operações do CNP (sem a presença de um cartão). Você pode ler mais em sites especializados. O diagrama abaixo mostra um diagrama simplificado de como isso funciona do ponto de vista do usuário.

imagem

A imagem mostra um mecanismo simplificado para autorizar uma transação, o que acontece "oculto" quando você realiza uma operação de pagamento ou transferência de cartão para cartão e insere um código SMS para confirmá-lo.

Vamos considerar passo a passo:

  1. Digite os detalhes e o valor do cartão e envie para o site do banco.
  2. O banco utiliza um serviço especializado (Merchant Plug-In MPI), que gera uma solicitação PaReq especial, que é XML com assinatura digital, contendo parâmetros de transação, além de dados para onde essa solicitação deve ser enviada (Access Control Server ACS) e para onde enviá-la. resposta de autorização (PaRes).
  3. O banco retorna ao usuário uma página contendo informações do MPI e redireciona automaticamente o navegador para a página ACS do banco que emitiu o cartão do usuário. É exibida uma página para o usuário inserir um código SMS e um SMS é enviado para o número de telefone registrado no banco emissor.
  4. Depois de inserir o código SMS, o servidor ACS gera uma página com uma resposta de autorização (PaRes), redirecionando o usuário para a página MPI para concluir a operação ou se recusar a executá-la.

Para uma compreensão mais profunda do processo, leia os documentos Visa ou Mastercard relevantes, este nível é suficiente para resolver este problema.

Para garantir a operação perfeita do gateway, de modo que os ouvidos do site através dos quais a tradução não se destaque, é necessário integrar o processo de redirecionamento do navegador entre o MPI e o ACS. Para fazer isso, substitua o endereço (TermUrl) recebido do MPI. Este é o endereço para o qual o PaRes será redirecionado depois que o usuário concluir a autorização. Como TermUrl, o endereço do gateway é inserido na solicitação. Isso permitirá que o gateway receba uma resposta (RaRes) para enviá-lo ao servidor MPI e, após o processamento da resposta MPI, direcione o usuário para a página de conclusão da transação com ou sem êxito.

O gateway funciona entre o navegador do usuário e a página do banco, implementa funções de entrada / saída que emulam a página do banco, complementa e modifica dados e processa respostas e erros dos serviços bancários.

O protocolo de interação com cada um dos bancos foi esclarecido manualmente pela interação de engenharia posterior entre o navegador e o site do banco; em geral, a lógica é a mesma, a diferença de variáveis ​​e os métodos de transferência. Em geral, isso é um gargalo, e a funcionalidade do software depende da imutabilidade da API. Assim que o banco alterar a operação do serviço, a lógica do gateway precisará ser alterada.

Vamos considerar com mais detalhes a lógica do trabalho.

Para garantir operações no gateway, uma página de pagamento é implementada, cuja chamada é realizada no endereço:

http://< >/pay/page?payid=123456&sum=100&text=Test 

O URL contém as seguintes variáveis:

payid - ID da transação necessário para identificar os resultados da solicitação de pagamento após a conclusão da transação;
soma - o valor da transação;
texto - campo de informação "Finalidade do pagamento".



Após o preenchimento dos dados do cartão, concordando com os termos de execução, é feita uma solicitação de comissão para a operação. O tamanho da comissão e o banco (um dos dois Tinkoff e BIN) pelos quais a transferência será feita depende do cartão especificado nas configurações do gateway como o receptor da transferência e da disponibilidade do serviço bancário. Um mecanismo simples para roteamento e tratamento de erros é implementado no gateway: O desligamento é sempre selecionado, se a página do banco não estiver disponível, a página Banco do BIN é selecionada.

Após clicar no botão de transferência, o sistema é redirecionado para a página do banco emissor que emitiu o cartão (ACS), a partir do qual a operação de débito será realizada. O gateway solicitará os parâmetros PaReq do MPI, substituirá TermUrl e enviará os dados ao usuário, depois de lembrar os parâmetros de transação no cache (Redis).

Após a conclusão da autorização, o PaRes irá para o gateway e, com base nos dados do cache, os encaminhará para o MPI correspondente, processará a resposta e redirecionará o usuário para uma das páginas (ERROR_PAGE, SUCCESS_PAGE) especificadas nas configurações do gateway.

O URL da página para concluir com êxito a operação contém a variável payid, que transmite os resultados da operação na forma de um JWT com assinatura digital.

Exemplo de JWT:

 eyJhbGciOiJIUzUxMiJ9.eyJqdGkiOiI2Njk2NzFlYi1mYmZlLTVlMTMtYTdkZi05NDEwZjg1N2U5ODkiLCJpYXQiOjE1NzE5MDg5MjgsInN1YiI6ImZpeGVkIiwiaXNzIjoicnUucGhvbmU0cGF5IiwicGF5X2lkIjoiMTIzNDUiLCJzdW0iOiIxMDAuMCIsInRyYW5zYWN0aW9uX2lkIjoiODY4MTE5ODYzIn0.c-IK3FowoR_tVe3-cpT7-rmA4EQhYy8rZkWrWASHZlc0ZzzpQont5XriCSzuDaY7jf7iIC8ZAxknAMwmTNmAHg 



Ao verificar o conteúdo do JWT, você pode obter informações confiáveis ​​sobre o sucesso da operação, o token JWT executa uma função semelhante ao PaReq e fornece a capacidade de integração com um sistema externo.

Esta solução é um protótipo de um gateway de pagamento, com o qual você pode implementar a aquisição pela Internet (aceitar pagamentos com cartão) em seu site ou página de rede social. Você pode parametrizar uma página de pagamento ou escrever a sua própria, modificar o software de forma criativa, o principal é transferir a quantidade e o ID da operação para a entrada e verificar na saída que nada foi alterado de forma criativa por outra pessoa. Fontes e exemplos de trabalho estão disponíveis no github .

Há também um gateway para reabastecer sua carteira VK.pay, que também pode ser usada como gateway de pagamento. Em geral, implementa os mesmos princípios, o Selenium foi usado para implementar parte da funcionalidade, com a ajuda da qual a autorização no site e a autorização para acessar a carteira são implementadas.

IMPORTANTE! Quaisquer transações na Internet são potencialmente perigosas, seus dados podem ser roubados, você precisa tomar precauções ao realizar transações na Internet.

IMPORTANTE! A responsabilidade criminal é prevista pelo roubo de fundos dos cartões bancários de terceiros (artigos 159.3, 159.6 do Código Penal da Federação Russa) .

Source: https://habr.com/ru/post/pt474298/


All Articles