如何使用 asp.net mvc 呈现从支付网关返回的 HTML 响应
How to render HTML response that returned from a Payment gateway using asp.net mvc
我正在尝试与名为 PayFort 的支付网关集成,一切顺利,我使用的方法 returns HTML 代码,这将是用户应该看到的页面继续付款过程..
我需要的是如何将 HTML 响应呈现到浏览器中,我调查了一些解决方案,所有这些都使用 StreamReader 和 Writer 我通过调用支付方法 URL 进行了尝试直接通过浏览器运行并且运行良好,但是当我尝试从 JS/Ajax 调用它时它没有执行任何操作,它没有启动 HTML 响应。
下面是我用来与支付网关集成的代码:
public string TryPayment(int ID)
{
var BaseURL = string.Format("{0}://{1}{2}", Request.Url.Scheme, Request.Url.Authority, Url.Content("~"));
setConfig();
api_url = Command.GetAPIURL(Command.IntegrationTypes.Redirect, true);
package = Umbraco.Content(ID);
int price = Convert.ToInt32(package.Value("price"));
VALUE = price;
MyReference = ("MyReference" + (DateTime.Now).ToString()).Replace(" ", "").Replace(":", "").Replace("/", "");
createSignature(MyReference, VALUE);
var newdata = "command=PURCHASE" +
"&access_code=My Code" +
"&merchant_identifier=My Identifier" +
"&merchant_reference=" + MyReference +
"&customer_email=Name@email.com" +
"&amount=" + VALUE +
"¤cy=JOD&language=ar" +
"&return_url=" + BaseURL + "umbraco/surface/FortResponse/working" +
"&signature=" + signature;
byte[] dataBytes = Encoding.UTF8.GetBytes(newdata);
HttpWebRequest request = (HttpWebRequest)WebRequest.Create("https://sbcheckout.payfort.com/FortAPI/paymentPage");
request.AutomaticDecompression = DecompressionMethods.GZip | DecompressionMethods.Deflate;
request.ContentLength = dataBytes.Length;
request.ContentType = "application/x-www-form-urlencoded";
request.Method = "POST";
using (Stream requestBody = request.GetRequestStream())
{
requestBody.Write(dataBytes, 0, dataBytes.Length);
}
using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
using (Stream stream = response.GetResponseStream())
using (StreamReader reader = new StreamReader(stream, Encoding.GetEncoding(response.CharacterSet)))
{
return reader.ReadToEnd();
}
}
当我通过浏览器调用它时有效,但当我通过 JS/Ajax 调用时无效。
如有任何见解,我们将不胜感激。
尝试以下方法
1) 使用 javaScript
success: function(data) {
window.location.href="nextstep.aspx";
}
或
2) Insert/update 响应到数据库。将用户从支付页面重定向到 VerifyPayment 页面并在此处获取数据库值。
注意:部署您的应用程序并检查,有时 Ajax 调用在本地不起作用。
经过调查我发现我们可以像这个例子一样从前端包含一个表单:Pay-fort SDK example,
并且无需从后端呈现 HTML 响应。
我正在尝试与名为 PayFort 的支付网关集成,一切顺利,我使用的方法 returns HTML 代码,这将是用户应该看到的页面继续付款过程..
我需要的是如何将 HTML 响应呈现到浏览器中,我调查了一些解决方案,所有这些都使用 StreamReader 和 Writer 我通过调用支付方法 URL 进行了尝试直接通过浏览器运行并且运行良好,但是当我尝试从 JS/Ajax 调用它时它没有执行任何操作,它没有启动 HTML 响应。
下面是我用来与支付网关集成的代码:
public string TryPayment(int ID)
{
var BaseURL = string.Format("{0}://{1}{2}", Request.Url.Scheme, Request.Url.Authority, Url.Content("~"));
setConfig();
api_url = Command.GetAPIURL(Command.IntegrationTypes.Redirect, true);
package = Umbraco.Content(ID);
int price = Convert.ToInt32(package.Value("price"));
VALUE = price;
MyReference = ("MyReference" + (DateTime.Now).ToString()).Replace(" ", "").Replace(":", "").Replace("/", "");
createSignature(MyReference, VALUE);
var newdata = "command=PURCHASE" +
"&access_code=My Code" +
"&merchant_identifier=My Identifier" +
"&merchant_reference=" + MyReference +
"&customer_email=Name@email.com" +
"&amount=" + VALUE +
"¤cy=JOD&language=ar" +
"&return_url=" + BaseURL + "umbraco/surface/FortResponse/working" +
"&signature=" + signature;
byte[] dataBytes = Encoding.UTF8.GetBytes(newdata);
HttpWebRequest request = (HttpWebRequest)WebRequest.Create("https://sbcheckout.payfort.com/FortAPI/paymentPage");
request.AutomaticDecompression = DecompressionMethods.GZip | DecompressionMethods.Deflate;
request.ContentLength = dataBytes.Length;
request.ContentType = "application/x-www-form-urlencoded";
request.Method = "POST";
using (Stream requestBody = request.GetRequestStream())
{
requestBody.Write(dataBytes, 0, dataBytes.Length);
}
using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
using (Stream stream = response.GetResponseStream())
using (StreamReader reader = new StreamReader(stream, Encoding.GetEncoding(response.CharacterSet)))
{
return reader.ReadToEnd();
}
}
当我通过浏览器调用它时有效,但当我通过 JS/Ajax 调用时无效。
如有任何见解,我们将不胜感激。
尝试以下方法
1) 使用 javaScript
success: function(data) {
window.location.href="nextstep.aspx";
}
或
2) Insert/update 响应到数据库。将用户从支付页面重定向到 VerifyPayment 页面并在此处获取数据库值。
注意:部署您的应用程序并检查,有时 Ajax 调用在本地不起作用。
经过调查我发现我们可以像这个例子一样从前端包含一个表单:Pay-fort SDK example,
并且无需从后端呈现 HTML 响应。