。NET Framework 4.5.2上的ASP.NET MVC 5应用程序。
使用CyberSource提交付款。
[将付款发送参数提交给CyberSource时:“ override_custom_receipt_page”,指定Cybersource处理付款后应返回的MVC操作。
在生产环境中,付款发送到
https://secureacceptance.cybersource.com . . . .
一切正常。
在本地,DEV,QA环境中,付款发送至
https://testsecureacceptance.cybersource.com . . . .
并且在这些环境中,CS确实会返回到指定的MVC操作,但是SessionId是不同的,而不是向CS发送请求的会话的SessionId。
当然,MVC操作找不到处理来自CS的回复所需的任何Session对象。
并且回复处理不正确。
我用谷歌搜索,发现一些信息可以更改会话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中,它是我自己的笔记本电脑。
另外,我刚刚在“ Chrome浏览器自2019年12月起更改了Cookie的工作方式”上找到了相关信息,关于sameSite属性。但是,再次-为什么相同的代码在没有sameSite的情况下也可以在生产环境中工作
如果有人对可能发生的事情有任何想法,为什么CS无法回到同一会话,将不胜感激。
非常感谢
我们在使用其他付款网关时遇到了类似的问题。在我们的例子中,会话变量在DEV中有效,但在生产环境中无效。
主要是因为会话附加到线程上,并且当付款网关返回网站的回调URL时,它正在创建一个新线程并失去会话变量。
为了解决该问题,我们将参考号(在本例中为发票号)传递给了付款网关。付款成功后,网关会返回参考号以及其他详细信息。我们从参考编号中检索了客户详细信息,然后继续进行下一步。