当我们结账时,我必须与支付网关集成,我们需要处理订单,然后我们需要发送到支付网关网址。我不能在控制器b / c中使用重定向需要在我们的服务器端处理订单之后通过post发送数据到paymentgateway提供商所以在cshtml中默认的帖子将是我们处理的操作Order之后我需要做内部控制器再次到支付网关,将更改网址和信用卡信息,并在提供商提供信用卡信息后控制再次返回我们的网站。我希望我的问题清楚
保存订单后我需要将浏览器移动到PAYU页面这不起作用b / c MerchantReferenceNumber是通过邮件发送的,重定向是拒绝访问。
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");
}
}
答案 0 :(得分:0)
我认为您只需要设置Web请求(WebRequest.Create)来创建HttpWebRequest。这可以使用您要发布到的系统的URL创建。
您需要将来自您网站的数据包装成预期消息的格式,并将其写入请求流。
简而言之,显然在细节方面还有更多。
此外,您可能需要考虑将此类处理从控制器移到某种服务中,因为它是相当明确的。
答案 1 :(得分:0)
直到现在我认为最好的解决方案是
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();
我在数据库中保存订单后,我可以呈现html页面并提交表单onload()。 inputValues是我需要传递给支付网关的名称值集合。