Join us this Friday for AI in Action at the Virtual Happy Hour! This free virtual event is open to all—enroll now on Academy and don’t miss out.

 

Unable to cast IPayment to CustomPayment in cart.ProcessPayment method

Vote:
 

I am using a custom payment and passing in the ImplementationClass when adding the payment to the cart. Using cart.AddPayment method. However, when ProcessPayment is called in my custom payment gateway I get the IPayment Object which is iternally a 'SerializablePayment' object.

Following last comment from Khiem, I understand that I should get a CustomPayment object back. Is there a something I need to do in ProcessPayment method to convert?

    [JsonConverter(typeof(PaymentConverter))]
    public class BarclaysFusePayment : SerializablePayment
    {
        /// <summary>
        /// Initializes a new instance of the <see cref="BarclaysFusePayment"/> class.
        /// </summary>
        public BarclaysFusePayment()
        {
            this.Properties = new Hashtable();
            this.BillingAddress = (IOrderAddress)new SerializableOrderAddress();
            this.PaymentType = PaymentType.Other;
            this.ImplementationClass = typeof(BarclaysFusePayment).AssemblyQualifiedName;
        }
        ...
    }

The following code use to work with Mediachase version but now thows an exception as it cant cast 

public class BarclaysFusePaymentGateway : AbstractWexPaymentGateway, IPaymentPlugin
{
        public PaymentProcessingResult ProcessPayment(IOrderGroup orderGroup, IPayment payment)
        {
            var cardPayment = payment as BarclaysFusePayment;
            var paymentSuccessful = false;

           //payment processing logic

           if (paymentSuccessful)
          {
               return PaymentProcessingResult.CreateSuccessfulResult(string.Empty);
           }
           else
           {
               return PaymentProcessingResult.CreateUnsuccessfulResult("Error processing payment");
           }
        }
}

Admittedly, we've not upgraded in a few years we are upgrading from Mediachase.Commerce 11.8.3.0 to Mediachase.Commerce 13.32.0.0

#279163
Apr 25, 2022 13:42
Vote:
 

Can you show us how you are creating the IPayment object before you call ProcessPayment on your custom gateway?

Also I don't think you should be inheriting from SerializablePayment. Ideally you should be using the CreatePayment method() from the PaymentOption (payment method) or directly from OrderGroupFactory. You've mentioned the ImplementationClass so I assume your doing the latter correctly.

#280051
May 09, 2022 20:04
* You are NOT allowed to include any hyperlinks in the post because your account hasn't associated to your company. User profile should be updated.