【发布时间】:2021-09-14 00:38:41
【问题描述】:
我有一个结帐页面,应该将用户重定向到支付网关支付处理页面。它期望发布表单数据(金额、Access_key、Order_id 等;)。
到目前为止我得到的是这个;
public class OrderController : Controller {
private readonly IOrderService _service;
public OrderController(IOrderService service) {
_service = service;
}
[HttpGet]
public async Task<IActionResult> Index () {
// order processing form
// order model binding code not included for brevity.
return View();
}
[HttpPost]
public async Task<IActionResult> ProcessOrder (OrderModel model) {
var orderId = _service.CreateOrder(model);
// order processing code not included for brevity. (basically create new order and reduce stock)
var dataToPost = new PGData() {
Amount = 10,
Currency = USD,
TxId = orderId,
SuccessUrl = "https://test@domain.com/order/success",
FailedUrl = "https://test@domain.com/order/fail"
Access_Key = "xxxxxxxxxxxxxxxxxxxxxxxxxxx",
Field_Hash = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
};
// need to redirect user to ("https://pg@pgdomain.com/paynow") with the post data above
}
}
我发现了一个适用于 .Net Framework 但不适用于 .Net Core 的代码 sn-p:
private class RemotePost
{
private NameValueCollection Content = new NameValueCollection();
public string Url = "";
public string Method = "post";
public string FormName = "form1";
public void Add(string name, string value)
{
Content.Add(name, value);
}
public void Post()
{
HttpContext.Response.Body.WriteAsync(bytes);
System.Web.HttpContext.Current.Response.Clear();
System.Web.HttpContext.Current.Response.Write("<html><head>");
System.Web.HttpContext.Current.Response.Write(string.Format("</head><body onload=\"document.{0}.submit()\">", FormName));
System.Web.HttpContext.Current.Response.Write(string.Format("<form name=\"{0}\" method=\"{1}\" action=\"{2}\" >", FormName, Method, Url));
for (int i = 0; i < Inputs.Keys.Count; i++)
{
System.Web.HttpContext.Current.Response.Write(string.Format("<input name=\"{0}\" type=\"hidden\" value=\"{1}\">", Inputs.Keys[i], Inputs[Inputs.Keys[i]]));
}
System.Web.HttpContext.Current.Response.Write("</form>");
System.Web.HttpContext.Current.Response.Write("</body></html>");
System.Web.HttpContext.Current.Response.End();
}
}
如何以尽可能最安全的方式在 .Net Core (3.1) 中实现这一目标?
【问题讨论】:
标签: asp.net asp.net-core payment-gateway