0

.NET 框架 4.5.2 上的 ASP.NET MVC 5 应用程序。

使用 Cyber​​Source 提交付款。

向 Cyber​​Source 提交付款发送参数时:“override_custom_receipt_page”指定 Cyber​​source 在处理付款后应返回的 MVC Action。

在生产环境中,付款被发送到

 https://secureacceptance.cybersource.com . . . .

一切正常。

在本地、DEV、QA 环境中,付款被发送到

 https://testsecureacceptance.cybersource.com . . . .

在这些环境中,CS 确实返回到指定的 MVC 操作,但 SessionId 不同,而不是向 CS 发送请求的会话的 SessionId。

当然,MVC 操作找不到任何 Session 对象,需要处理来自 CS 的回复。

并且回复处理不正确。

我用谷歌搜索,找到了一些重新更改会话 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 中,它是我自己的笔记本电脑。

Local、DEV、QA 没有负载均衡器。

另外,我刚刚找到关于“Chrome 已更改 cookie 自 2019 年 12 月以来的工作方式”的信息,关于 sameSite 属性。但是,再次 - 为什么相同的代码在没有相同站点的情况下在生产中工作并且在其他环境中不起作用?

如果有人对可能发生的事情有任何想法,为什么 CS 不能回到同一个会话,将不胜感激。

非常感谢

4

2 回答 2

0

你用什么浏览器在本地测试?如果是 Chrome,请尝试使用其他浏览器,看看问题是否已解决。这意味着问题出在 cookie 上,而不是会话上。

于 2021-03-09T18:29:05.287 回答
0

我们在使用不同的支付网关时遇到了类似的问题。在我们的例子中,会话变量在 DEV 中有效,但在生产环境中无效。

这主要是因为会话附加到线程,当支付网关返回到网站的回调 url 时,它正在创建一个新线程并丢失会话变量。

为了解决这个问题,我们向支付网关传递了一个参考号(在我们的例子中是发票号)。付款成功后,网关返回参考号以及其他详细信息。我们从参考号中检索了客户详细信息并继续执行后续步骤。

于 2020-05-08T01:26:50.980 回答