我已经下载了.Net sagepay集成工具包并将其安装到一个项目中,并且正在尝试实现服务器集成。
直到将用户转移到sagepay为止,所有操作都可以正常进行,您可以成功进行付款,但是当sagepay POST到我的Notification.aspx页面时,我没有收到任何数据。
服务器日志中肯定会显示POST,并且将URL传递回去,以便Sagepay将用户重定向回我的站点,但是我找不到要处理的POST数据并知道我是什么交易处理。
该套件中应处理的代码为:
public partial class Server_Notification : System.Web.UI.Page
{
private const string OK = "OK";
private const string INVALID = "INVALID";
protected void Page_Load(object sender, EventArgs e)
{
IServerNotificationRequest serverNotificationRequest = new SagePayServerIntegration().GetServerNotificationRequest();
try
{
OrderDataService.handleNotification(serverNotificationRequest);
if (Request.QueryString["uid"] != null && !string.IsNullOrEmpty(Request.QueryString["uid"]))
{
new CardDB().Add(Convert.ToInt32(Request.QueryString["uid"]), serverNotificationRequest.Token, serverNotificationRequest.Last4Digits);
}
if (serverNotificationRequest.Status == SagePay.IntegrationKit.ResponseStatus.OK)
{
ShoppingCart.Current().Clean();
}
}
catch (Exception ex)
{
Debug.WriteLine("ERROR: " + System.Reflection.MethodBase.GetCurrentMethod().Name + ": " + ex.Message);
}
Response.Clear();
Response.ContentType = "text/plain";
Response.Write(string.Format("Status={0}\n", serverNotificationRequest.Status == ResponseStatus.ERROR ? INVALID : OK));
Response.Write(string.Format("RedirectURL={0}server/Result.aspx?Status={1}&VendorTxCode={2}", SagePaySettings.SiteFqdn, serverNotificationRequest.Status, serverNotificationRequest.VendorTxCode));
}
}
失败的特定行是IServerNotificationRequest serverNotificationRequest = new SagePayServerIntegration().GetServerNotificationRequest();
这将返回一个没有交易数据的空对象。
我添加了一些日志记录,并尝试手动提取任何POST数据,但没有使用Request.InputStream
,Request.Form.AllKeys
或Request.QueryString
来查找任何内容(除了我通过的客户UID,我自己)。
我曾尝试向sagepay寻求帮助,但他们“ ...无法提供对套件的直接开发支持,因为它们只是示例”。
我没主意了,想知道是否还有其他人可以帮忙阐明一下?
欢呼
西蒙(Simon)
答案 0 :(得分:0)
最后有了一个解决方案,这要感谢https://www.mikesdotnetting.com/article/293/request-form-is-empty-when-posting-to-aspx-page
问题是友好的URL。只需在RouteConfig.cs中注释//settings.AutoRedirectMode = RedirectMode.Permanent;
即可解决问题!