2010-10-13 1 views
1

Je travaille avec la passerelle de paiement SagePay.C# WebRequest POST renvoie la page Html - comment l'afficher dans le navigateur

Sur un bouton de commande, cliquez sur J'utilise la méthode ci-dessous pour postData (contient les données de transaction) à SagePay qui renvoie ensuite le résultat sous la forme d'une page html.

public string SendRequest(string url, string postData) 
{ 
    var uri = new Uri(url); 
    var request = WebRequest.Create(uri); 
    var encoding = new UTF8Encoding(); 
    var requestData = encoding.GetBytes(postData); 

    request.ContentType = "application/x-www-form-urlencoded"; 
    request.Method = "POST"; 
    request.Timeout = (300 * 1000); //TODO: Move timeout to config 
    request.ContentLength = requestData.Length; 

    using (var stream = request.GetRequestStream()) 
    { 
     stream.Write(requestData, 0, requestData.Length); 
    } 

    var response = request.GetResponse(); 

    string result; 

    using (var reader = new StreamReader(response.GetResponseStream(), Encoding.ASCII)) 
    { 
     result = reader.ReadToEnd(); 
    } 

    return result; 
} 

Comment afficher ce retour html dans la fenêtre du navigateur des utilisateurs comme ce serait le cas où ils entrent leurs informations de carte de crédit?

+0

Quel type d'intégration SagePay utilisez-vous? Formulaire, serveur ou direct? –

+0

Il serait l'intégration des formes .. le kit d'intégration fourni assez mauvais. – asn1981

+0

Probablement ne devrait pas «directement» afficher les résultats d'une application tierce dans votre site Web (même si elle est approuvée, comme SagePay). Devrait inspecter la réponse HTTP, sortez les informations dont vous avez besoin dans un certain type de "résultat" modèle, puis lier à cela dans votre code HTML. Le point est, prenez juste ce dont vous avez besoin (succès/échec, messages d'information, etc), puis personnalisez votre interface utilisateur basée sur cette information. – RPM1984

Répondre

0

En supposant qu'il s'agit d'une application Forms, pourquoi ne pas utiliser un contrôle System.Windows.Forms.WebBrowser? Il a une propriété chouette, DocumentStream. Le brancher à un flux est aussi simple que:

 var webRequest = WebRequest.Create("http://www.google.com"); 
     var response = webRequest.GetResponse(); 
     webBrowser1.DocumentStream = response.GetResponseStream(); 

réécriture Peut-être le doc avec des URL complètes pourraient aider, bien que je soupçonne une passerelle de paiement pourrait obtenir drôle referer (sic).

 string responseString; 
     var webRequest = WebRequest.Create("http://www.google.com"); 
     using (var response = webRequest.GetResponse()) 
     using (var sr = new StreamReader(response.GetResponseStream())) 
     { 
      responseString = sr.ReadToEnd(); 
     } 
     //consider rewriting some URLs in the response so they are fully qualified 
     //in method below. 
     //responseString=ProcessResponseString(); 
     //squirt response back to user 
+0

Ce n'est pas une application Windows Forms mais un web site web de formulaires – asn1981

0

si vous travaillez dans une application Web (ASP.NET), vous pouvez faire ceci:

Markup:

<div id="HTMLResponse" runat="server"></div> 

ASP.NET:

HTMLResponse.InnerHtml = SendRequest(...); 
Questions connexes