protected void Page_Load(object sender, EventArgs e)
        {
            if(!IsPostBack)
            {
                NVPAPICaller payPalCAller = new NVPAPICaller();

                string retMsg = "";
                string token = "";
                string PayerID = "";
                NVPCodec decoder = new NVPCodec();
                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.Uername = 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 checkout start.aspx.
                    try
                    {
                        decimal paymentAmountOnCheckout = Convert.ToDecimal( Session["payment_amt"].ToString() );
                        decimal paymentAmountFromPayPal = Convert.ToDecimal( decoder["AMT"].ToString() );
                        if (paymentAmountOnCheckout != paymentAmountFromPayPal)
                        {
                            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 (WingtipToys.Logic.ShoppingCartActions usersShoppingCart = new WingtipToys.Logic.ShoppingCartActions())
                    {
                        List<CartItem> myOrderList = usersShoppingCart.GetCartItems();

                        //add oderdetail info to the db for each product purchased
                        for (int i= 0; i < myOrderList.Count; i++)
                        {
                            //create new order detail 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 order id
                        Session["currentOrderId"] = myOrder.OrderId;

                        //displayorder info
                        List<Order> orderList = new List<Order>();
                        orderList.Add(myOrder);
                        ShipInfo.DataSource = orderList;
                        ShipInfo.DataBind();

                        //display order detail
                        OrderItemList.DataSource = myOrderList;
                        OrderItemList.DataBind();
                    }
                }
                else
                {
                    Response.Redirect("CheckoutError.aspx?" + retMsg);
                }
            }
        }
        protected void CheckoutConfirm_Click(object sender, EventArgs e)
        {
            Session["payerId"] = "";

            var myOrder = new Order();

            string AMT = Session["payment_amt"].ToString();

            myOrder.OrderDate = DateTime.Now;
            myOrder.Username = User.Identity.Name;
            myOrder.FirstName = TextBoxFN.Text;
            myOrder.LastName = TextBoxSN.Text;
            myOrder.Address = TextBoxAddress.Text;
            myOrder.City = TextBoxCity.Text;
            myOrder.State = TextBoxZone.Text;
            myOrder.PostalCode = TextBoxIndex.Text;
            myOrder.Country = TextBoxZone.Text;
            myOrder.Email = TextBoxMail.Text;

            myOrder.Phone = TextBoxPhone.Text;
            myOrder.PaymentTransactionId = "1";
            myOrder.OrderDetails = new List<OrderDetail>();
            myOrder.DSID = 1;

            myOrder.Total = Convert.ToDecimal(AMT);

            // Verify total payment amount as set on CheckoutStart.aspx.
            try
            {
                decimal paymentAmountOnCheckout = Convert.ToDecimal(Session["payment_amt"].ToString());
                decimal paymentAmoutFromPayPal = Convert.ToDecimal(AMT);
                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 (WingtipToys.Logic.ShoppingCartActions usersShoppingCart = new WingtipToys.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.
                    //myOrder.OrderDetails.Add(myOrderDetail);
                    _db.OrderDetails.Add(myOrderDetail);
                    _db.SaveChanges();
                }

                // Set OrderId.
                Session["currentOrderId"] = myOrder.OrderId;

                // Display Order information.
                List<Order> orderList = new List<Order>();
                orderList.Add(myOrder);
            }

            //_db.Orders.Add(myOrder);
            //_db.SaveChanges();

            Response.Redirect("CheckoutReview.aspx");
        }