public PaymentDetailModel VerifyPayment(PaymentDetailModel model) { var paymentDetailModel = new PaymentDetailModel(); using (var dataModel = new MibarimEntities()) { var amount = dataModel.PayReqs.FirstOrDefault(x => x.PayReqAuthority == model.Authority); if (amount != null) { long refId; int status = _zarinPalService.VerifyTransaction(model.Authority, (int)amount.PayReqValue, out refId); amount.PayReqStatus = status.ToString(); if (status == 100) { amount.PayReqRefID = refId.ToString(); var payRoute = dataModel.vwPayRoutes.FirstOrDefault( x => x.PayReqId == amount.PayReqId && x.DrIsDeleted == false); var route = dataModel.vwStationRoutes.FirstOrDefault(x => x.StationRouteId == payRoute.StationRouteId); _transactionManager.ChargeAccount(amount.PayReqUserId, (int)route.PassPrice); if (route.DriverPrice > route.PassPrice) { _transactionManager.GiftChargeAccount(amount.PayReqUserId, (int)(route.DriverPrice - route.PassPrice)); } _transactionManager.PayMoney(amount.PayReqUserId, (int)payRoute.UserId, (int)route.DriverPrice); NotifModel notifModel = new NotifModel(); notifModel.Title = getResource.getMessage("SeatReserved"); notifModel.Body = string.Format(getResource.getMessage("SeatReservedFor"), route.SrcMainStName, route.DstMainStName, payRoute.TStartTime.ToString("HH:mm")); notifModel.RequestCode = (int)payRoute.PayReqId; notifModel.NotificationId = (int)payRoute.PayReqId; //send passenger notif _notifManager.SendNotifToUser(notifModel, payRoute.PayReqUserId); //send driver notif _notifManager.SendNotifToUser(notifModel, (int)payRoute.UserId); _notifManager.SendNotifToAdmins(notifModel); //send passenger sms var user = dataModel.vwUserInfoes.FirstOrDefault(x => x.UserId == payRoute.PayReqUserId); var mobileBrief = user.UserName.Substring(1); string smsBody = string.Format(getResource.getMessage("SeatReservedFor"), route.SrcMainStName, route.DstMainStName, payRoute.TStartTime.ToString("HH:mm")); var smsService = new SmsService(); smsService.SendSmsMessages(mobileBrief, smsBody); //send driver sms var driver = dataModel.vwUserInfoes.FirstOrDefault(x => x.UserId == payRoute.UserId); var drivermobileBrief = driver.UserName.Substring(1); string smsBodydriver = string.Format(getResource.getMessage("SeatReservedFor"), route.SrcMainStName, route.DstMainStName, payRoute.TStartTime.ToString("HH:mm")); smsService.SendSmsMessages(drivermobileBrief, smsBodydriver); smsService.SendSmsMessages("9358695785", smsBody); smsService.SendSmsMessages("9354205407", smsBody); } dataModel.SaveChanges(); paymentDetailModel.RefId = refId; } } return(paymentDetailModel); }
public PaymentDetailModel ChargeAccount(int userId, int chargeValue, string userNameFamilyString) { var paymentDetailModel = new PaymentDetailModel(); var desc = string.Format(getResource.getMessage("PaymentDesc"), userNameFamilyString, chargeValue); string authority; int status = _zarinPalService.RequestAuthoruty(chargeValue, desc, out authority); using (var dataModel = new MibarimEntities()) { var pr = new PayReq(); pr.PayReqCreateTime = DateTime.Now; pr.PayReqUserId = userId; pr.PayReqValue = chargeValue; pr.PayReqStatus = status.ToString(); if (status == 100) { pr.PayReqAuthority = authority; } dataModel.PayReqs.Add(pr); dataModel.SaveChanges(); paymentDetailModel.ReqId = pr.PayReqId; } paymentDetailModel.BankLink = "https://www.zarinpal.com/pg/StartPay/" + authority; paymentDetailModel.Authority = authority; paymentDetailModel.State = status; return(paymentDetailModel); }
public PaymentDetailModel Payresult(long modelReqId) { var fanapService = new FanapService(); var res = new PaymentDetailModel(); using (var dataModel = new MibarimEntities()) { var payreq = dataModel.PayReqs.FirstOrDefault(x => x.PayReqId == modelReqId); var payres = fanapService.GetPaymentResult(payreq.PayReqRefID); if (payres != null) { if (payres.payed) { payreq.PayReqStatus = ((int)PaymentStatus.Payed).ToString(); res.State = (int)PaymentStatus.Payed; fanapService.CloseInvoice(payreq.PayReqRefID); var reserve = _routeManager.ReserveSeat(payreq.PayReqId); } else if (payres.canceled) { payreq.PayReqStatus = ((int)PaymentStatus.Canceled).ToString(); res.State = (int)PaymentStatus.Canceled; } //fanapService.CloseInvoice(payreq.PayReqRefID); dataModel.SaveChanges(); } } return(res); }
public bool AddPayment(TableDetailModel tableDetailModel, PaymentDetailModel paymentDetailModel) { // todo _connection.ChangeTracker.Clear(); var entityPayment = _connection.Payments.First(x => x.ID == paymentDetailModel.ID); var entityEntityTable = _connection.Tables.First(x => x.ID == tableDetailModel.ID); if (!entityEntityTable.Payments.Contains(entityPayment)) { if (entityEntityTable.Payments.Count is 1) { entityEntityTable.Payments.ToList()[0].IsPartial = true; entityPayment.IsPartial = true; } entityEntityTable.Payments.Add(Mapper.MapDetailModelToEntity(paymentDetailModel)); return(_connection.SaveChanges() is 2); } else { return(false); } }
public object SavePaymentData(string filepath, PaymentDetailModel model) { string filename = "payment.txt"; //string filepath= HttpRequest string data = string.Empty; data = "Date : " + DateTime.Now.ToString("dd/MM/yyyy hh:mm:ss"); data += ", UserId : " + model.UserId; data += ", BSB : " + model.BSB; data += ", AccountNo : " + model.AccountNo; data += ", AccountName : " + model.AccountName; data += ", Reference : " + model.Reference; data += ", Amount : " + model.Amount; try { if (!Directory.Exists(filepath)) { Directory.CreateDirectory(filepath); } FileSystem.WriteDataToFile(Path.Combine(filepath, filename), data); return(JsonResponse.SuccessResponse("Payment completed successfully.")); } catch (Exception ex) { return(JsonResponse.ErrorResponse(ex)); } }
public PaymentDetailPresenter(IPaymentDetailView view, Order order, Customer customer) { _businessOrder = new OrderBusiness(Singleton <PosEngine> .Instance.Resolve <IRepository <Order> >()); _businessOrderItem = new OrderItemBusiness(Singleton <PosEngine> .Instance.Resolve <IRepository <OrderItem> >()); _businessCustmer = new CustomerBusiness(Singleton <PosEngine> .Instance.Resolve <IRepository <Customer> >()); _view = view; _model = new PaymentDetailModel(order, customer); _view.InitView(_model); }
public IHttpActionResult PayReturn(PaymentDetailModel model) { try { var res = _fanapManager.Payresult(model.ReqId); return(Json(_responseProvider.GenerateResponse(res, "PayReturn"))); } catch (Exception e) { _logmanager.Log(Tag, "PayReturn", e.Message); } return(Json(_responseProvider.GenerateUnknownErrorResponse())); }
public async Task <IActionResult> ReceivedPayment([FromBody] PaymentDetailModel model) { try { Response response = new Response(); response.TransResponse = await new PaymentManager().ReceivedPayment(model); return(Ok(response)); } catch (Exception ex) { return(BadRequest(ex.Message)); } }
public IHttpActionResult VerifyBankTransaction(PaymentDetailModel model) { try { var res = _paymentManager.VerifyPayment(model); return(Json(res)); } catch (Exception e) { _logProvider.Log(Tag, "VerifyBankTransaction", e.Message); } return(Json(_responseProvider.GenerateUnknownErrorResponse())); }
public bool EditPayment(PaymentDetailModel paymentDetailModel) { var entityPayment = _connection.Payments.First(x => x.ID == paymentDetailModel.ID); var mappedEntityPayment = Mapper.MapEntityToDetailModel(entityPayment); if (mappedEntityPayment != paymentDetailModel) { entityPayment = Mapper.MapDetailModelToEntity(paymentDetailModel); return(_connection.SaveChanges() is 1); } else { return(false); } }
public void InitView(PaymentDetailModel model) { _model = model; lblCusId.DataBindings.Add("Text", _model, "CusId", true, DataSourceUpdateMode.OnPropertyChanged); lblCusName.DataBindings.Add("Text", _model, "CusName", true, DataSourceUpdateMode.OnPropertyChanged); lblCusPhone.DataBindings.Add("Text", _model, "CusPhone", true, DataSourceUpdateMode.OnPropertyChanged); lblCusPoint.DataBindings.Add("Text", _model, "TotalPurchase", true, DataSourceUpdateMode.OnPropertyChanged); txtCusChange.DataBindings.Add("Text", _model, "CusChange", true, DataSourceUpdateMode.OnPropertyChanged); txtCusPay.DataBindings.Add("Text", _model, "CusCash", true, DataSourceUpdateMode.OnPropertyChanged); txtTotalPayment.DataBindings.Add("Text", _model, "TotalPayment", true, DataSourceUpdateMode.OnPropertyChanged); txtTotalQuantity.DataBindings.Add("Text", _model, "TotalQuantity", true, DataSourceUpdateMode.OnPropertyChanged); txtCusPay.Focus(); }
public ActionResult MakePayment(PaymentDetailModel model) { var path = Server.MapPath("~/App_Data/SavedData"); if (ModelState.IsValid) { PaymentBusiness payClass = new PaymentBusiness(); return(Json(payClass.SavePaymentData(path, model))); } else { string messages = string.Join("; ", ModelState.Values .SelectMany(x => x.Errors) .Select(x => x.ErrorMessage)); return(Json(JsonResponse.ErrorResponse(messages))); } }
public async Task <IActionResult> DeletePaymentMethodProfile([FromBody] PaymentDetailModel model) { try { if (string.IsNullOrEmpty(model.paymentMethod)) { string msg = "paymentMethod should not be null or empty"; return(BadRequest(msg)); } var response = await new PaymentManager().DeletePaymentMethodProfile(model); return(Ok(response)); } catch (Exception ex) { return(BadRequest(ex.Message)); } }
public async Task <IActionResult> UpdatePaymentMethodProfile([FromBody] PaymentDetailModel model) { try { Response response = new Response(); if (model.paymentMethodProfile == null) { string msg = "paymentMethodProfile should not be null or empty"; return(BadRequest(msg)); } response.TransResponse = await new PaymentManager().UpdatePaymentMethodProfile(model); return(Ok(response)); } catch (Exception ex) { return(BadRequest(ex.Message)); } }
public async Task <IActionResult> MarkPaymentAsApplied([FromBody] PaymentDetailModel model) { try { Response response = new Response(); if (string.IsNullOrEmpty(model.paymentInternalId)) { string msg = "paymentInternalId should not be null or empty"; return(BadRequest(msg)); } response.TransResponse = await new PaymentManager().MarkPaymentAsApplied(model); return(Ok(response)); } catch (Exception ex) { return(BadRequest(ex.Message)); } }
public bool AddPayment(PaymentDetailModel paymentDetailModel) { _connection.ChangeTracker.Clear(); var entity = Mapper.MapDetailModelToEntity(paymentDetailModel); entity.Table = _connection.Tables.First(x => x.ID == paymentDetailModel.Table.ID); entity.Sells.ToList().ForEach(x => { x.Payment = entity; _connection.Entry(x).State = EntityState.Modified; }); entity.Customer = _connection.Customers.FirstOrDefault(x => x.ID == paymentDetailModel.Customer.ID); _connection.Payments.Add(entity); return(_connection.SaveChanges() is 1); }
public PaymentDetailModel FanapBookTrip(int userId, long tripId) { var res = new PaymentDetailModel(); var fanapService = new FanapService(); var pr = new PayReq(); using (var dataModel = new MibarimEntities()) { var trip = dataModel.vwDriverTrips.FirstOrDefault(x => x.TripId == tripId && !x.DrIsDeleted); if (trip != null) { pr.PayReqCreateTime = DateTime.Now; pr.PayReqUserId = userId; pr.PayReqValue = (double)trip.PassPrice; dataModel.PayReqs.Add(pr); dataModel.SaveChanges(); var bookreq = new BookRequest(); bookreq.TripId = tripId; bookreq.BrCreateTime = DateTime.Now; bookreq.BookingType = (int)BookingTypes.Fanap; bookreq.UserId = userId; bookreq.IsBooked = false; bookreq.PayReqId = pr.PayReqId; dataModel.BookRequests.Add(bookreq); dataModel.SaveChanges(); var fanapUser = dataModel.Fanaps.Where(x => x.userId == userId).OrderByDescending(y => y.FanapId).FirstOrDefault(); var user = dataModel.vwUserInfoes.FirstOrDefault(x => x.UserId == userId); var ott = fanapService.GetOneTimeToken(); var desc = string.Format(getResource.getMessage("PaymentDesc"), user.Name + " " + user.Family, trip.PassPrice); var factorId = fanapService.IssueInvoice(trip.PassPrice, fanapUser.fuserId, ott, desc); /*res.BankLink = "http://sandbox.fanapium.com:1031/v1/pbc/payinvoice/?invoiceId=" + factorId + "&redirectUri=" + "http://ifanap.mibarim.ir/fanap/PayReturn/?payreqId=" + pr.PayReqId + + "&callUri=" + "http://ifanap.mibarim.ir/fanap/PayReturn/?payreqId=" + pr.PayReqId;*/ res.BankLink = "https://gw.fanapium.com/v1/pbc/payinvoice/?invoiceId=" + factorId + "&redirectUri=" + "http://ifanap.mibarim.ir/fanap/PayReturn/?payreqId=" + pr.PayReqId + "&callUri=" + "http://ifanap.mibarim.ir/fanap/PayReturn/?payreqId=" + pr.PayReqId; pr.PayReqRefID = factorId; dataModel.SaveChanges(); } return(res); } }
public HttpResponseMessage PasargadPay([FromUri] PaymentDetailModel model) { try { var res = _paymentManager.Getpayment(model.ReqId); StringBuilder sb = new StringBuilder(); sb.Append("<html>"); sb.AppendFormat(@"<body onload='document.forms[""form""].submit()'>"); sb.AppendFormat("<form name='form' action='{0}' method='post'>", res.BankLink); sb.AppendFormat("<input type='hidden' name='MerchantCode' value='{0}'>", res.MerchantCode); sb.AppendFormat("<input type='hidden' name='TerminalCode' value='{0}'>", res.TerminalCode); sb.AppendFormat("<input type='hidden' name='InvoiceNumber' value='{0}'>", res.InvoiceNumber); sb.AppendFormat("<input type='hidden' name='InvoiceDate' value='{0}'>", res.InvoiceDate); sb.AppendFormat("<input type='hidden' name='Amount' value='{0}'>", res.Amount); sb.AppendFormat("<input type='hidden' name='RedirectAddress' value='{0}'>", res.RedirectAddress); sb.AppendFormat("<input type='hidden' name='TimeStamp' value='{0}'>", res.TimeStamp); sb.AppendFormat("<input type='hidden' name='Action' value='{0}'>", res.Action); sb.AppendFormat("<input type='hidden' name='Sign' value='{0}'>", res.Sign); sb.Append("</form>"); sb.Append("</body>"); sb.Append("</html>"); return(new HttpResponseMessage() { Content = new StringContent( sb.ToString(), Encoding.UTF8, "text/html" ) }); } catch (Exception e) { _logProvider.Log(Tag, "PasargadPay", e.Message); } return(new HttpResponseMessage(HttpStatusCode.BadRequest)); }
public bool RemovePayment(PaymentDetailModel paymentDetailModel) { _connection.Payments.Remove(Mapper.MapDetailModelToEntity(paymentDetailModel)); return(_connection.SaveChanges() is 1); }
public async Task <ProcessPaymentViewModel> ProcessPayment(ProcessPaymentViewModel paymentViewModel) { paymentViewModel.messageViewModel = new MessageViewModel(); paymentViewModel.messageViewModel.Status = true; if (paymentViewModel.Amount < 0) //The request is invalid: 400 bad request { paymentViewModel.messageViewModel.Status = false; paymentViewModel.messageViewModel.Message = Extentions.GetDescription(EnumClass.PaymentResponse.InvalidRequest); return(paymentViewModel); } try { #region local variables string paymentGateway = string.Empty; int retryPayment = 0; string paymentGatewayResponse = Extentions.GetDescription(EnumClass.PaymentResponse.Processed); PaymentDetailModel paymentDetailModel = new PaymentDetailModel(); PaymentDetailModel _paymentDetailModel = new PaymentDetailModel(); UsersCreditCardDetailModel usersCreditCardDetailModel = new UsersCreditCardDetailModel(); bool isCardValid = true; #endregion local variables #region choose payment gateway if (paymentViewModel.Amount <= 20) //If the amount to be paid is less than £20, use ICheapPaymentGateway. { paymentViewModel.PaymentGatewayName = Extentions.GetDescription(EnumClass.PaymentGateways.CheapPaymentGateway); paymentViewModel.PaymentGatewayId = (int)EnumClass.PaymentGateways.CheapPaymentGateway; } else if (paymentViewModel.Amount > 20 && paymentViewModel.Amount <= 500) //If the amount to be paid is £21 - 500, use IExpensivePaymentGateway { paymentViewModel.PaymentGatewayName = Extentions.GetDescription(EnumClass.PaymentGateways.ExpensivePaymentGateway); paymentViewModel.PaymentGatewayId = (int)EnumClass.PaymentGateways.ExpensivePaymentGateway; //use IExpensivePaymentGateway if available. Otherwise, retry only once with ICheapPaymentGateway. if (!ValidatePaymentGateway(paymentViewModel.PaymentGatewayName)) { paymentViewModel.PaymentGatewayName = Extentions.GetDescription(EnumClass.PaymentGateways.CheapPaymentGateway); if (!ValidatePaymentGateway(paymentViewModel.PaymentGatewayName)) //Any error: 500 internal server error { paymentViewModel.messageViewModel.Status = false; paymentViewModel.messageViewModel.Message = Extentions.GetDescription(EnumClass.PaymentResponse.Failed); return(paymentViewModel); } } } else //If the amount is > £500, try only PremiumPaymentService { paymentViewModel.PaymentGatewayName = Extentions.GetDescription(EnumClass.PaymentGateways.PremiumPaymentGateway); paymentViewModel.PaymentGatewayId = (int)EnumClass.PaymentGateways.PremiumPaymentGateway; } #endregion choose payment gateway #region Validate & Save new CC detail //validate card isCardValid = ValidateCreditCard(paymentViewModel); //return here if CC detail is not valid if (!isCardValid) //400 bad request : Invaild Card Detail { paymentViewModel.messageViewModel.Status = isCardValid; paymentViewModel.messageViewModel.Message = Extentions.GetDescription(EnumClass.PaymentResponse.InvaildCardDetail); return(paymentViewModel); } //save card detail into database usersCreditCardDetailModel = await SaveUserCCDetail(paymentViewModel); if (usersCreditCardDetailModel == null) { paymentViewModel.messageViewModel.Status = false; paymentViewModel.messageViewModel.Message = Extentions.GetDescription(EnumClass.PaymentResponse.Failed); return(paymentViewModel); } #endregion Save/Update CC detail #region make payment //get payment gateway response paymentGatewayResponse = await MakePayment(paymentViewModel); #endregion make payment #region Save payment detail paymentDetailModel.Amount = paymentViewModel.Amount; paymentDetailModel.CCUsed = usersCreditCardDetailModel; paymentDetailModel.PaymentDate = DateTime.UtcNow; paymentDetailModel.CartId = paymentViewModel.CartId; paymentDetailModel.PaymentGateway = paymentViewModel.PaymentGatewayName; paymentDetailModel.PaymentStatus = paymentGatewayResponse; await _unitOfWork.PaymentDetailModelRepository.InsertAsync(paymentDetailModel); _paymentDetailModel = _mapper.Map <PaymentDetailModel>(paymentDetailModel); #endregion Save payment detail #region check payment status and update entity as completed //If the amount is > £500, try only PremiumPaymentService and retry up to 3 times in case payment does not get processed while (paymentViewModel.Amount > 500 && paymentGatewayResponse != Extentions.GetDescription(EnumClass.PaymentResponse.Processed)) { if (ValidatePaymentGateway(paymentViewModel.PaymentGatewayName)) { paymentGatewayResponse = await MakePayment(paymentViewModel); } if (retryPayment == 3 || paymentGatewayResponse == Extentions.GetDescription(EnumClass.PaymentResponse.Processed)) { break; } retryPayment = retryPayment + 1; } //Store/update the payment and payment state entities created previously once the processing is completed if (paymentDetailModel.PaymentStatus == Extentions.GetDescription(EnumClass.PaymentResponse.Processed)) { //Use of eager loading var paymentDetail = _unitOfWork.PaymentDetailModelRepository.FindAllByQuery(c => c.Id == paymentDetailModel.Id) .Include(c => c.CCUsed) .FirstOrDefault(); paymentDetail.PaymentStatus = Extentions.GetDescription(EnumClass.PaymentResponse.Completed); await _unitOfWork.PaymentDetailModelRepository.UpdateAsync(paymentDetail); } #endregion check payment status paymentViewModel.messageViewModel.Id = paymentDetailModel.Id; paymentViewModel.messageViewModel.Message = paymentGatewayResponse; //200 Ok } catch (Exception ex) //500 internal server error { paymentViewModel.messageViewModel.Status = false; paymentViewModel.messageViewModel.Message = Extentions.GetDescription(EnumClass.PaymentResponse.Failed); } return(paymentViewModel); }