public ProcessPaymentResult ProcessPayment(ProcessPaymentRequest processPaymentRequest) { var result = new ProcessPaymentResult(); try { var options = IyzicoHelper.GetIyzicoOptions(_iyzicoPaymentSettings); var paymentCard = new PaymentCard() { CardHolderName = processPaymentRequest.CreditCardName, CardNumber = processPaymentRequest.CreditCardNumber, ExpireMonth = processPaymentRequest.CreditCardExpireMonth.ToString(), ExpireYear = processPaymentRequest.CreditCardExpireYear.ToString(), Cvc = processPaymentRequest.CreditCardCvv2 }; var customer = _customerService.GetCustomerById(processPaymentRequest.CustomerId); var billingAddress = _iyzicoService.PrepareAddress(_customerService.GetCustomerBillingAddress(customer)); var shippingAddress = _customerService.GetCustomerShippingAddress(customer) != null?_iyzicoService.PrepareAddress(_customerService.GetCustomerShippingAddress(customer)) : billingAddress; var installment = GetInstallment(processPaymentRequest, paymentCard, options); var shoppingCart = _shoppingCartService.GetShoppingCart(customer, ShoppingCartType.ShoppingCart); var shoppingCartTotal = _orderTotalCalculationService.GetShoppingCartTotal(shoppingCart, out var orderDiscountAmount, out var orderAppliedDiscounts, out var appliedGiftCards, out var redeemedRewardPoints, out var redeemedRewardPointsAmount, usePaymentMethodAdditionalFee: false); var paymentRequest = new CreatePaymentRequest { Price = _priceCalculationService.RoundPrice(shoppingCartTotal ?? 0).ToString("f8", CultureInfo.InvariantCulture), PaidPrice = installment.TotalPrice, Currency = Currency.TRY.ToString(), Installment = installment.InstallmentNumber, BasketId = processPaymentRequest.OrderGuid.ToString(), PaymentCard = paymentCard, Buyer = _iyzicoService.PrepareBuyer(processPaymentRequest.CustomerId), ShippingAddress = shippingAddress, BillingAddress = billingAddress, BasketItems = GetItems(customer, processPaymentRequest.StoreId) }; paymentRequest.PaymentGroup = PaymentGroup.LISTING.ToString(); var payment = Payment.Create(paymentRequest, options); if (payment.Status != "success") { string errorMessage = _localizationService.GetResource(String.Format("Plugins.Payments.Iyzico.ErrorMessage.{0}", payment.ErrorCode)) ?? payment.ErrorMessage; result.AddError(errorMessage); return(result); } result.NewPaymentStatus = PaymentStatus.Pending; return(result); } catch (Exception ex) { result.AddError(ex.Message); return(result); } }
/// <summary> /// Gets additional handling fee /// </summary> /// <param name="cart">Shoping cart</param> /// <returns>Additional handling fee</returns> public decimal GetAdditionalHandlingFee(IList <ShoppingCartItem> cart) { var processPaymentRequest = _httpContextAccessor.HttpContext?.Session?.Get <ProcessPaymentRequest>("OrderPaymentInfo"); if (processPaymentRequest != null) { var customer = _customerService.GetCustomerById(_workContext.CurrentCustomer.Id); var shoppingCart = _shoppingCartService.GetShoppingCart(customer, ShoppingCartType.ShoppingCart); var shoppingCartTotal = _orderTotalCalculationService.GetShoppingCartTotal(shoppingCart, out var orderDiscountAmount, out var orderAppliedDiscounts, out var appliedGiftCards, out var redeemedRewardPoints, out var redeemedRewardPointsAmount, usePaymentMethodAdditionalFee: false); var options = IyzicoHelper.GetIyzicoOptions(_iyzicoPaymentSettings); int.TryParse((string)processPaymentRequest.CustomValues.GetValueOrDefault(_localizationService.GetResource("Plugins.Payments.Iyzico.Installment")), out int formInstallment); var retrieveInstallmentInfoRequest = new RetrieveInstallmentInfoRequest() { BinNumber = processPaymentRequest.CreditCardNumber.Substring(0, 6), Locale = Locale.TR.ToString(), Price = _priceCalculationService.RoundPrice(shoppingCartTotal ?? 0).ToString("f8", CultureInfo.InvariantCulture), ConversationId = string.Empty }; var installmentInfo = InstallmentInfo.Retrieve(retrieveInstallmentInfoRequest, options); if (installmentInfo.Status == "success" && installmentInfo.InstallmentDetails.Count > 0) { decimal.TryParse(installmentInfo.InstallmentDetails.FirstOrDefault().InstallmentPrices.FirstOrDefault(x => x.InstallmentNumber == formInstallment).TotalPrice.Replace(".", ","), out decimal installmentTotalPrice); var fee = installmentTotalPrice - (shoppingCartTotal ?? 0); return(_paymentService.CalculateAdditionalFee(cart, fee, false)); } else { return(0); } } else { return(0); } }