protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                // Verify user has completed the checkout process.
                if ((string)Session["userCheckoutCompleted"] != "true")
                {
                    Session["userCheckoutCompleted"] = string.Empty;
                    Response.Redirect("CheckoutError.aspx?" + "Desc=Unvalidated%20Checkout.");
                }

                NVPAPICaller payPalCaller = new NVPAPICaller();

                string   retMsg             = "";
                string   token              = "";
                string   finalPaymentAmount = "";
                string   PayerID            = "";
                NVPCodec decoder            = new NVPCodec();

                token              = Session["token"].ToString();
                PayerID            = Session["payerId"].ToString();
                finalPaymentAmount = Session["payment_amt"].ToString();

                bool ret = payPalCaller.DoCheckoutPayment(finalPaymentAmount, token, PayerID, ref decoder, ref retMsg);
                if (ret)
                {
                    // Retrieve PayPal confirmation value.
                    string PaymentConfirmation = decoder["PAYMENTINFO_0_TRANSACTIONID"].ToString();

                    //
                    //TransactionId.Text = PaymentConfirmation;


                    ProductContext _db = new ProductContext();
                    // Get the current order id.
                    int currentOrderId = -1;
                    if (Session["currentOrderId"] != string.Empty)
                    {
                        currentOrderId = Convert.ToInt32(Session["currentOrderID"]);
                    }
                    Order myCurrentOrder;
                    if (currentOrderId >= 0)
                    {
                        // Get the order based on order id.
                        myCurrentOrder = _db.Orders.Single(o => o.OrderId == currentOrderId);
                        // Update the order to reflect payment has been completed.
                        myCurrentOrder.PaymentTransactionId = PaymentConfirmation;
                        // Save to DB.
                        _db.SaveChanges();
                    }

                    // Clear shopping cart.
                    using (ACMEINC.Logic.ShoppingCartActions usersShoppingCart =
                               new ACMEINC.Logic.ShoppingCartActions())
                    {
                        usersShoppingCart.EmptyCart();
                    }

                    // Clear order id.
                    Session["currentOrderId"] = string.Empty;
                }
                else
                {
                    Response.Redirect("CheckoutError.aspx?" + retMsg);
                }
            }
        }
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                NVPAPICaller payPalCaller = new NVPAPICaller();
                string       retMsg       = "";
                string       token        = "";
                string       PayerID      = "";
                NVPCodec     decoder      = new NVPCodec();
                if (token != "")
                {
                    token = Session["token"].ToString();
                    bool ret = payPalCaller.GetCheckoutDetails(token, ref PayerID, ref decoder, ref retMsg);
                    if (ret)
                    {
                        Session["payerId"] = PayerID;
                        var myOrder = new Order();
                        myOrder.OrderDate  = Convert.ToDateTime(decoder["TIMESTAMP"].ToString());
                        myOrder.Username   = User.Identity.Name;
                        myOrder.FirstName  = decoder["FIRSTNAME"].ToString();
                        myOrder.LastName   = decoder["LASTNAME"].ToString();
                        myOrder.Address    = decoder["SHIPTOSTREET"].ToString();
                        myOrder.City       = decoder["SHIPTOCITY"].ToString();
                        myOrder.State      = decoder["SHIPTOSTATE"].ToString();
                        myOrder.PostalCode = decoder["SHIPTOZIP"].ToString();
                        myOrder.Country    = decoder["SHIPTOCOUNTRYCODE"].ToString();
                        myOrder.Email      = decoder["EMAIL"].ToString();
                        myOrder.Total      = Convert.ToDecimal(decoder["AMT"].ToString());
                        // Verify total payment amount as set on CheckoutStart.aspx.
                        try
                        {
                            decimal paymentAmountOnCheckout = Convert.ToDecimal(Session["payment_amt"].ToString());
                            decimal paymentAmoutFromPayPal  = Convert.ToDecimal(decoder["AMT"].ToString());
                            if (paymentAmountOnCheckout != paymentAmoutFromPayPal)
                            {
                                Response.Redirect("CheckoutError.aspx?" + "Desc=Amount%20total%20mismatch.");
                            }
                        }
                        catch (Exception)
                        {
                            Response.Redirect("CheckoutError.aspx?" + "Desc=Amount%20total%20mismatch.");
                        }

                        // Get DB context.
                        ProductContext _db = new ProductContext();
                        // Add order to DB.
                        _db.Orders.Add(myOrder);
                        _db.SaveChanges();
                        // Get the shopping cart items and process them.
                        using (ACMEINC.Logic.ShoppingCartActions usersShoppingCart = new
                                                                                     ACMEINC.Logic.ShoppingCartActions())
                        {
                            List <CartItem> myOrderList = usersShoppingCart.GetCartItems();
                            // Add OrderDetail information to the DB for each product purchased.
                            for (int i = 0; i < myOrderList.Count; i++)
                            {
                                // Create a new OrderDetail object.
                                var myOrderDetail = new OrderDetail();
                                myOrderDetail.OrderId   = myOrder.OrderId;
                                myOrderDetail.Username  = User.Identity.Name;
                                myOrderDetail.ProductId = myOrderList[i].ProductId;
                                myOrderDetail.Quantity  = myOrderList[i].Quantity;
                                myOrderDetail.UnitPrice = myOrderList[i].Product.UnitPrice;
                                // Add OrderDetail to DB.
                                _db.OrderDetails.Add(myOrderDetail);
                                _db.SaveChanges();
                            }
                            // Set OrderId.
                            Session["currentOrderId"] = myOrder.OrderId;
                            // Display Order information.
                            List <Order> orderList = new List <Order>();
                            orderList.Add(myOrder);
                            ShipInfo.DataSource = orderList;
                            ShipInfo.DataBind();
                            // Display OrderDetails.
                            OrderItemList.DataSource = myOrderList;
                            OrderItemList.DataBind();
                        }
                    }
                    else
                    {
                        Response.Redirect("CheckoutError.aspx?" + retMsg);
                    }
                }
            }
            else
            {
                var myOrder = new Order();
                //myOrder.OrderDate = Convert.ToDateTime("TIMESTAMP".ToString());
                //myOrder.Username = User.Identity.Name;
                //myOrder.FirstName = "FIRSTNAME".ToString();
                //myOrder.LastName = "LASTNAME".ToString();
                //myOrder.Address = "SHIPTOSTREET".ToString();
                //myOrder.City = "SHIPTOCITY".ToString();
                //myOrder.State = "SHIPTOSTATE".ToString();
                //myOrder.PostalCode = "SHIPTOZIP".ToString();
                //myOrder.Country = "SHIPTOCOUNTRYCODE".ToString();
                //myOrder.Email = "EMAIL".ToString();
                //myOrder.Total = Convert.ToDecimal("AMT".ToString());
                //// Verify total payment amount as set on CheckoutStart.aspx.


                //// Get DB context.
                ProductContext _db = new ProductContext();
                //// Add order to DB.
                //_db.Orders.Add(myOrder);
                //_db.SaveChanges();
                // Get the shopping cart items and process them.
                using (ACMEINC.Logic.ShoppingCartActions usersShoppingCart = new
                                                                             ACMEINC.Logic.ShoppingCartActions())
                {
                    List <CartItem> myOrderList = usersShoppingCart.GetCartItems();
                    // Add OrderDetail information to the DB for each product purchased.
                    for (int i = 0; i < myOrderList.Count; i++)
                    {
                        // Create a new OrderDetail object.
                        var myOrderDetail = new OrderDetail();
                        //myOrderDetail.OrderId = myOrder.OrderId;
                        //myOrderDetail.OrderId = myOrder.OrderId;
                        myOrderDetail.Username  = User.Identity.Name;
                        myOrderDetail.ProductId = myOrderList[i].ProductId;
                        myOrderDetail.Quantity  = myOrderList[i].Quantity;
                        myOrderDetail.UnitPrice = myOrderList[i].Product.UnitPrice;
                        // Add OrderDetail to DB.
                        _db.OrderDetails.Add(myOrderDetail);
                        //_db.SaveChanges();
                    }
                    // Set OrderId.
                    Session["currentOrderId"] = myOrder.OrderId;
                    // Display Order information.
                    List <Order> orderList = new List <Order>();
                    orderList.Add(myOrder);
                    ShipInfo.DataSource = orderList;
                    ShipInfo.DataBind();
                    // Display OrderDetails.
                    OrderItemList.DataSource = myOrderList;
                    OrderItemList.DataBind();
                }
            }
        }