使用 post 数据重定向 - 没有查询字符串
Redirect with post data - WITHOUT query string
我正在尝试向 WorldPay 的支付网关提交数据。我目前正在通过构建查询字符串(付款 ID、金额、客户详细信息等)并将它们连接到 WorldPay 的基础 url 来(成功地)这样做:
https://secure-test.worldpay.com/wcc/purchase?instId=12345&testMode=100&amount=999
...并执行标准 Response.Redirect([above_url]).
这按预期工作,但我担心在查询字符串中公开此信息可能会鼓励人们攻击它(例如,将 "amount" 键更改为“1”!) .
WorldPay 的示例仅提供基本的 HTML 表单,但由于数据是使用此方法发布的,因此上述问题绝不是问题。不幸的是,在将用户重定向到 WorldPay 以完成付款之前,我需要做一些预处理(订单状态更新等),所以我想知道这是否可以通过编程方式完成?
我怀疑我正在尝试做与 this 问题完全相同的事情:以编程方式将用户重定向到 WorldPay 的站点,传递所有必要的付款详细信息 - 不公开查询字符串值。
这可能吗?
WorldPay 支持为我提供了解决方案。通过挖掘他们的来源,我可以看到他们正在做 [我怀疑] husnain_sys 建议的事情:
var formBuilder = new StringBuilder();
formBuilder.AppendLine("<html><head>");
formBuilder.AppendLineFormat("</head><body onload=\"document.{0}.submit()\">", formName);
formBuilder.AppendLineFormat("<form name=\"{0}\" method=\"{1}\" action=\"{2}\" >", formName, Method.ToString(), Url);
for (int i = 0; i < _inputValues.Keys.Count; i++) {
formBuilder.AppendLineFormat("<input name=\"{0}\" type=\"hidden\" value=\"{1}\">",
HttpUtility.HtmlEncode(_inputValues.Keys[i]), HttpUtility.HtmlEncode(_inputValues[_inputValues.Keys[i]]));
}
formBuilder.AppendLine("</form>");
formBuilder.AppendLine("</body></html>");
_httpContext.Response.Clear();
_httpContext.Response.Write(formBuilder.ToString());
_httpContext.Response.End();
这对我来说仍然像是一个 hack(当然不必通过 JS 完成重定向?),但是啊,很好 - 它有效!谢谢你们。希望这对其他人有帮助。
我正在尝试向 WorldPay 的支付网关提交数据。我目前正在通过构建查询字符串(付款 ID、金额、客户详细信息等)并将它们连接到 WorldPay 的基础 url 来(成功地)这样做:
https://secure-test.worldpay.com/wcc/purchase?instId=12345&testMode=100&amount=999
...并执行标准 Response.Redirect([above_url]).
这按预期工作,但我担心在查询字符串中公开此信息可能会鼓励人们攻击它(例如,将 "amount" 键更改为“1”!) .
WorldPay 的示例仅提供基本的 HTML 表单,但由于数据是使用此方法发布的,因此上述问题绝不是问题。不幸的是,在将用户重定向到 WorldPay 以完成付款之前,我需要做一些预处理(订单状态更新等),所以我想知道这是否可以通过编程方式完成?
我怀疑我正在尝试做与 this 问题完全相同的事情:以编程方式将用户重定向到 WorldPay 的站点,传递所有必要的付款详细信息 - 不公开查询字符串值。
这可能吗?
WorldPay 支持为我提供了解决方案。通过挖掘他们的来源,我可以看到他们正在做 [我怀疑] husnain_sys 建议的事情:
var formBuilder = new StringBuilder();
formBuilder.AppendLine("<html><head>");
formBuilder.AppendLineFormat("</head><body onload=\"document.{0}.submit()\">", formName);
formBuilder.AppendLineFormat("<form name=\"{0}\" method=\"{1}\" action=\"{2}\" >", formName, Method.ToString(), Url);
for (int i = 0; i < _inputValues.Keys.Count; i++) {
formBuilder.AppendLineFormat("<input name=\"{0}\" type=\"hidden\" value=\"{1}\">",
HttpUtility.HtmlEncode(_inputValues.Keys[i]), HttpUtility.HtmlEncode(_inputValues[_inputValues.Keys[i]]));
}
formBuilder.AppendLine("</form>");
formBuilder.AppendLine("</body></html>");
_httpContext.Response.Clear();
_httpContext.Response.Write(formBuilder.ToString());
_httpContext.Response.End();
这对我来说仍然像是一个 hack(当然不必通过 JS 完成重定向?),但是啊,很好 - 它有效!谢谢你们。希望这对其他人有帮助。