Frederik Brinck Jensen
Frederik Brinck Jensen

Reputation: 523

Error in Custom DibsPaymentMethodService Overriding ProcessCallback

I'm trying to customize the dialogue between uCommerce and DIBS to allow ticket registrations.

So far, I've succeeded in copying the DibsPageBuilder and adding the maketicket parameter. However, I need to customize the callback made to the function ProcessCallcack in the DibsPaymentMethodService class.

I copied the ProcessCallback and its content carefully and added it to my custom class, but when I run the checkout pipeline I keep getting the following error:

 UCommerce.Pipelines.PipelineException: Exception occoured while processing pipeline 
'UCommerce.Pipelines.Checkout.CheckoutPipeline'. See inner exception for details. 
 ---> System.Security.SecurityException: Payment insufficient to cover order total 
 for OrderGuid xxx. Please ensure that payments cover the entire value of the order 
 before checking out. at 
 Commerce.Pipelines.Checkout.ValidatePaymentsMadeAgainstOrderTotalTask.Execute(PurchaseOrder subject) 
 at UCommerce.Pipelines.Pipeline`1.Execute(T subject) --- End of inner exception 
 stack trace ---...

I don't get why the checkout pipeline fail to succeed when I manually override the ProcessCallback with the same code the function usually is made of. In other words, if I don't override ProcessCallback the function runs smoothly, but then I don't get to do my customization. I have to say, that the error occurs before I customize anything.

My current uCommerce platform runs version 2.6.1. The code I've copied is:

 public override void ProcessCallback(Payment payment)
 {
    if (payment.PaymentStatusId != 10000001)
            return;
    DibsPaymentMethodServiceConfigurationSection instance = 
            DibsPaymentMethodServiceConfigurationSection.Instance;
    string s = HttpContext.Current.Request["transact"];
    if (string.IsNullOrEmpty(s))
            throw new ArgumentException("transact must be present in query string.");
    int result;
    if (!int.TryParse(s, out result))
            throw new FormatException("transact must be a valid int32");
    PaymentStatusCode paymentStatusCode = PaymentStatusCode.Authorized;
    if (instance.UseMd5)
    {
            string parameter1 = this.GetParameter("authkey", "When using md5 \"{0}\" cannot be null or empty", new string[1]
            {
            "authkey"
            });
            string parameter2 = this.GetParameter("currency", "When using md5 \"{0}\" cannot be null or empty", new string[1]
            {
            "currency"
            });
            string parameter3 = this.GetParameter("amount", "When using md5 \"{0}\" cannot be null or empty", new string[1]
            {
            "amount"
            });
            int currencyNumber = new CurrencyCodeTranslater().FromIsoCode(parameter2);
            string postMd5Key = new DibsMd5Computer().GetPostMd5Key(result.ToString(), parameter3, currencyNumber);
            if (!parameter1.Equals(postMd5Key))
                   paymentStatusCode = PaymentStatusCode.Declined;
    }
    payment.PaymentStatus = PaymentStatus.Get((object) paymentStatusCode);
    payment.TransactionId = result.ToString();
    this.ProcessPaymentRequest(new PaymentRequest(payment.PurchaseOrder, payment));
}

Many thanks in advance.

/brinck10

Upvotes: 0

Views: 414

Answers (0)

Related Questions