Mise en œuvre d'une opération de transfert de carte à carte de passerelle P2P

Pour mon projet, j'avais besoin de réaliser la capacité de transfert de carte en carte. Pour une connexion officielle à l'interface de n'importe quelle banque, il est nécessaire de conclure un accord et de remplir un certain nombre de conditions. Par conséquent, il a été décidé de créer une passerelle vers la page publique de la banque. À ces fins, deux banques Tinkoff et BIN Bank ont ​​été sélectionnées pour offrir la possibilité de transférer sur «leurs» cartes sans commission. Vous pouvez trouver plus d'informations sur les tarifs et les restrictions sur les virements sur les pages pertinentes des banques. Cet article décrit brièvement le fonctionnement d'une passerelle qui implémente la fonctionnalité d'acceptation de paiements sur une carte.

Il est nécessaire de mettre en œuvre un transfert de n'importe quelle carte vers une carte présélectionnée, avec prise en charge de la procédure d'autorisation 3DSecure. 3DSecure est un protocole d'autorisation utilisateur sécurisé pour les opérations CNP (sans la présence d'une carte). Vous pouvez en savoir plus sur les sites spécialisés, le schéma ci-dessous montre un schéma simplifié de la façon dont cela fonctionne du point de vue de l'utilisateur.

image

L'image montre un mécanisme simplifié pour autoriser une transaction, ce qui se passe «sous le capot» lorsque vous effectuez un paiement ou un transfert de carte à carte, et entrez un code SMS pour le confirmer.

Considérons étape par étape:

  1. Saisissez les détails et le montant de la carte et envoyez-la sur le site Web de la banque.
  2. La banque utilise un service spécialisé (Merchant Plug-In MPI), qui génère une demande PaReq spéciale, qui est XML avec signature numérique, contenant les paramètres de transaction, ainsi que les données où cette demande doit être envoyée (Access Control Server ACS), et où l'envoyer réponse d'autorisation (PaRes).
  3. La banque renvoie à l'utilisateur une page contenant des informations de MPI et redirige automatiquement le navigateur vers la page ACS de la banque qui a émis la carte de l'utilisateur. L'utilisateur affiche une page pour entrer un code SMS et un SMS est envoyé au numéro de téléphone enregistré dans la banque émettrice.
  4. Après avoir entré le code SMS, le serveur ACS génère une page avec une réponse d'autorisation (PaRes), redirigeant l'utilisateur vers la page MPI pour terminer l'opération ou refuser de l'exécuter.

Pour une compréhension plus approfondie du processus, lisez les documents Visa ou Mastercard pertinents, ce niveau est suffisant pour résoudre ce problème.

Pour assurer un fonctionnement transparent de la passerelle afin que les oreilles du site Web à travers lesquelles la traduction ne dépasse pas, il est nécessaire d'intégrer dans le processus de redirection du navigateur entre MPI et ACS. Pour ce faire, remplacez l'adresse (TermUrl) reçue de MPI. Il s'agit de l'adresse vers laquelle PaRes sera redirigé une fois que l'utilisateur aura terminé l'autorisation, comme TermUrl, l'adresse de la passerelle est entrée dans la demande. Cela permettra à la passerelle de recevoir une réponse (RaRes) pour l'envoyer au serveur MPI et après avoir traité la réponse MPI, diriger l'utilisateur vers la page de réussite ou d'échec de la transaction.

La passerelle fonctionne entre le navigateur de l'utilisateur et la page bancaire, implémente des fonctions d'entrée / sortie émulant la page bancaire, complète et modifie les données et traite les réponses et les erreurs des services bancaires.

Le protocole d'interaction avec chacune des banques a été clarifié manuellement par une interaction d'ingénierie inverse entre le navigateur et le site Web de la banque, en général, la logique est la même, la différence de variables et les méthodes de transfert. En général, il s'agit d'un goulot d'étranglement, et la fonctionnalité du logiciel dépend de l'immuabilité de l'API, dès que la banque modifie le fonctionnement du service, la logique de la passerelle devra également être modifiée.

Examinons plus en détail la logique du travail.

