Beispiel #1
0
        internal void FillInfo(Payment payment, PaymentForm paymentForm)
        {
            Argument.NotNull(payment, "payment");
            Argument.NotNull(paymentForm, "paymentForm");

            payment.Info = paymentForm.RenderValueOrDefault<string>(InfoTemplate);
        }
Beispiel #2
0
        public ActionResult OnePageGiving(PaymentForm pf)
        {
            if (!Util.ValidEmail(pf.Email))
                ModelState.AddModelError("Email", "Need a valid email address");
            if (pf.AmtToPay == 0)
                ModelState.AddModelError("AmtToPay", "Invalid Amount");
            if (pf.IsUs && !pf.Zip.HasValue())
                ModelState.AddModelError("Zip", "Zip is Required for US");
            if(pf.ShowCampusOnePageGiving)
                if((pf.CampusId ?? 0) == 0)
                    ModelState.AddModelError("CampusId", "Campus is Required");

            var m = new OnlineRegModel(Request, pf.OrgId, pf.testing, null, null, pf.source)
                { URL = "/OnePageGiving/" + pf.OrgId};
            SetHeaders(m);
            SetInstructions(m);
            var p = m.List[0];
            if(pf.ShowCampusOnePageGiving)
                pf.Campuses = p.Campuses().ToList();

            if (!ModelState.IsValid)
                return View("OnePageGiving/Index", pf);

            if (CheckAddress(pf) == false)
                return View("OnePageGiving/Index", pf);

            pf.ValidatePaymentForm(ModelState, shouldValidateBilling: false);
            if (!ModelState.IsValid)
                return View("OnePageGiving/Index", pf);

            p.orgid = m.Orgid;
            p.FirstName = pf.First;
            p.LastName = pf.Last;
            p.EmailAddress = pf.Email;
            p.Phone = pf.Phone;
            p.AddressLineOne = pf.Address;
            p.City = pf.City;
            p.State = pf.State;
            p.ZipCode = pf.Zip;
            p.Country = pf.Country;
            if(pf.ShowCampusOnePageGiving)
                p.Campus = pf.CampusId.ToString();
            pf.State = pf.State;

            p.IsNew = p.person == null;

            if (pf.testing)
                pf.CheckTesting();
            var id = pf.OrgId;
            if(id == null)
                return Message("Missing OrgId");
            if (pf.Country.HasValue() && !pf.Zip.HasValue())
                pf.Zip = "NA";
            var ti = pf.ProcessPaymentTransaction(m);
            if ((ti.Approved ?? false) == false)
            {
                ModelState.AddModelError("TranId", ti.Message);
                return View("OnePageGiving/Index", pf);
            }
            if (pf.Zip == "NA")
                pf.Zip = null;
            var fundid = m.settings[id.Value].DonationFundId ?? 0;
            p.FundItem.Add(fundid, pf.AmtToPay);
            var ret = m.ConfirmTransaction(ti);
            switch (ret.Route)
            {
                case RouteType.ModelAction:
                    if (ti.Approved == true)
                    {
                        TempData["onlineregmodel"] = Util.Serialize(m);
                        return Redirect("/OnePageGiving/ThankYou");
                    }
                    ErrorSignal.FromCurrentContext().Raise(new Exception(ti.Message));
                    ModelState.AddModelError("TranId", ti.Message);
                    return View("OnePageGiving/Index", pf);
                case RouteType.Error:
                    DbUtil.Db.LogActivity("OnePageGiving Error " + ret.Message, pf.OrgId);
                    return Message(ret.Message);
                default: // unexptected Route
                    ErrorSignal.FromCurrentContext().Raise(new Exception("OnePageGiving Unexpected route"));
                    DbUtil.Db.LogActivity("OnlineReg Unexpected Route " + ret.Message, pf.OrgId);
                    ModelState.AddModelError("TranId", "unexpected error in payment processing");
                    return View(ret.View ?? "OnePageGiving/Index", pf);
            }
        }
Beispiel #3
0
        private bool CheckAddress(PaymentForm pf)
        {
            if (!pf.IsUs)
            {
                pf.NeedsCityState = true;
                return pf.City.HasValue() && pf.State.HasValue();
            }
            var r = AddressVerify.LookupAddress(pf.Address, null, pf.City, pf.State, pf.Zip);
            if (r.Line1 == "error" || r.found == false)
            {
                if (pf.City.HasValue()
                        && pf.State.HasValue()
                        && pf.Zip.HasValue()
                        && pf.Address.HasValue())
                    return true; // not found but complete
                pf.NeedsCityState = true;
                return false;
            }

            // populate Address corrections
            if (r.Line1 != pf.Address)
                pf.Address = r.Line1;
            if (r.City != (pf.City ?? ""))
                pf.City = r.City;
            if (r.State != (pf.State ?? ""))
                pf.State = r.State;
            if (r.Zip != (pf.Zip ?? ""))
                pf.Zip = r.Zip;
            return true;
        }
