public ProcessPaymentResult ProcessPayment(ProcessPaymentRequest processPaymentRequest) { return AuthorizeOrSale(processPaymentRequest, false); }
public ActionResult ProcessPayment(GutterCleanPaymentRequestModel paymentRequestmodel) { var customer = _workContext.CurrentCustomer; if ((_workContext.CurrentCustomer.IsGuest())) return RedirectToRoute("GutterCleanInfoRegister"); //return new HttpUnauthorizedResult(); //GutterCleanRequestModel requestModel = _httpContext.Session["GutterCleanRequestModel"] as GutterCleanRequestModel; GutterCleanRequestModel model = _httpContext.Session["GutterCleanRequestModel"] as GutterCleanRequestModel; if (model == null) { return RedirectToRoute("GutterCleanRequest"); } ZipCode zipcodeResult; // int addAddress_flag = 0; if (paymentRequestmodel.SelectedAddressId > 0) { var selectedAddress = customer.Addresses.Where(a => a.Id == paymentRequestmodel.SelectedAddressId).SingleOrDefault(); zipcodeResult = _zipCodeService.GetZipCodeDetailByZipcode(selectedAddress.ZipPostalCode); if (zipcodeResult != null) { } else { ModelState.AddModelError("Zipcode", "Selected Address Zipcode is not valid. Please select Another Addresss Or Enter New Address."); } } else { zipcodeResult = _zipCodeService.GetZipCodeDetailByZipcode(paymentRequestmodel.Zipcode); if (zipcodeResult != null) { } else { ModelState.AddModelError("Zipcode", "Zipcode is not valid."); } } if (ModelState.IsValid) { //GutterCleanRequestModel model = _httpContext.Session["GutterCleanRequestModel"] as GutterCleanRequestModel; if (model == null) { return RedirectToRoute("GutterCleanRequest"); } paymentRequestmodel.OrderTotal = model.OrderTotal; ProcessPaymentRequest processPaymentRequest = new ProcessPaymentRequest(); processPaymentRequest.OrderTotal = model.OrderTotal; processPaymentRequest.CreditCardName = paymentRequestmodel.NameOnCard; processPaymentRequest.CreditCardNumber = paymentRequestmodel.CardNumber; processPaymentRequest.CreditCardCvv2 = paymentRequestmodel.CardSecurityCode; processPaymentRequest.CreditCardExpireMonth = paymentRequestmodel.CardExpiryMonth; processPaymentRequest.CreditCardExpireYear = paymentRequestmodel.CardExpiryYear; processPaymentRequest.CustomerId = _workContext.CurrentCustomer.Id; if (processPaymentRequest.OrderGuid == Guid.Empty) processPaymentRequest.OrderGuid = Guid.NewGuid(); try { ProcessPaymentResult processPaymentResult = null; processPaymentResult = _paymentMethod.ProcessPayment(processPaymentRequest); if (processPaymentResult.Success) { var zipcodeDetail = _zipCodeService.GetZipCodeDetailByZipcode(paymentRequestmodel.Zipcode); GutterCleanOrder entity = new GutterCleanOrder(); entity.CustomerId = _workContext.CurrentCustomer.Id; entity.CustomerIp = _webHelper.GetCurrentIpAddress(); entity.OrderStatusId = (int)OrderStatus.Processing; entity.PaymentStatusId = (int)PaymentStatus.Paid; entity.CaptureTransactionId = processPaymentResult.CaptureTransactionId; entity.CaptureTransactionResult = processPaymentResult.CaptureTransactionResult; entity.QuestionSquareFootage = model.QuestionSquareFootage; entity.QuestionStyleOfGutter = model.QuestionStyleOfGutter; entity.QuestionYearBuilt = model.QuestionYearBuilt; entity.RoofMaterial = model.RoofMaterial; entity.QuestionDeliveryTime = model.QuestionDeliveryTime; entity.OrderTotal = model.OrderTotal; entity.OrderGuid = processPaymentRequest.OrderGuid; if (paymentRequestmodel.SelectedAddressId > 0) { var selectedAddress = customer.Addresses.Where(a => a.Id == paymentRequestmodel.SelectedAddressId).SingleOrDefault(); entity.Address = selectedAddress.Address1; entity.Zipcode = selectedAddress.ZipPostalCode; zipcodeDetail = _zipCodeService.GetZipCodeDetailByZipcode(entity.Zipcode); if (zipcodeDetail != null) { entity.City = zipcodeDetail.CityName; ; entity.State = zipcodeDetail.StateName; } } else { entity.Address = paymentRequestmodel.Address; entity.Zipcode = paymentRequestmodel.Zipcode; if (zipcodeDetail != null) { entity.City = zipcodeDetail.CityName; ; entity.State = zipcodeDetail.StateName; } } entity.AgentId = 0; entity.WorkerId = 0; entity.AgentStatusId = 0; entity.WorkerStatusId = 0; entity.CreatedOnUtc = DateTime.UtcNow; //entity.LastUpdatedDateUtc = DateTime.UtcNow; _orderService.InsertOrder(entity); // add new address if user enter new address which is not in its address list if (paymentRequestmodel.SelectedAddressId <= 0) { addAddress(entity); } _httpContext.Session["GutterCleanRequestModel"] = null; _workflowMessageService.SendOrderPlacedCustomerNotification(entity); _workflowMessageService.SendOrderPlacedSiteOwnerNotification(entity); return RedirectToRoute("Completed", new { orderId = entity.Id }); } foreach (var error in processPaymentResult.Errors) paymentRequestmodel.Warnings.Add(error); } catch (Exception exc) { paymentRequestmodel.Warnings.Add(exc.Message); } // return View(paymentRequestmodel); } // Model is not valid then redisplay model var AddressList = customer.Addresses.ToList(); string AddressText = string.Empty; foreach (var address in AddressList) { AddressText = string.Empty; AddressText = address.Address1 + ", " + address.City + "," + address.State + "," + address.ZipPostalCode; paymentRequestmodel.AvailableAddress.Add(new SelectListItem { Text = AddressText, Value = address.Id.ToString(), }); } paymentRequestmodel.AvailableAddress.Add(new SelectListItem { Text = "New Address", Value = "-1", }); //CC types paymentRequestmodel.CreditCardTypes.Add(new SelectListItem { Text = "Visa", Value = "Visa", }); paymentRequestmodel.CreditCardTypes.Add(new SelectListItem { Text = "Master card", Value = "MasterCard", }); paymentRequestmodel.CreditCardTypes.Add(new SelectListItem { Text = "Discover", Value = "Discover", }); paymentRequestmodel.CreditCardTypes.Add(new SelectListItem { Text = "Amex", Value = "Amex", }); //years paymentRequestmodel.ExpireYears.Add(new SelectListItem { Text = "Year", Value = "", }); for (int i = 0; i < 25; i++) { string year = Convert.ToString(DateTime.Now.Year + i); paymentRequestmodel.ExpireYears.Add(new SelectListItem { Text = year, Value = year, }); } //months paymentRequestmodel.ExpireMonths.Add(new SelectListItem { Text = "Month", Value = "", }); for (int i = 1; i <= 12; i++) { string text = (i < 10) ? "0" + i : i.ToString(); paymentRequestmodel.ExpireMonths.Add(new SelectListItem { Text = text, Value = i.ToString(), }); } //prepare review Parameter paymentRequestmodel.QuestionSquareFootage = model.QuestionSquareFootage; var r = _questionAnswerEntityDataService.StyleOfGuttersAnswer().Where(i => i.Value == model.QuestionStyleOfGutter).SingleOrDefault(); paymentRequestmodel.QuestionStyleOfGutterStr = r.Text; var yearRecord = _questionAnswerEntityDataService.YearBuiltAnswer().Where(i => i.Value == model.QuestionYearBuilt.ToString()).SingleOrDefault(); paymentRequestmodel.QuestionYearBuiltStr = yearRecord.Text; paymentRequestmodel.RoofMaterial = model.RoofMaterial; paymentRequestmodel.QuestionDeliveryTimeStr = "5 business days"; if (model.QuestionDeliveryTime == 1) paymentRequestmodel.QuestionDeliveryTimeStr = "5 business days"; if (model.QuestionDeliveryTime == 2) paymentRequestmodel.QuestionDeliveryTimeStr = "8 hours"; if (model.QuestionDeliveryTime == 3) paymentRequestmodel.QuestionDeliveryTimeStr = "4 hours"; //var zipcodeResultCustomer = _zipCodeService.GetZipCodeDetailByZipcode(customer.ZipPostalCode); //paymentRequestmodel.Address = customer.Address1; //paymentRequestmodel.AddressService = customer.Address1; //if (zipcodeResult != null) //{ // paymentRequestmodel.AddressService = customer.Address1 + ", " + zipcodeResultCustomer.CityName + ", " + zipcodeResultCustomer.StateName; //} //paymentRequestmodel.zipcodeService = customer.ZipPostalCode; paymentRequestmodel.AccetTermandCondition = false; return View(paymentRequestmodel); }
protected ProcessPaymentResult AuthorizeOrSale(ProcessPaymentRequest processPaymentRequest, bool authorizeOnly) { var result = new ProcessPaymentResult(); var customer = _customerService.GetCustomerById(processPaymentRequest.CustomerId); if (customer == null) throw new Exception("Customer cannot be loaded"); var req = new DoDirectPaymentReq(); req.DoDirectPaymentRequest = new DoDirectPaymentRequestType(); req.DoDirectPaymentRequest.Version = GetApiVersion(); var details = new DoDirectPaymentRequestDetailsType(); req.DoDirectPaymentRequest.DoDirectPaymentRequestDetails = details; details.IPAddress = _webHelper.GetCurrentIpAddress() ?? ""; if (authorizeOnly) details.PaymentAction = PaymentActionCodeType.AUTHORIZATION; else details.PaymentAction = PaymentActionCodeType.SALE; //credit card details.CreditCard = new CreditCardDetailsType(); details.CreditCard.CreditCardNumber = processPaymentRequest.CreditCardNumber; details.CreditCard.CreditCardType = GetPaypalCreditCardType(processPaymentRequest.CreditCardType); details.CreditCard.ExpMonth = processPaymentRequest.CreditCardExpireMonth; details.CreditCard.ExpYear = processPaymentRequest.CreditCardExpireYear; details.CreditCard.CVV2 = processPaymentRequest.CreditCardCvv2; //details.CreditCard.CardOwner = new PayerInfoType(); //details.CreditCard.CardOwner.PayerCountry = GetPaypalCountryCodeType(customer.BillingAddress.Country); ////billing address //details.CreditCard.CardOwner.Address = new AddressType(); //details.CreditCard.CardOwner.Address.Street1 = customer.BillingAddress.Address1; //details.CreditCard.CardOwner.Address.Street2 = customer.BillingAddress.Address2; //details.CreditCard.CardOwner.Address.CityName = customer.BillingAddress.City; //if (customer.BillingAddress.StateProvince != null) // details.CreditCard.CardOwner.Address.StateOrProvince = customer.BillingAddress.StateProvince.Abbreviation; //else // details.CreditCard.CardOwner.Address.StateOrProvince = "CA"; //details.CreditCard.CardOwner.Address.Country = GetPaypalCountryCodeType(customer.BillingAddress.Country); //details.CreditCard.CardOwner.Address.PostalCode = customer.BillingAddress.ZipPostalCode; //details.CreditCard.CardOwner.Payer = customer.BillingAddress.Email; //details.CreditCard.CardOwner.PayerName = new PersonNameType(); //details.CreditCard.CardOwner.PayerName.FirstName = customer.BillingAddress.FirstName; //details.CreditCard.CardOwner.PayerName.LastName = customer.BillingAddress.LastName; //order totals var payPalCurrency = PaypalHelper.GetPaypalCurrency("USD"); details.PaymentDetails = new PaymentDetailsType(); details.PaymentDetails.OrderTotal = new BasicAmountType(); details.PaymentDetails.OrderTotal.value = Math.Round(processPaymentRequest.OrderTotal, 2).ToString("N", new CultureInfo("en-us")); details.PaymentDetails.OrderTotal.currencyID = payPalCurrency; details.PaymentDetails.Custom = processPaymentRequest.OrderGuid.ToString(); details.PaymentDetails.ButtonSource = "EGSWPaymentButton"; ////shipping //if (customer.ShippingAddress != null) //{ // if (customer.ShippingAddress.StateProvince != null && customer.ShippingAddress.Country != null) // { // var shippingAddress = new AddressType(); // shippingAddress.Name = customer.ShippingAddress.FirstName + " " + customer.ShippingAddress.LastName; // shippingAddress.Street1 = customer.ShippingAddress.Address1; // shippingAddress.Street2 = customer.ShippingAddress.Address2; // shippingAddress.CityName = customer.ShippingAddress.City; // shippingAddress.StateOrProvince = customer.ShippingAddress.StateProvince.Abbreviation; // shippingAddress.PostalCode = customer.ShippingAddress.ZipPostalCode; // shippingAddress.Country = (CountryCodeType)Enum.Parse(typeof(CountryCodeType), customer.ShippingAddress.Country.TwoLetterIsoCode, true); // details.PaymentDetails.ShipToAddress = shippingAddress; // } //} //send request var service = GetService(); DoDirectPaymentResponseType response = service.DoDirectPayment(req); string error; bool success = PaypalHelper.CheckSuccess(response, out error); if (success) { result.AvsResult = response.AVSCode; result.AuthorizationTransactionCode = response.CVV2Code; if (authorizeOnly) { result.AuthorizationTransactionId = response.TransactionID; result.AuthorizationTransactionResult = response.Ack.ToString(); result.NewPaymentStatus = PaymentStatus.Authorized; } else { result.CaptureTransactionId = response.TransactionID; result.CaptureTransactionResult = response.Ack.ToString(); result.NewPaymentStatus = PaymentStatus.Paid; } } else { result.AddError(error); } return result; }