Webiant Logo Webiant Logo
  1. No results found.

    Try your search with a different keyword or use * as a wildcard.

CheckMoneyOrderPaymentProcessor.cs

using Microsoft.AspNetCore.Http;
using Nop.Core;
using Nop.Core.Domain.Orders;
using Nop.Plugin.Payments.CheckMoneyOrder.Components;
using Nop.Services.Configuration;
using Nop.Services.Localization;
using Nop.Services.Orders;
using Nop.Services.Payments;
using Nop.Services.Plugins;

namespace Nop.Plugin.Payments.CheckMoneyOrder;

/// 
/// CheckMoneyOrder payment processor
/// 
public class CheckMoneyOrderPaymentProcessor : BasePlugin, IPaymentMethod
{
    #region Fields

    protected readonly CheckMoneyOrderPaymentSettings _checkMoneyOrderPaymentSettings;
    protected readonly ILocalizationService _localizationService;
    protected readonly IOrderTotalCalculationService _orderTotalCalculationService;
    protected readonly ISettingService _settingService;
    protected readonly IShoppingCartService _shoppingCartService;
    protected readonly IWebHelper _webHelper;

    #endregion

    #region Ctor

    public CheckMoneyOrderPaymentProcessor(CheckMoneyOrderPaymentSettings checkMoneyOrderPaymentSettings,
        ILocalizationService localizationService,
        IOrderTotalCalculationService orderTotalCalculationService,
        ISettingService settingService,
        IShoppingCartService shoppingCartService,
        IWebHelper webHelper)
    {
        _checkMoneyOrderPaymentSettings = checkMoneyOrderPaymentSettings;
        _localizationService = localizationService;
        _orderTotalCalculationService = orderTotalCalculationService;
        _settingService = settingService;
        _shoppingCartService = shoppingCartService;
        _webHelper = webHelper;
    }

    #endregion

    #region Methods

    /// 
    /// Process a payment
    /// 
    /// Payment info required for an order processing
    /// 
    /// A task that represents the asynchronous operation
    /// The task result contains the process payment result
    /// 
    public Task ProcessPaymentAsync(ProcessPaymentRequest processPaymentRequest)
    {
        return Task.FromResult(new ProcessPaymentResult());
    }

    /// 
    /// Post process payment (used by payment gateways that require redirecting to a third-party URL)
    /// 
    /// Payment info required for an order processing
    /// A task that represents the asynchronous operation
    public Task PostProcessPaymentAsync(PostProcessPaymentRequest postProcessPaymentRequest)
    {
        //nothing
        return Task.CompletedTask;
    }

    /// 
    /// Returns a value indicating whether payment method should be hidden during checkout
    /// 
    /// Shopping cart
    /// 
    /// A task that represents the asynchronous operation
    /// The task result contains true - hide; false - display.
    /// 
    public async Task HidePaymentMethodAsync(IList cart)
    {
        //you can put any logic here
        //for example, hide this payment method if all products in the cart are downloadable
        //or hide this payment method if current customer is from certain country

        if (_checkMoneyOrderPaymentSettings.ShippableProductRequired && !await _shoppingCartService.ShoppingCartRequiresShippingAsync(cart))
            return true;

        return false;
    }

    /// 
    /// Gets additional handling fee
    /// 
    /// Shopping cart
    /// 
    /// A task that represents the asynchronous operation
    /// The task result contains the additional handling fee
    /// 
    public async Task GetAdditionalHandlingFeeAsync(IList cart)
    {
        return await _orderTotalCalculationService.CalculatePaymentAdditionalFeeAsync(cart,
            _checkMoneyOrderPaymentSettings.AdditionalFee, _checkMoneyOrderPaymentSettings.AdditionalFeePercentage);
    }

    /// 
    /// Captures payment
    /// 
    /// Capture payment request
    /// 
    /// A task that represents the asynchronous operation
    /// The task result contains the capture payment result
    /// 
    public Task CaptureAsync(CapturePaymentRequest capturePaymentRequest)
    {
        return Task.FromResult(new CapturePaymentResult { Errors = new[] { "Capture method not supported" } });
    }

    /// 
    /// Refunds a payment
    /// 
    /// Request
    /// 
    /// A task that represents the asynchronous operation
    /// The task result contains the result
    /// 
    public Task RefundAsync(RefundPaymentRequest refundPaymentRequest)
    {
        return Task.FromResult(new RefundPaymentResult { Errors = new[] { "Refund method not supported" } });
    }

    /// 
    /// Voids a payment
    /// 
    /// Request
    /// 
    /// A task that represents the asynchronous operation
    /// The task result contains the result
    /// 
    public Task VoidAsync(VoidPaymentRequest voidPaymentRequest)
    {
        return Task.FromResult(new VoidPaymentResult { Errors = new[] { "Void method not supported" } });
    }

    /// 
    /// Process recurring payment
    /// 
    /// Payment info required for an order processing
    /// 
    /// A task that represents the asynchronous operation
    /// The task result contains the process payment result
    /// 
    public Task ProcessRecurringPaymentAsync(ProcessPaymentRequest processPaymentRequest)
    {
        return Task.FromResult(new ProcessPaymentResult { Errors = new[] { "Recurring payment not supported" } });
    }