Beispiel #4
0
        public PaymentOrder CreateOrder(PaymentForm form)
        {
            Argument.NotNull(form, "form");

            var order = new PaymentOrder
            {
                Amount = form.RenderValueOrDefault<decimal>(Amount),
                BeneficiaryAccountNo = form.RenderValueOrDefault<string>(BeneficiaryAccountNo),
                BeneficiaryBankCode = form.RenderValueOrDefault<string>(BeneficiaryBankCode),
                BeneficiaryName = form.RenderValueOrDefault<string>(BeneficiaryName),
                BeneficiaryTIN = form.RenderValueOrDefault<string>(BeneficiaryTIN),
                CurrencyISOName = form.RenderValueOrDefault<string>(CurrencyISOName),
                PayerAccountNo = form.RenderValueOrDefault<string>(PayerAccountNo),
                PayerBankCode = form.RenderValueOrDefault<string>(PayerBankCode),
                PayerName = form.RenderValueOrDefault<string>(PayerName),
                PayerTIN = form.RenderValueOrDefault<string>(PayerTIN),
                PaymentCode = form.RenderValueOrDefault<string>(PaymentCode),
                Purpose = form.RenderValueOrDefault<string>(Purpose)
            };
            return order;
        }
Beispiel #5
0
        private Transaction ProcessPaymentTransaction(OnlineRegModel m, PaymentForm pf)
        {
            Transaction ti = null;

            if (m != null && m.Transaction != null)
            {
                ti = PaymentForm.CreateTransaction(DbUtil.Db, m.Transaction, pf.AmtToPay);
            }
            else
            {
                ti = pf.CreateTransaction(DbUtil.Db);
            }

            int?pid = null;

            if (m != null)
            {
                m.ParseSettings();
                var terms = Util.PickFirst(m.Terms, "");
                if (terms.HasValue())
                {
                    ViewData["Terms"] = terms;
                }
                pid = m.UserPeopleId;
                if (m.TranId == null)
                {
                    m.TranId = ti.Id;
                }
            }

            if (!pid.HasValue)
            {
                var pds = DbUtil.Db.FindPerson(pf.First, pf.Last, null, pf.Email, pf.Phone);
                if (pds.Count() == 1)
                {
                    pid = pds.Single().PeopleId.Value;
                }
            }
            TransactionResponse tinfo;
            var gateway = OnlineRegModel.GetTransactionGateway();

            if (gateway == "authorizenet")
            {
                if (pf.SavePayInfo == true)
                {
                    var anet = new AuthorizeNet(DbUtil.Db, pf.testing);
                    tinfo = anet.createCustomerProfileTransactionRequest(
                        pid ?? 0,
                        pf.AmtToPay ?? 0,
                        pf.Description,
                        pf.TranId ?? 0);
                }
                else
                if (pf.Type == "B")
                {
                    tinfo = OnlineRegModel.PostECheck(
                        pf.Routing, pf.Account,
                        pf.AmtToPay ?? 0,
                        ti.Id, pf.Description,
                        pid ?? 0, pf.First, pf.Last,
                        pf.Address, pf.City, pf.State, pf.Zip,
                        pf.testing);
                }
                else
                {
                    tinfo = OnlineRegModel.PostTransaction(
                        pf.CreditCard, pf.CCV, pf.Expires,
                        pf.AmtToPay ?? 0,
                        ti.Id, pf.Description,
                        pid ?? 0, pf.Email, pf.First, pf.Last,
                        pf.Address, pf.City, pf.State, pf.Zip,
                        pf.testing);
                }
            }
            else if (gateway == "sage")
            {
                if (pf.SavePayInfo == true)
                {
                    var sage = new SagePayments(DbUtil.Db, pf.testing);
                    tinfo = sage.createVaultTransactionRequest(
                        pid ?? 0,
                        pf.AmtToPay ?? 0,
                        pf.Description,
                        ti.Id,
                        pf.Type);
                }
                else
                if (pf.Type == "B")
                {
                    tinfo = OnlineRegModel.PostVirtualCheckTransactionSage(
                        pf.Routing, pf.Account,
                        pf.AmtToPay ?? 0,
                        ti.Id, pf.Description,
                        pid ?? 0, pf.Email, pf.First, pf.MiddleInitial, pf.Last, pf.Suffix,
                        pf.Address, pf.City, pf.State, pf.Zip, pf.Phone,
                        pf.testing);
                }
                else
                {
                    tinfo = OnlineRegModel.PostTransactionSage(
                        pf.CreditCard, pf.CCV, pf.Expires,
                        pf.AmtToPay ?? 0,
                        ti.Id, pf.Description,
                        pid ?? 0, pf.Email, pf.First, pf.MiddleInitial, pf.Last, pf.Suffix,
                        pf.Address, pf.City, pf.State, pf.Zip, pf.Phone,
                        pf.testing);
                }
            }

            else
            {
                throw new Exception("unknown gateway " + gateway);
            }

            ti.TransactionId = tinfo.TransactionId;
            if (ti.Testing == true && !ti.TransactionId.Contains("(testing)"))
            {
                ti.TransactionId += "(testing)";
            }
            ti.Approved = tinfo.Approved;
            if (ti.Approved == false)
            {
                ti.Amtdue += ti.Amt;
                if (m != null && m.OnlineGiving())
                {
                    ti.Amtdue = 0;
                }
            }
            ti.Message         = tinfo.Message;
            ti.AuthCode        = tinfo.AuthCode;
            ti.TransactionDate = DateTime.Now;
            DbUtil.Db.SubmitChanges();
            return(ti);
        }