2011-06-26 1 views
1

Je construis un processus de paiement simple en utilisant une passerelle de paiement externe.
1) L'utilisateur choisit un produit, clique Acheter,
2) Le serveur fait une demande POST pour charger la page de paiement du site tiers.Post-form avec les données "secrètes" du serveur et ouvrir le résultat dans le navigateur de l'utilisateur

La passerelle de paiement n'a aucune idée de ce que sont les "produits" et attend une demande avec une valeur de prix réelle. Cela me frotte dans le mauvais sens, car cela signifierait que quelqu'un capable de voir la source verra les champs et les valeurs de la requête. Certains seraient tentés de bousiller les valeurs et le système de commande. Non pas que ce soit un gros problème, la confirmation de commande sera quand même authentifiée avec un jeton, mais cela n'empêchera pas les smart guys de gâcher les valeurs et de faire un paiement.

Est-il possible de demander la page de passerelle en affichant les données du serveur et d'ouvrir le résultat dans le navigateur de l'utilisateur? Si elles doivent passer par les navigateurs de l'utilisateur, quelle serait une façon plus obscure de le faire? Jouer avec les en-têtes HTTP dans la réponse? Poster avec un appel AJAX?

Merci. PS: Il ne s'agit pas de créer un message de serveur tacite (c'est-à-dire avec curl), la page résultante doit s'ouvrir dans le navigateur de l'utilisateur.


PPS: Eh bien, après avoir joué un peu plus avec l'API de passerelle de paiement (Payline.com pour être précis) j'ai découvert qu'ils fournissent un mécanisme pour cela, où le poste est fait par le serveur, un le jeton est retourné et l'utilisateur va à la page avec tout rempli. Le navigateur n'envoie pas les données, ce qui est exactement ce que je voulais. C'est la solution à mon problème mais pas la réponse à cette question. Je ne publierai pas cela comme une réponse et je pense toujours que ce serait bien d'avoir une réponse.

+0

Pouvez-vous nous dire qui est le fournisseur de passerelle de paiement? –

+0

C'est Payline.com mais je ne pense pas que ce soit spécifique à eux. –

Répondre

2

Ceci est possible, mais il dépend si fortement de l'API du fournisseur de la passerelle de paiement qu'il n'est pas possible de vous fournir une réponse adaptée. Cela étant dit, il y a plusieurs façons de le faire.

Les en-têtes HTTP ne sont PAS le moyen de le faire. Aucun n'est un appel AJAX. Les deux sont éminemment faciles à manipuler. La meilleure chose à faire est simplement de vérifier la commande avec le montant reçu, et inverser la charge si elles ne correspondent pas à plus d'une petite marge d'erreur (+/- 1%), pour tenir compte des arrondis et autres joyeusetés. Si quelqu'un dérange les résultats, leur argent revient moins quelques jours (comme le retour d'argent est souvent plus lent que de le charger.)

La deuxième façon de le faire serait d'utiliser curl pour rendre le (comme vous le dites) tacite serveur, puis renvoyer les résultats à l'utilisateur, agissant ainsi en tant que proxy entre la passerelle de paiement et vos clients. Ce n'est probablement pas une aussi bonne solution que la première.

Fondamentalement, la solution à cela est une bonne tenue de livres. Tout ce qui passe par le navigateur de l'utilisateur va être falsifié à un moment ou un autre, peu importe combien vous essayez de sécuriser vos communications. Assurez-vous simplement que votre système est assez intelligent pour le sentir quand des affaires amusantes se poursuivent.

+0

Une comptabilité rigoureuse est ce que j'essaye de faire valoir avec ceci. Invalider les commandes du côté serveur sera définitivement fait, donc ce n'est pas mon problème ici. Les en-têtes HTTP peuvent être faciles à manipuler si elles ne sont vraiment pas bonnes et bien connues, mais pas pour les utilisateurs de ce site. Ils sont plus SuperUser.com que StackOverflow.com :-) Alors, comment fait-on avec les en-têtes? –

1

Ce que vous pouvez faire est de proxy la demande POST via votre propre serveur.Afficher la page de paiement avec le prix et tous les champs à l'utilisateur mais au lieu de Submit action allant directement à la passerelle de paiement, vous pouvez intercepter l'action de soumission sur votre serveur et ensuite faire la demande au côté serveur de passerelle de paiement après l'avoir vérifié.

+0

Ce n'est pas quelque chose que je veux faire, car l'utilisateur doit remplir les informations de carte de crédit sur le site de paiement. –

Questions connexes