Esempio n. 1
0
        private static IOrderForm GetCurrentReturnForm(IEnumerable<IOrderForm> returnForms,
            DinteroTransactionActionResponse transaction)
        {
            IOrderForm returnForm = null;

            if (returnForms != null)
            {
                var forms = returnForms.ToList();

                if (forms.Count == 1)
                {
                    returnForm = forms.First();
                }
                else
                {
                    var refunds = transaction.Events.Where(e => e.Success && e.Event == "REFUND").ToList();

                    foreach (var form in forms)
                    {
                        if (!refunds.Any(refund => HaveEqualLineItems(refund.Items, form.GetAllLineItems().ToList())))
                        {
                            returnForm = form;
                            break;
                        }
                    }
                }
            }

            return returnForm;
        }
Esempio n. 2
0
 private static List<DinteroOrderLine> ConvertRefundOrderLineItems(IOrderForm orderForm,
     DinteroTransactionActionResponse transaction, Currency currency)
 {
     // TODO: resolve address
     var shippingAddress = orderForm.Shipments.FirstOrDefault();
     return orderForm.GetAllLineItems().Select(lineItem => TransformLineItem(currency, lineItem,
         shippingAddress?.ShippingAddress, ResolveLineItemDinteroId(transaction, lineItem.Code))).ToList();
 }
Esempio n. 3
0
 private static int ResolveLineItemDinteroId(DinteroTransactionActionResponse transaction, string code)
 {
     var dinteroItem = transaction.Items.FirstOrDefault(item => item.Id == code);
     if (dinteroItem != null && int.TryParse(dinteroItem.LineId, out var dinteroId))
     {
         return dinteroId;
     }
     return 0;
 }
Esempio n. 4
0
        /// <summary>
        /// Retrieve transaction details
        /// </summary>
        /// <param name="transactionId"></param>
        /// <param name="accessToken"></param>
        /// <returns></returns>
        public DinteroTransactionActionResponse GetTransactionDetails(string transactionId, string accessToken)
        {
            var result = new DinteroTransactionActionResponse();

            if (!Configuration.IsValid())
            {
                throw new Exception("Dintero configuration is not valid!");
            }

            var url = DinteroAPIUrlHelper.GetTransactionDetailsUrl(transactionId);

            if (!string.IsNullOrWhiteSpace(url))
            {
                try
                {
                    var response = (JObject)SendRequest<object>(url, accessToken, requestMethod: "GET");

                    result.Id = response["id"]?.ToString().ToUpper();
                    result.Currency = response["currency"]?.ToString().ToUpper();
                    result.Status = response["status"]?.ToString().ToUpper();
                    result.Items = response["items"]?.ToObject<List<DinteroOrderLine>>();
                    result.Events = new List<DinteroTransactionEvent>();
                    result.PaymentProduct = response["payment_product"]?.ToString().ToLower();

                    var events = response["events"];
                    if (events != null)
                    {
                        foreach (var transactionEvent in events)
                        {
                            var eventObj = new DinteroTransactionEvent
                            {
                                Id = transactionEvent["id"]?.ToString(),
                                Event = transactionEvent["event"]?.ToString().ToUpper(),
                                Items = response["items"]?.ToObject<List<DinteroOrderLine>>(),
                                Success = response["success"]?.ToString().ToLower() == "true"
                            };

                            if (int.TryParse(response["amount"]?.ToString(), out var eventAmount))
                            {
                                eventObj.Amount = eventAmount;
                            }

                            result.Events.Add(eventObj);
                        }
                    }

                    if (int.TryParse(response["amount"]?.ToString(), out var amount))
                    {
                        result.Amount = amount;
                    }

                }
                catch (Exception e)
                {
                    Logger.Error("An error occurred during capturing transaction.", e);
                    throw;
                }

            }

            return result;
        }