Beispiel #1
0
        public ActionResult ProcessPayment(PaymentForm pf)
        {
            if (pf.ProcessType == PaymentProcessTypes.EmpytProcess)
            {
                pf.ProcessType = PaymentProcessTypes.OnlineRegistration;
            }
            // One time or Reg...
            Response.NoCache();

#if DEBUG
#else
            if (Session["FormId"] != null)
            {
                if ((Guid)Session["FormId"] == pf.FormId)
                {
                    return(Message("Already submitted"));
                }
            }
#endif

            OnlineRegModel m  = null;
            var            ed = CurrentDatabase.RegistrationDatas.SingleOrDefault(e => e.Id == pf.DatumId);
            if (ed != null)
            {
                m = Util.DeSerialize <OnlineRegModel>(ed.Data);
            }

#if DEBUG
#else
            if (m != null && m.History.Any(h => h.Contains("ProcessPayment")))
            {
                return(Content("Already submitted"));
            }
#endif

            int?datumid = null;
            if (m != null)
            {
                m.TermsSignature = pf.TermsSignature;
                datumid          = m.DatumId;
                var msg = m.CheckDuplicateGift(pf.AmtToPay);
                if (Util.HasValue(msg))
                {
                    return(Message(msg));
                }
            }
            if (IsCardTester(pf, "Payment Page"))
            {
                return(Message("Found Card Tester"));
            }

            int?GatewayId = MultipleGatewayUtils.GatewayId(CurrentDatabase, m?.ProcessType ?? pf.ProcessType);

            if (CurrentDatabase.Setting("UseRecaptcha") && GatewayId != (int)GatewayTypes.Pushpay)
            {
                if (!GoogleRecaptcha.IsValidResponse(HttpContext, CurrentDatabase))
                {
                    CurrentDatabase.LogActivity("OnlineReg Error ReCaptcha validation failed.", pf.OrgId, did: datumid);
                    ModelState.AddModelError("form", "ReCaptcha validation failed.");
                    return(View("Payment/Process", pf));
                }
            }

            RouteModel ret;

            if ((int)GatewayTypes.Pushpay == GatewayId)
            {
                int orgId;
                ret      = pf.ProcessExternalPayment(m, out orgId);
                pf.OrgId = orgId;
            }
            else
            {
                ret = pf.ProcessPayment(ModelState, m);
            }
            SetHeaders(pf.OrgId ?? 0);

            switch (ret.Route)
            {
            case RouteType.ModelAction:
                return(View(ret.View, ret.Model));

            case RouteType.AmtDue:
                ViewBag.amtdue = ret.AmtDue;
                return(View(ret.View, ret.Transaction));

            case RouteType.Error:
                CurrentDatabase.LogActivity("OnlineReg Error " + ret.Message, pf.OrgId, did: datumid);
                return(Message(ret.Message));

            case RouteType.ValidationError:
                return(View(ret.View, pf));

            default:     // unexptected Route
                if (ModelState.IsValid)
                {
                    ErrorSignal.FromCurrentContext().Raise(new Exception("OnlineReg Unexpected route datum= " + datumid));
                    CurrentDatabase.LogActivity("OnlineReg Unexpected Route " + ret.Message, oid: pf.OrgId, did: datumid);
                    ModelState.AddModelError("form", "unexpected error in payment processing");
                }
                return(View(ret.View ?? "Payment/Process", pf));
            }
        }
Beispiel #2
0
        public ActionResult ProcessPayment(PaymentForm pf)
        {
            Response.NoCache();

#if DEBUG
#else
            if (Session["FormId"] != null)
            {
                if ((Guid)Session["FormId"] == pf.FormId)
                {
                    return(Message("Already submitted"));
                }
            }
#endif

            OnlineRegModel m  = null;
            var            ed = DbUtil.Db.RegistrationDatas.SingleOrDefault(e => e.Id == pf.DatumId);
            if (ed != null)
            {
                m = Util.DeSerialize <OnlineRegModel>(ed.Data);
            }

#if DEBUG
#else
            if (m != null && m.History.Any(h => h.Contains("ProcessPayment")))
            {
                return(Content("Already submitted"));
            }
#endif

            int?datumid = null;
            if (m != null)
            {
                datumid = m.DatumId;
                var msg = m.CheckDuplicateGift(pf.AmtToPay);
                if (Util.HasValue(msg))
                {
                    return(Message(msg));
                }
            }
            if (IsCardTester(pf, "Payment Page"))
            {
                return(Message("Found Card Tester"));
            }

            SetHeaders(pf.OrgId ?? 0);
            var ret = pf.ProcessPayment(ModelState, m);
            switch (ret.Route)
            {
            case RouteType.ModelAction:
                return(View(ret.View, ret.Model));

            case RouteType.AmtDue:
                ViewBag.amtdue = ret.AmtDue;
                return(View(ret.View, ret.Transaction));

            case RouteType.Error:
                DbUtil.Db.LogActivity("OnlineReg Error " + ret.Message, pf.OrgId, did: datumid);
                return(Message(ret.Message));

            case RouteType.ValidationError:
                return(View(ret.View, pf));

            default:     // unexptected Route
                if (ModelState.IsValid)
                {
                    ErrorSignal.FromCurrentContext().Raise(new Exception("OnlineReg Unexpected route datum= " + datumid));
                    DbUtil.Db.LogActivity("OnlineReg Unexpected Route " + ret.Message, oid: pf.OrgId, did: datumid);
                    ModelState.AddModelError("form", "unexpected error in payment processing");
                }
                return(View(ret.View ?? "Payment/Process", pf));
            }
        }