public async Task<ActionResult> PayNow(string[] Invoices)
        {
            try
            {
                if (Invoices.Select(i => i.Length).Sum() > 21)
                {
                    return RedirectToAction("SelectInvoices", new { errorMessage = "Too many invoices selected. Sorry, but we cannot process all those invoices at one time." });
                }

                int ContIndex = Convert.ToInt32(User.Identity.Name);
                var client = engineService.GetClientDetails(ContIndex);
                var invoices = engineService.GetInvoiceDetails(ContIndex);
                var topay = invoices.Where(i => Invoices.Contains(i.DebtTranRefAlpha)).ToList();

                ProviderResult result = await paymentProvider.SubmitInvoices(client, topay);

                // Deal with Error First
                if (result is ProviderError)
                {
                    return View("ProviderError", (ProviderError)result);
                }
                else
                {
                    // If not error, record payment sent
                    engineService.SetPaymentMessage(ContIndex, String.Join(",", Invoices), paymentProvider.DisplayName);
                }

                // Now Handle the Response
                if (result is ProviderRedirectResult)
                {
                    ProviderRedirectResult redirectresult = (ProviderRedirectResult)result;
                    return Redirect(redirectresult.RedirectTo.AbsoluteUri);
                }
                // FUTURE: handle other result types

                return RedirectToAction("Error");
            }
            catch
            {
                return RedirectToAction("Error");
            }
        }