    /// 
    /// Cancels a recurring payment
    /// 
    /// Request
    /// 
    /// A task that represents the asynchronous operation
    /// The task result contains the result
    /// 
    public Task CancelRecurringPaymentAsync(CancelRecurringPaymentRequest cancelPaymentRequest)
    {
        return Task.FromResult(new CancelRecurringPaymentResult { Errors = new[] { "Recurring payment not supported" } });
    }

    /// 
    /// Gets a value indicating whether customers can complete a payment after order is placed but not completed (for redirection payment methods)
    /// 
    /// Order
    /// 
    /// A task that represents the asynchronous operation
    /// The task result contains the result
    /// 
    public Task CanRePostProcessPaymentAsync(Order order)
    {
        ArgumentNullException.ThrowIfNull(order);

        //it's not a redirection payment method. So we always return false
        return Task.FromResult(false);
    }

    /// 
    /// Validate payment form
    /// 
    /// The parsed form values
    /// 
    /// A task that represents the asynchronous operation
    /// The task result contains the list of validating errors
    /// 
    public Task> ValidatePaymentFormAsync(IFormCollection form)
    {
        return Task.FromResult>(new List());
    }

    /// 
    /// Get payment information
    /// 
    /// The parsed form values
    /// 
    /// A task that represents the asynchronous operation
    /// The task result contains the payment info holder
    /// 
    public Task GetPaymentInfoAsync(IFormCollection form)
    {
        return Task.FromResult(new ProcessPaymentRequest());
    }

    /// 
    /// Gets a configuration page URL
    /// 
    public override string GetConfigurationPageUrl()
    {
        return $"{_webHelper.GetStoreLocation()}Admin/PaymentCheckMoneyOrder/Configure";
    }

    /// 
    /// Gets a type of a view component for displaying plugin in public store ("payment info" checkout step)
    /// 
    /// View component type
    public Type GetPublicViewComponent()
    {
        return typeof(CheckMoneyOrderViewComponent);
    }

    /// 
    /// Install the plugin
    /// 
    /// A task that represents the asynchronous operation
    public override async Task InstallAsync()
    {
        //settings
        var settings = new CheckMoneyOrderPaymentSettings
        {
            DescriptionText = "

Mail Personal or Business Check, Cashier's Check or money order to:


NOP SOLUTIONS
your address here,
New York, NY 10001
USA

Notice that if you pay by Personal or Business Check, your order may be held for up to 10 days after we receive your check to allow enough time for the check to clear. If you want us to ship faster upon receipt of your payment, then we recommend your send a money order or Cashier's check.

P.S. You can edit this text from admin panel.

" }; await _settingService.SaveSettingAsync(settings); //locales await _localizationService.AddOrUpdateLocaleResourceAsync(new Dictionary { ["Plugins.Payment.CheckMoneyOrder.AdditionalFee"] = "Additional fee", ["Plugins.Payment.CheckMoneyOrder.AdditionalFee.Hint"] = "The additional fee.", ["Plugins.Payment.CheckMoneyOrder.AdditionalFeePercentage"] = "Additional fee. Use percentage", ["Plugins.Payment.CheckMoneyOrder.AdditionalFeePercentage.Hint"] = "Determines whether to apply a percentage additional fee to the order total. If not enabled, a fixed value is used.", ["Plugins.Payment.CheckMoneyOrder.DescriptionText"] = "Description", ["Plugins.Payment.CheckMoneyOrder.DescriptionText.Hint"] = "Enter info that will be shown to customers during checkout", ["Plugins.Payment.CheckMoneyOrder.PaymentMethodDescription"] = "Pay by cheque or money order", ["Plugins.Payment.CheckMoneyOrder.ShippableProductRequired"] = "Shippable product required", ["Plugins.Payment.CheckMoneyOrder.ShippableProductRequired.Hint"] = "An option indicating whether shippable products are required in order to display this payment method during checkout." }); await base.InstallAsync(); } /// /// Uninstall the plugin /// /// A task that represents the asynchronous operation public override async Task UninstallAsync() { //settings await _settingService.DeleteSettingAsync(); //locales await _localizationService.DeleteLocaleResourcesAsync("Plugins.Payment.CheckMoneyOrder"); await base.UninstallAsync(); } /// /// Gets a payment method description that will be displayed on checkout pages in the public store /// /// /// return description of this payment method to be display on "payment method" checkout step. good practice is to make it localizable /// for example, for a redirection payment method, description may be like this: "You will be redirected to PayPal site to complete the payment" /// /// A task that represents the asynchronous operation public async Task GetPaymentMethodDescriptionAsync() { return await _localizationService.GetResourceAsync("Plugins.Payment.CheckMoneyOrder.PaymentMethodDescription"); } #endregion #region Properties /// /// Gets a value indicating whether capture is supported /// public bool SupportCapture => false; /// /// Gets a value indicating whether partial refund is supported /// public bool SupportPartiallyRefund => false; /// /// Gets a value indicating whether refund is supported /// public bool SupportRefund => false; /// /// Gets a value indicating whether void is supported /// public bool SupportVoid => false; /// /// Gets a recurring payment type of payment method /// public RecurringPaymentType RecurringPaymentType => RecurringPaymentType.NotSupported; /// /// Gets a payment method type /// public PaymentMethodType PaymentMethodType => PaymentMethodType.Standard; /// /// Gets a value indicating whether we should display a payment information page for this plugin /// public bool SkipPaymentInfo => false; #endregion }