自定义DibsPaymentMethodService中的错误覆盖ProcessCallback

时间:2013-03-16 07:47:31

标签: c# umbraco umbraco-ucommerce dibs

我正在尝试定制uCommerce和DIBS之间的对话以允许机票注册。

到目前为止,我已经成功复制了DibsPageBuilder并添加了maketicket参数。但是,我需要在DibsPaymentMethodService类中自定义对ProcessCallcack函数的回调。

我仔细复制了ProcessCallback及其内容并将其添加到我的自定义类中,但是当我运行checkout管道时,我不断收到以下错误:

 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 ---...

当我手动覆盖ProcessCallback并使用通常由该函数构成的相同代码时,我不明白为什么checkout管道无法成功。换句话说,如果我不重写ProcessCallback,该函数运行顺利,但我不能进行自定义。我不得不说,错误发生在我自定义之前。

我目前的uCommerce平台运行2.6.1版。我复制的代码是:

 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));
}

非常感谢提前。

/ brinck10

0 个答案:

没有答案