internal void FillInfo(Payment payment, PaymentForm paymentForm) { Argument.NotNull(payment, "payment"); Argument.NotNull(paymentForm, "paymentForm"); payment.Info = paymentForm.RenderValueOrDefault<string>(InfoTemplate); }
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); } }
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; }
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; }
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); }