我正在使用First Data E4网关托管付款页面。
在付款页面 - 收据页面设置下我选择了:“使用HTTP POST方法(AUTO-POST)自动链接到包含结果参数的收据页面”。我现在不使用Relay Response。
环境:C#,Sql Server,ASP.NET 4.0,Sql Server 2008 R2。
我已成功将付款交易表单值发送到E4服务器,并且大部分时间我都会将收据交易值返回到收据页面。
但是,有时表单值不可用。这是一个问题,因为没有表格值我无法使用信用卡交易的结果更新我们的数据库,然后我无法显示我们的确认页面,因为我们不知道交易是否成功。< / p>
我已经说过First Data E4技术支持他们告诉我:1)他们从来没有听说过客户没有获得交易表格价值,2)他们只是发布数据但不检查客户是否服务器实际上收到了数据,3)他们没有错误日志,所以他们无法告诉我我们的服务器是否有问题。
我启用了失败的请求跟踪,但没有看到任何失败。
我试图在页面生命周期的不同点捕获表单值:
1)Page_Load 2)Page_Init 3)Page_PreInit 4)渲染
我有时会得到表单值,有时候我不会在哪个阶段尝试获取值。我的猜测是,我们的服务器响应收据页面的请求很慢,E4服务器可能放弃了,因此我们没有得到表单值。
我刚刚将Request.ContentLength的捕获添加到了我们的事务日志中。我想知道在我们没有得到任何形式值的情况下,也许我们会得到ContentLength的计数,也许这将给我们一个关于问题的线索。我还没有收到足够的交易,看看我们在哪里获得了非零的ContentLength而没有表格值。
First Data技术建议切换到中继响应以确保我们最终获得交易信息,以便我们可以更新我们的数据库。即使我们切换到中继响应,仍然会出现一些情况,我们无法从E4服务器获取第一次POST尝试的数据,这意味着我们无法将用户重定向到我们的自定义订阅确认页面。
这是我们的收据页面的代码。我只是获取表单值,记录它们,解析值,并调用Process()来更新我们的数据库。
public partial class GC2_CreditCardFirstDataE4Receipt : System.Web.UI.Page
{
protected void ReceiveFormData()
{
GC2_BLL_CreditCardFirstDataE4Response ResponseObj = new GC2_BLL_CreditCardFirstDataE4Response(Page);
bool Status;
this.EnableViewState = false;
Status = ResponseObj.Log(Page.Request.Form, Page.Request.ContentLength);
if (!Status)
{
Response.Redirect("GC2_HomePage3.aspx");
}
Status = ResponseObj.Parse(Page.Request.Form);
if (!Status)
{
Response.Redirect("GC2_HomePage3.aspx");
}
ResponseObj.Process(Page.Request.Form, Request.ContentLength);
}
protected void Page_Load(object sender, EventArgs e)
{
if (IsPostBack)
{
}
}
protected override void Render(HtmlTextWriter WriterObj)
{
ReceiveFormData();
base.Render(WriterObj);
}
}
提前感谢您的帮助!
版