/// <summary>
        /// Permet d'exécuter un Express Checkout avec les items dans le panier
        /// </summary>
        /// <returns></returns>
        public ActionResult Checkout(decimal? livraison)
        {
            NVPAPICaller test = new NVPAPICaller();
            string retMsg = "";
            string token = "";
            ShoppingCart cart = ShoppingCart.GetCart(this.HttpContext);
            if (livraison == null)
                livraison = 0;
            decimal damt = cart.GetTotal();
            if (livraison != null)
                damt += (decimal)livraison;

            if (damt > 0)
            {
                string amt = damt.ToString("N2", CultureInfo.InvariantCulture);
                string baseURL = HttpContext.Request.Url.Authority;
                string retunURL = "http://" + baseURL + Url.Action("RevisePaiement");
                string cancelURL = "http://" + baseURL + Url.Action("Cancel");

                bool ret = test.ShortcutExpressCheckout(amt, ref token, ref retMsg, cart.GetCartItems(), retunURL, cancelURL, livraison);
                if (ret)
                {
                    HttpContext.Session["token"] = token;
                    return Redirect(retMsg);
                }
                else
                {
                    return Redirect("APIError.cshtml?" + retMsg);
                }
            }
            else
                return Redirect("APIError.cshtml?ErrorCode=AmtMissing");
        }
        public ActionResult ConfirmePaiement()
        {
            NVPAPICaller test = new NVPAPICaller();

            string retMsg = "";
            string token = "";
            string finalPaymentAmount = "";
            string payerId = "";
            string shippingAddress = "";
            NVPCodec decoder = null;

            token = Session["token"].ToString();
            payerId = Session["payerId"].ToString();
            ShoppingCart cart = ShoppingCart.GetCart(this.HttpContext);
            finalPaymentAmount = cart.GetTotal().ToString("N2", CultureInfo.InvariantCulture);
            //finalPaymentAmount = Session["payment_amt"].ToString();

            bool ret = test.ConfirmPayment(finalPaymentAmount, token, payerId, ref decoder, ref retMsg);
            if (ret)
            {
                // Unique transaction ID of the payment. Note:  If the PaymentAction of the request was Authorization or Order, this value is your AuthorizationID for use with the Authorization & Capture APIs.
                string transactionId = decoder["PAYMENTINFO_0_TRANSACTIONID"];

                // The type of transaction Possible values: l  cart l  express-checkout
                string transactionType = decoder["PAYMENTINFO_0_TRANSACTIONTYPE"];

                // Indicates whether the payment is instant or delayed. Possible values: l  none l  echeck l  instant
                string paymentType = decoder["PAYMENTINFO_0_PAYMENTTYPE"];

                // Time/date stamp of payment
                string orderTime = decoder["PAYMENTINFO_0_ORDERTIME"];

                // The final amount charged, including any shipping and taxes from your Merchant Profile.
                string amt = decoder["PAYMENTINFO_0_AMT"];

                // A three-character currency code for one of the currencies listed in PayPay-Supported Transactional Currencies. Default: USD.
                string currencyCode = decoder["PAYMENTINFO_0_CURRENCYCODE"];

                // PayPal fee amount charged for the transaction
                string feeAmt = decoder["PAYMENTINFO_0_FEEAMT"];

                // Amount deposited in your PayPal account after a currency conversion.
                string settleAmt = decoder["PAYMENTINFO_0_SETTLEAMT"];

                // Tax charged on the transaction.
                string taxAmt = decoder["PAYMENTINFO_0_TAXAMT"];

                //' Exchange rate if a currency conversion occurred. Relevant only if your are billing in their non-primary currency. If
                string exchangeRate = decoder["PAYMENTINFO_0_EXCHANGERATE"];

                ret = test.GetShippingDetails(token, ref payerId, ref shippingAddress, ref retMsg);

                ReleveTransaction releve = new ReleveTransaction();
                string[] split = shippingAddress.Split(';');
                releve.Adresse = split[0];
                releve.Province = split[2];
                releve.Ville = split[1];
                releve.Zip = split[3];
                releve.Acheteur = User.Identity.GetUserName();
                releve.CoutTotal = cart.GetTotal();
                releve.Date = DateTime.Now;
                StoreDB.ReleveTransaction.Add(releve);
                foreach (var c in cart.GetCartItems())
                {
                    if (c.AlbumID == null)
                    {
                        releve.Envoyer = true;
                    }
                    else
                        releve.Envoyer = false;
                }
                StoreDB.SaveChanges();

                return RedirectToAction("EmptyCart", "ShoppingCart", new { id = releve.ReleveTransactionID});
            }
            else
            {
                Response.Redirect("APIError?" + retMsg);
            }
            return View();
        }
        /// <summary>
        /// Permet de réviser notre achat
        /// </summary>
        /// <param name="token">le token de paypal</param>
        /// <param name="payerId">l'id de l'acheteur</param>
        /// <returns></returns>
        public ActionResult RevisePaiement(string token, string payerId)
        {
            NVPAPICaller test = new NVPAPICaller();
            string shippingAddress = "";

            string retMsg = "";

            token = Session["token"].ToString();

            bool ret = test.GetShippingDetails(token, ref payerId, ref shippingAddress, ref retMsg);
            if (ret)
            {
                Session["payerId"] = payerId;
                Session["token"] = token;
                ViewBag.shippingAddress = shippingAddress;
            }
            else
            {
                Response.Redirect("APIError?" + retMsg);
            }

            return View();
        }