MVC 5应用程序,.Net框架4.5.2。使用CyberSource提交付款。向CyberSource提交付款发送参数时:“ override_custom_receipt_page”指定了Cybersource应该返回的MVC操作处理付款后。
在生产环境中,付款被发送到https://secureacceptance.cybersource.com。 。 。 。一切正常。
在本地,DEV,QA环境中,付款发送到https://testsecureacceptance.cybersource.com。 。 。 。在这些环境中,CS确实会返回到指定的MVC操作,但是SessionId不同,不是向CS发送请求的会话的SessionId。当然,mvc-action找不到处理CS答复所需的任何Session对象。并且回复处理不正确。
我用Google搜索,发现一些信息可以更改会话ID,尝试了一些建议,但无济于事。Global.asax.cs确实具有Session_Start:
protected void Session_Start()
{
Session["init"] = 0;
}
也在web.config中;
<sessionState mode="InProc" customProvider="DefaultSessionProvider" timeout="20">
<providers>
<add name="DefaultSessionProvider" type="System.Web.Providers.DefaultSessionStateProvider, System.Web.Providers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=<..value here..>" connectionStringName="DefaultConnection" />
</providers>
</sessionState>
DEV,QA,PROD环境在Azure中。
而且,到目前为止,代码可以正常工作5年,然后在Local,DEV和QA中中断。在将DEV和QA环境移至Azure之后,似乎已经崩溃了。但是,本地环境不在Azure中,而是我自己的笔记本电脑。没有本地,DEV和QA的负载平衡器。
[如果有人对可能发生的事情有任何了解,为什么CS无法返回同一会话,这将不胜感激。非常感谢
我们在使用其他付款网关时遇到了类似的问题。在我们的例子中,会话变量在DEV中有效,但在生产环境中无效。
主要是因为会话附加到线程上,并且当付款网关返回网站的回调URL时,它正在创建一个新线程并失去会话变量。
为了解决该问题,我们将参考号(在本例中为发票号)传递给了付款网关。付款成功后,网关会返回参考号以及其他详细信息。我们从参考编号中检索了客户详细信息,然后继续进行下一步。