//
        // GET: /Payment/
        public ActionResult Index()
        {
            PaymentModel pm = new PaymentModel();

            pm.SuccessRedirectUrl = Request.Url.ToString().Replace(Request.FilePath, Url.Content("~/Payment/success"));
            pm.NotificationUrl = Request.Url.ToString().Replace(Request.FilePath, Url.Content("~/Notification"));
            pm.CancelRedirectUrl = Request.Url.ToString().Replace(Request.FilePath, Url.Content("~/Payment/Cancel"));

            return View(pm);
        }
        /// <summary>
        /// Log all incoming text in a text file
        /// </summary>
        public string Index()
        {
            var path = Server.MapPath(string.Format("~/notification{0}.log", DateTime.Now.ToString("yyyy-MM-dd")));

            //check post values
            string notification = new StreamReader(Request.InputStream).ReadToEnd();

            //check get values
            string query = Request.Url.Query;

            string line = string.Format("[{0}] POST: {1} GET: {2}", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"), notification, query);

            if (System.IO.File.Exists(path))
            {
                string oldText = System.IO.File.ReadAllText(path);
                using (var sw = new StreamWriter(path, false))
                {
                    sw.WriteLine(line);
                    sw.Write(oldText);
                }
            }
            else System.IO.File.WriteAllText(path, line);

            //now stars the order processing
            //step 1: get the order from the MultiSafepay client
            var transactionid = Request["transactionid"];
            var pm = new PaymentModel();
            var c = new MultiSafepay.MultiSafepayClient(pm.ApiKey, apiUrl: pm.ApiUrls[0]);
            bool ordercompleted = false;

            var order = c.GetOrder(transactionid);
            if(order != null)
                ordercompleted = order.Status == "completed";

            if(ordercompleted)
            {
                //get our order
                var facade = FacadeFactory.GetInstance().GetFacade<MSPFacade>();
                var orderdb = facade.GetById<MSPOrder>(transactionid);

                if (orderdb != null)
                {
                    orderdb.Status = MSPOrderStatus.Completed;
                    facade.Save();
                }

            }
            return "OK";
        }
        public ActionResult Post2(PaymentModel pm)
        {
            var ordermodel = CreateRedirectOrder(pm);

            var param = Newtonsoft.Json.JsonConvert.SerializeObject(ordermodel);
            HttpContent content = new StringContent(param, Encoding.UTF8, "application/json");
            content.Headers.Add("api_key", pm.ApiKey);

            HttpClient client = new HttpClient();

            var result = client.PostAsync(pm.ApiUrl + "orders", content).Result;
            string resultContent = result.Content.ReadAsStringAsync().Result;

            var message = Newtonsoft.Json.JsonConvert.DeserializeObject<MultiSafepay.ResponseMessage<MultiSafepay.Model.PaymentLink>>(resultContent);

            if (!message.Success)
                pm.Errors.Add(message.ErrorCode.ToString() + "-" + message.ErrorInfo);
            else
            {
                pm.PaymentUrl = message.Data.PaymentUrl;

                var facade = FacadeFactory.GetInstance().GetFacade<MSPFacade>();

                var order = facade.GetById<MSPOrder>(pm.OrderId);

                order = new MSPOrder();
                order.Id = pm.OrderId;
                order.OrderId = pm.OrderId;
                order.Status = MSPOrderStatus.Created;
                facade.Add(order);
                var val = facade.Save();
                pm.Errors = val.BrokenRules.ToList();
            }

            return Json(pm);
        }
        public ActionResult Post(PaymentModel pm)
        {
            var ordermodel = CreateRedirectOrder(pm);
            var c = new MultiSafepay.MultiSafepayClient(pm.ApiKey, apiUrl: pm.ApiUrl);

            try
            {

                var order = c.CreateOrder(ordermodel);
                pm.PaymentUrl = order.PaymentUrl;

            }
            catch(Exception exc)
            {

                while (exc != null)
                {
                    pm.Errors.Add(exc.Message);
                    exc = exc.InnerException;
                }
            }

            return Json(pm);
        }
        private MultiSafepay.Model.OrderRequest CreateRedirectOrder(PaymentModel pm)
        {
            pm.Errors = new List<string>();

            MultiSafepay.Model.PaymentOptions paymentOptions = new MultiSafepay.Model.PaymentOptions();
            paymentOptions.CancelRedirectUrl = pm.CancelRedirectUrl + "/" + pm.OrderId;
            paymentOptions.NotificationUrl = pm.NotificationUrl;
            paymentOptions.SuccessRedirectUrl = pm.SuccessRedirectUrl + "/" + pm.OrderId;

            var ordermodel = MultiSafepay.Model.OrderRequest.CreateRedirect(pm.OrderId, pm.Description, pm.Amount, pm.Currency, paymentOptions);
            ordermodel.Customer = new MultiSafepay.Model.Customer() { Locale = pm.Locale, Country = pm.Country };

            return ordermodel;
        }