Pour assurer le fonctionnement de la passerelle, une page de paiement est mise en place, dont l'appel est effectué à l'adresse:

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

L'URL contient les variables suivantes:

payid - ID de transaction requis pour identifier les résultats de la demande de paiement une fois la transaction terminée;
somme - le montant de la transaction;
texte - champ d'information «But du paiement».



Après avoir renseigné les données de la carte et accepté les conditions d'exécution, une demande de commission pour l'opération est effectuée. La taille de la commission et de la banque (l'un des deux Tinkoff et BIN) à travers laquelle le transfert sera effectué dépend de la carte spécifiée dans les paramètres de la passerelle comme récepteur de transfert et de la disponibilité du service bancaire. Un mécanisme simple de routage et de gestion des erreurs est implémenté dans la passerelle: Tinkoff est toujours sélectionné, si la page de banque n'est pas disponible, alors la page de banque BIN est sélectionnée.

Après avoir cliqué sur le bouton de transfert, le système est redirigé vers la page de la banque émettrice qui a émis la carte (ACS), à partir de laquelle l'opération de débit sera effectuée. La passerelle demandera les paramètres PaReq à MPI, remplacera TermUrl et enverra les données à l'utilisateur, après avoir mémorisé les paramètres de transaction dans le cache (Redis).

Une fois l'autorisation terminée, PaRes se rendra sur la passerelle et, en fonction des données du cache, il les transmettra au MPI correspondant, traitera la réponse et redirigera l'utilisateur vers l'une des pages (ERROR_PAGE, SUCCESS_PAGE) spécifiées dans les paramètres de la passerelle.

L'URL de la page pour terminer l'opération avec succès contient la variable payid, qui transmet les résultats de l'opération sous la forme d'un JWT avec signature numérique.

Exemple JWT:

 eyJhbGciOiJIUzUxMiJ9.eyJqdGkiOiI2Njk2NzFlYi1mYmZlLTVlMTMtYTdkZi05NDEwZjg1N2U5ODkiLCJpYXQiOjE1NzE5MDg5MjgsInN1YiI6ImZpeGVkIiwiaXNzIjoicnUucGhvbmU0cGF5IiwicGF5X2lkIjoiMTIzNDUiLCJzdW0iOiIxMDAuMCIsInRyYW5zYWN0aW9uX2lkIjoiODY4MTE5ODYzIn0.c-IK3FowoR_tVe3-cpT7-rmA4EQhYy8rZkWrWASHZlc0ZzzpQont5XriCSzuDaY7jf7iIC8ZAxknAMwmTNmAHg 



En vérifiant le contenu du JWT, vous pouvez obtenir des informations fiables sur le succès de l'opération, le jeton JWT remplit une fonction similaire à PaReq et offre la possibilité de s'intégrer à un système externe.

Cette solution est un prototype de passerelle de paiement, avec laquelle vous pouvez implémenter l'acquisition Internet (accepter les paiements par carte) sur votre site Web ou page de réseau social. Vous pouvez paramétrer votre page de paiement ou écrire la vôtre, modifier le logiciel de manière créative, l'essentiel est de transférer le montant et l'identifiant de l'opération à l'entrée et de vérifier à la sortie que rien n'a été modifié de manière créative par quelqu'un d'autre. Des sources et des exemples de travail sont disponibles sur github .

Il existe également une passerelle pour reconstituer votre portefeuille VK.pay, qui peut également être utilisée comme passerelle de paiement. En général, il met en œuvre les mêmes principes, Selenium a été utilisé pour implémenter une partie de la fonctionnalité, à l'aide de laquelle l'autorisation sur le site et l'autorisation d'accès au portefeuille sont mises en œuvre.

IMPORTANT! Toutes les transactions Internet sont potentiellement dangereuses, vos données peuvent être volées, vous devez prendre des précautions lors de l'exécution de transactions Internet.

IMPORTANT! Une responsabilité pénale est prévue en cas de vol de fonds sur les cartes bancaires d'un autre (articles 159.3, 159.6 du Code pénal de la Fédération de Russie) .

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


All Articles