0

标题可能措辞不佳,请原谅我的经验不足。

我正在使用集成 Amazon Checkout,并且我已经构建了一个回调处理程序,我将其 URL 提供给 Amazon,以便他们知道当他们需要向我发送消息时要点击我网站上的哪个 URL。交易成功完成,但我需要在亚马逊完成付款处理后将用户重定向到我网站上的页面。这通常是通过进入亚马逊卖家中心管道设置并手动输入“退货 URL”来完成的,但我需要重定向到的页面构建了我们内部订单数据的 URL。例子:

http://www.website.com/Cart/OrderComplete/?orderId={ourInternalOrderIdNumber}&emailAddress={customerEmailAddress}

我对如何规避这个问题有一个想法:在亚马逊处理付款并点击我的回调处理程序以发送其最后一批数据后,我根据亚马逊的数据在回调处理程序中创建内部订单。创建内部订单后,我想将 OrderId 和 EmailAddress 作为临时变量存储在应用程序中。这样我就可以将静态 URL 放入管道设置中,例如:

http://www.website.com/Cart/OrderCompleteAmazon/

当这条路线被命中时,里面的代码将检测这些临时变量是否存在,并使用它们来构建正确的订单确认 URL 并将用户重定向到它。

public bool ProcessCallbackRequest(HttpContext context)
{
    if (context.Request.Params.Get(Constants.NOTIFICATION_DATA_KEY) != null)
    {
        _logger.Info("Processing Amazon Payments new order notification");

        var xml = context.Request.Params.Get(Constants.NOTIFICATION_DATA_KEY);
        var xSerializer = new XmlSerializer(typeof(NewOrderNotification));
        var orderRequest = (NewOrderNotification)xSerializer.Deserialize(new StringReader(xml)); //A lot of the customer data from Amazon becomes null after deserializing, but that's a separate issue

        /** Internal order gets made here using the orderRequest and inserted into our DB **/

        /** Here I need to somehow store a couple of pieces of data from our internal order as variables that my route that Amazon will attempt to redirect to needs to access later.**/

        context.Response.StatusCode = 200;
        context.Response.Flush();
    }

    return true;
}

理想情况下,此方法完成后,亚马逊将尝试将用户重定向到“http://www.website.com/cart/ordercompleteamazon/”,这在我的购物车控制器中执行此操作:

public ActionResult OrderCompleteAmazon()
{
    var orderId = //The variable created in my callback handler;
    var emailAddress = //The variable created in my callback handler;

    Redirect("/cart/ordercomplete/" + orderId.ToString() + "/?emailAddress=" + emailAddress);
}

问题是第一个方法发生在回调处理程序中,它不是 View 的控制器的一部分,因此没有 ViewData、TempData 或 Session 的概念。我可以访问 HttpContext,但它是 Amazon 传递给回调处理程序方法的参数。我已经尝试在这个 HttpContext 的请求和响应中设置 Cookie,但这些似乎都没有在我自己的应用程序中设置 Cookie。

有没有办法将数据存储为全局应用程序的一部分,但只在该用户的会话中持续存在,而无法访问当前会话的 ViewData、TempData、Session 或 Cookie?

4

0 回答 0