2010-10-06 8 views
0

J'ai un bouton ASP, quand il est cliqué, il appelle une fonction qui ajoute des informations de commande dans ma base de données. La prochaine étape du processus de commande est de transférer l'utilisateur vers la passerelle de paiement avec ce formulaire:ASP.net C# poster formulaire sur les utilisateurs

<form action="https://select-test.wp3.rbsworldpay.com/wcc/purchase" name="BuyForm" method="POST"> 
<input type="hidden" name="instId" value="151711"> 
<input type="hidden" name="cartId" value="abc123"> 
<input type="hidden" name="currency" value="GBP"> 
<input type="hidden" name="amount" value="1221"> 
<input type="hidden" name="desc" value=""> 
<input type="hidden" name="testMode" value="100"> 
<input type="submit" value="To Payment!"> 
</form> 

Cependant je voudrais vraiment pour que l'utilisateur:

bouton de commande Pressé -> fonction de commande appelé -> utilisateur automatiquement transmis à page de commande

Comme supposé:

bouton de commande Pressé -> Fonction de commande appelé -> L'utilisateur va à une autre page -> utilisateur clique manuellement bouton pour aller à paiement WorldPay Page

est-il de toute façon en C# pour rediriger l'utilisateur vers la commander la page, et soumettre des données de formulaire avec eux?

+0

Découvrez http://stackoverflow.com/questions/26857/how-do-you-programmatically-fill-in-a-form-and-post-a-web-page – InSane

+0

@Insane, c'est différent parce qu'il renvoie le résultat et ne déplace pas l'utilisateur. Ce serait (je pense) en violation des règles de la passerelle de paiement. –

Répondre

2

Vous pouvez rediriger du gestionnaire soumettre de la première forme de commande:

Response.Redirect("https://select-test.wp3.rbsworldpay.com/wcc/purchase?instId=151711&cartId=abc123&currency=GBP&amount=1221&desc=&testMode=100"); 

Notez que vos paramètres de formulaire sont actuellement ouverts à la falsification, que vous soumettez via GET ou POST. Je suis sûr que WorldPay a des mesures de sécurité que vous pouvez utiliser pour prévenir et/ou détecter la falsification. Vous devriez les utiliser!

Modifier ...

WorldPay vous permettent de submit a hash along with your payment parameters pour aider à prévenir la falsification. Cela devrait arrêter toute tentative de sabotage amateur; si elle peut arrêter un attaquant déterminé est une autre question.

Comme vous l'avez mentionné dans les commentaires, vous devez absolument enregistrer les paramètres de votre côté avant de les soumettre, puis les référencer par rapport aux données de rappel pour vous assurer que rien n'a été touché.

+0

@Tim: Déjà modifié avant l'apparition de votre commentaire. Le problème de sécurité existe indépendamment du fait que vous utilisiez GET ou POST: L'utilisation de GET signifie que n'importe qui peut altérer les valeurs; utiliser post signifie que presque tout le monde peut altérer les valeurs. – LukeH

+0

Cela devra faire je suppose! La passerelle effectue un rappel pour vérification, je vais donc signaler tout ordre falsifié. J'espérais bloquer toutes les attaques de chaîne de requête amateur si. –

+1

@Tim: Si vous redirigez vers un site externe, vous devez envoyer ces données d'une manière ou d'une autre. Je doute vraiment que WorldPay puisse voir les données de la session sur le serveur de Tom. – LukeH

1

Vous pouvez utiliser Response.Redirect("OtherPage.aspx"); à la fin de votre gestionnaire d'événements. En utilisant cette méthode, vous pouvez ajouter des éléments à la chaîne de requête (par exemple, l'ID de commande) ... Response.Redirect("OtherPage.aspx?OrderID=abcdef");.

Vous pouvez également effectuer le traitement dans la page de commande et l'afficher comme PostbackUrl, de sorte que la première page est renvoyée directement à la page de commande.

+0

Vous pouvez transmettre un jeton quelconque sur la chaîne de requête, mais l'ID réel peut vous laisser ouvert pour la falsification d'URL. Dans les deux cas, une telle méthode devrait être validée sur le serveur en fonction de quelque chose qui est plus difficile à manipuler (comme une variable Session correspondante). –

0

façons multiples:

1) Mettez l'ordre dans l'état de session et porter avec l'utilisateur, la récupération automatiquement quand ils sont redirigés vers la page finale.

2) Créez un formulaire qui soumet ses données avec la nouvelle page comme cible (plutôt que de revenir à lui-même comme comportement par défaut dans ASP.Net).

3) Générez un formulaire avec des champs cachés et affichez-le sur la page. Dans les situations # 2 et # 3, vous pouvez choisir d'utiliser le script côté client pour envoyer automatiquement le formulaire.

Questions connexes