I'm using ASP.NET 4.0, C#, Web Forms, and Master Pages.
I'm trying to implement Authorize.Net's Silent Post feature and have created a couple test pages
I have a test page (Silent_Test) with button that posts to another page (Silent). The problem seems to be that the Silent page only captures the information through POST if the Silent page loads (i.e., click button on Silent_Test user redirected to Silent and page loads). It makes sense since the information is in the Page Load event, but I understand that Authorize.Net's Silent Post will not load the page so how can I capture their POST information if the page is never loaded? Is my understanding off or am I going about this the wrong way?...Can anyone provide tips or sample code for catching/processing the information Authorize.Net sends in the Silent Post?
Silent_Test.ASPX
<%@ Page Title="Silent Test" Language="C#" MasterPageFile="~/MasterPages
/Site.master" AutoEventWireup="true"
CodeFile="Silent_Test.aspx.cs" Inherits="_Silent_Test" %>
<asp:Content ID="Content1" ContentPlaceHolderID="HeadContent" runat="Server">
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="Server">
<form action="https://www.test.com/silent.aspx" method="post">
<input type="hidden" name="x_response_code" value="9"/>
<input type="hidden" name="x_cust_id" value="99999999-9999-9999-9999-999999999999"/>
<input type="submit"/>
</form>
</asp:Content>
Silent_Test.ASPX.CS - Code not modified -
Silent.ASPX
<%@ Page Title="Silent" Language="C#" MasterPageFile="~/MasterPages/Site.master"
AutoEventWireup="true" CodeFile="Silent.aspx.cs" Inherits="_Silent" %>
<asp:Content ID="Content1" ContentPlaceHolderID="HeadContent" runat="Server"></asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="Server">
<div>
<%-- There is no need to put anything in the .ASPX file since Authorize.net's server does not care about the response from the POST call.--%>
<p>You have reached this page in error. Please verify you have the correct web page address.</p>
</div>
</asp:Content>
Silent.ASPX.CS
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Configuration;
using System.Data.SqlClient;
public partial class _Silent : BasePage
{
protected void Page_Load(object sender, EventArgs e)
{
string connectionString = ConfigurationManager.ConnectionStrings["ASPNETDBConnectionString1"].ConnectionString;
string insertSql = "INSERT INTO Silent(x_cust_id, x_response_code)
VALUES(@cust_id,@response_code)";
using (SqlConnection myConnection = new SqlConnection(connectionString))
{
myConnection.Open();
SqlCommand myCommand = new SqlCommand(insertSql, myConnection);
myCommand.Parameters.AddWithValue("@cust_id", this.Request.Form["x_cust_id"]);
myCommand.Parameters.AddWithValue("@response_code",
this.Request.Form["x_response_code"]);
myCommand.ExecuteNonQuery();
myConnection.Close();
}
}
}