C# 通过MVC3控制器形成post
我必须做一个支付网关集成,当我们做结帐,我们需要在我们这边处理订单,然后我们需要张贴到支付网关的网址。我无法在控制器b/c中使用重定向。在服务器端处理订单后,我需要通过post向paymentgateway提供商发送数据,因此在cshtml中,默认的post将是我们处理订单的操作。在控制器内部,我需要再次向paymentgateway发送post,该post将更改url和信用卡信息在提供商获取信用卡信息后,控制权将再次回到我们的网站。我希望我的问题清楚 保存订单后,我需要将浏览器移动到PAYU页面,这不起作用b/c MerchantReferenceEnumber通过post发送,重定向被拒绝访问C# 通过MVC3控制器形成post,c#,ajax,asp.net-mvc-3,C#,Ajax,Asp.net Mvc 3,我必须做一个支付网关集成,当我们做结帐,我们需要在我们这边处理订单,然后我们需要张贴到支付网关的网址。我无法在控制器b/c中使用重定向。在服务器端处理订单后,我需要通过post向paymentgateway提供商发送数据,因此在cshtml中,默认的post将是我们处理订单的操作。在控制器内部,我需要再次向paymentgateway发送post,该post将更改url和信用卡信息在提供商获取信用卡信息后,控制权将再次回到我们的网站。我希望我的问题清楚 保存订单后,我需要将浏览器移动到PAYU页
private void PostFormToPayU()
{
string url = "https://secure.safeshop.co.za/SafePay/Lite/Index.asp";
var webClient = new WebClient();
try
{
NameValueCollection vals = new NameValueCollection();
vals.Add("SafeKey", "{XXXX-XXX-XXX-XX-XXXXXX}");
vals.Add("MerchantReferenceNumber", "Test2");
vals.Add("TransactionAmount", "599");
vals.Add("CurrencyCode", "ZAR");
vals.Add("ReceiptURL", "http://localhost:47638/Home/About");
vals.Add("FailURL", "http://localhost:47638/Home/New");
vals.Add("TransactionType", "Auth");
byte[] responseArray = webClient.UploadValues(url, vals);
Stream s = new MemoryStream(responseArray);
Redirect("https://secure.safeshop.co.za/SafePay/Lite/Index.asp");
//return new System.Net.Response(responseArray, (int)HttpStatusCode.OK);
Console.WriteLine("stop");
}
catch (WebException e)
{
var response = (HttpWebResponse)e.Response;
//byte[] responseBytes = IOUtil.StreamToBytes(response.GetResponseStream());
//return new Response(responseBytes, (int)response.StatusCode);
Console.WriteLine("stop");
}
}
我认为您只需要设置一个web请求(WebRequest.Create)来创建一个HttpWebRequest。这可以使用您试图发布到的系统的URL创建 您需要将来自web站点的数据打包成预期消息的格式,并将其写入请求流 简言之,这就是它,显然在细节方面还有更多
您也可以考虑将这种处理从控制器中移到某种服务中,因为它是相当无效的。
到目前为止,我认为最好的解决方案是
var context = HttpContext.Current;
context.Response.Clear();
context.Response.Write("<html><head>");
context.Response.Write(string.Format("</head><body onload=\"document.{0}.submit()\">", FormName));
context.Response.Write(string.Format("<form name=\"{0}\" method=\"{1}\" action=\"{2}\" >", FormName, Method, Url));
for (int i = 0; i < inputValues.Keys.Count; i++)
context.Response.Write(string.Format("<input name=\"{0}\" type=\"hidden\" value=\"{1}\">", HttpUtility.HtmlEncode(inputValues.Keys[i]), HttpUtility.HtmlEncode(inputValues[inputValues.Keys[i]])));
context.Response.Write("</form>");
context.Response.Write("</body></html>");
context.Response.End();
var context=HttpContext.Current;
context.Response.Clear();
context.Response.Write(“”);
context.Response.Write(string.Format(“,FormName));
Write(string.Format(“,FormName,Method,Url));
对于(int i=0;i
在数据库中保存订单后,我可以呈现html页面并提交表单onload()。inputValues是我需要传递给支付网关的名称值集合。不幸的是,您的问题不清楚;这里没有一个问题。你的问题是什么?你有什么问题吗?对不起,考虑一个场景MyWebStale:PayMealGuest-MyWeHSt铺,我需要采取信用卡信息,控制流程如我所示。现在在我的网店中,我有一个checkoutcontroller,在我获取信用卡信息之前,有一些订单参数需要保存在我的数据库中,所以表单提交将进入我的控制器操作我将其保存在数据库中我的paymentgateway接受表单post,但要保存数据html表单在保存数据后在网店中发布,我需要将其发布到支付网关这将把用户带到网关网站,在那里他输入信用卡。我需要从控制器内部发送表单帖子不能使用webclient b/c它不会更改urlwebrequest不会更改浏览器。用户需要在支付网关提供商urlYes中输入信用卡,因此一旦您发布了上述内容,您将获得一个返回URL。然后,您可以使用用户重定向(url)将用户浏览器导航到网关url。