Exemplo n.º 1
0
        public void PostProcessPaymentTest_CallbackSuccessInvalidTransaction_PaymentNotProcessed()
        {
            var responseMessage = "Invalid transaction";

            var checkoutService = new Mock <IHelcimCheckoutService>();
            var paymentService  = new Mock <IHelcimPaymentService>();

            paymentService.Setup(x => x.GetTransaction(It.IsAny <HelcimTransactionRequest>())).Returns((HelcimTransactionRequest request) => new HelcimPaymentResponse()
            {
                ResponseMessage = responseMessage
            });

            var paymentMethod = new HelcimCheckoutPaymentMethod(checkoutService.Object, s => paymentService.Object);

            paymentMethod.Settings = GetTestSettings("");

            var context = new PostProcessPaymentEvaluationContext()
            {
                Payment = new PaymentIn {
                    Transactions = new List <PaymentGatewayTransaction>()
                },
                Parameters = new NameValueCollection()
                {
                    { "response", "1" }
                }
            };
            var result = paymentMethod.PostProcessPayment(context);

            Assert.False(result.IsSuccess);
            Assert.Equal(responseMessage, result.ErrorMessage);
        }
Exemplo n.º 2
0
        private PostProcessPaymentResult NewRegisterKlarnaOrder(PostProcessPaymentEvaluationContext context)
        {
            var retVal = new PostProcessPaymentResult();

            var connector = ConnectorFactory.Create(
                AppKey,
                AppSecret,
                Client.TestBaseUrl);

            Client    client    = new Client(connector);
            var       order     = client.NewOrder(context.OuterId);
            OrderData orderData = order.Fetch();

            if (orderData.Status != "CAPTURED")
            {
                var capture = client.NewCapture(order.Location);

                CaptureData captureData = new CaptureData()
                {
                    CapturedAmount = orderData.OrderAmount,
                    Description    = "All order items is shipped",
                    OrderLines     = orderData.OrderLines
                };

                capture.Create(captureData);
                orderData = order.Fetch();
            }

            retVal.IsSuccess        = orderData.Status == "CAPTURED";
            retVal.NewPaymentStatus = retVal.IsSuccess ? PaymentStatus.Paid : PaymentStatus.Pending;
            retVal.OrderId          = context.Order.Id;

            return(retVal);
        }
Exemplo n.º 3
0
        public override PostProcessPaymentResult PostProcessPayment(PostProcessPaymentEvaluationContext context)
        {
            var retVal = new PostProcessPaymentResult();

            var localization = GetLocalization(context.Order.Currency.ToString(), null);

            retVal = NewRegisterKlarnaOrder(context);

            return(retVal);
        }
        public override PostProcessPaymentResult PostProcessPayment(PostProcessPaymentEvaluationContext context)
        {
            var result = new PostProcessPaymentResult();

            var status          = GetParamValue(context.Parameters, "status"); //possible values: error, success
            var responseMessage = GetParamValue(context.Parameters, "responseMessage");
            var transactionId   = GetParamValue(context.Parameters, _transactionParamName);

            context.Payment.OuterId = context.OuterId;
            if (status.EqualsInvariant("success") && IsSale)
            {
                var captureResult = CaptureProcessPayment(new CaptureProcessPaymentEvaluationContext
                {
                    Payment    = context.Payment,
                    Order      = context.Order,
                    Parameters = context.Parameters
                });

                if (captureResult.IsSuccess)
                {
                    context.OuterId              = transactionId;
                    result.NewPaymentStatus      = context.Payment.PaymentStatus = PaymentStatus.Paid;
                    context.Payment.IsApproved   = true;
                    context.Payment.CapturedDate = DateTime.UtcNow;
                    result.IsSuccess             = true;
                }
            }
            else if (status.EqualsInvariant("success"))
            {
                var transactionInfo = GetTransactionStatus(context.Payment.OuterId);
                context.Payment.Transactions.Add(new PaymentGatewayTransaction()
                {
                    Note         = "Transaction Info",
                    ResponseData = transactionInfo.ResponseContent,
                    Status       = transactionInfo.ResponseMessage,
                    ResponseCode = transactionInfo.ResponseCode,
                    ProcessError = transactionInfo.ErrorMessage,
                    CurrencyCode = context.Order.Currency,
                    Amount       = context.Order.Sum
                });

                result.NewPaymentStatus        = context.Payment.PaymentStatus = PaymentStatus.Authorized;
                context.Payment.OuterId        = result.OuterId = context.OuterId;
                context.Payment.AuthorizedDate = DateTime.UtcNow;
                result.IsSuccess = true;
            }
            else
            {
                var errorMessage = GetParamValue(context.Parameters, "errorMessage");
                result.ErrorMessage = $"Order was not created. {errorMessage}";
            }

            result.OrderId = context.Order.Id;
            return(result);
        }
Exemplo n.º 5
0
        private PostProcessPaymentResult OldRegisterKlarnaOrder(PostProcessPaymentEvaluationContext context)
        {
            var retVal = new PostProcessPaymentResult();

            Uri resourceUri = new Uri(string.Format("{0}/{1}", _euroTestBaseUrl, context.OuterId));

            var connector = Connector.Create(AppSecret);

            Order order = new Order(connector, resourceUri)
            {
                ContentType = _contentType
            };

            order.Fetch();
            var status = order.GetValue("status") as string;

            if (status == "checkout_complete")
            {
                var data = new Dictionary <string, object> {
                    { "status", "created" }
                };
                order.Update(data);
                order.Fetch();
                status = order.GetValue("status") as string;
            }

            if (status == "created")
            {
                var reservation = order.GetValue("reservation") as string;

                if (!string.IsNullOrEmpty(reservation))
                {
                    Configuration configuration = new Configuration(Country.Code.SE, Language.Code.SV, Currency.Code.SEK, Encoding.Sweden)
                    {
                        Eid        = Convert.ToInt32(AppKey),
                        Secret     = AppSecret,
                        IsLiveMode = false
                    };

                    Api.Api api = new Api.Api(configuration);

                    var response = api.Activate(reservation);

                    order.Fetch();

                    var klarnaCart = order.GetValue("cart") as JObject;
                }
            }

            retVal.IsSuccess        = status == "created";
            retVal.NewPaymentStatus = retVal.IsSuccess ? PaymentStatus.Paid : PaymentStatus.Pending;
            retVal.OrderId          = context.Order.Id;

            return(retVal);
        }
        private PostProcessPaymentResult PostProcessKlarnaOrder(PostProcessPaymentEvaluationContext context)
        {
            var retVal = new PostProcessPaymentResult();

            Uri resourceUri = new Uri(string.Format("{0}/{1}", _euroTestBaseUrl, context.OuterId));

            var connector = Connector.Create(AppSecret);

            Order order = new Order(connector, resourceUri)
            {
                ContentType = _contentType
            };

            order.Fetch();
            var status = order.GetValue("status") as string;

            if (status == "checkout_complete")
            {
                var data = new Dictionary <string, object> {
                    { "status", "created" }
                };
                order.Update(data);
                order.Fetch();
                status = order.GetValue("status") as string;
            }

            if (status == "created" && IsSale())
            {
                var result = CaptureProcessPayment(new CaptureProcessPaymentEvaluationContext {
                    Payment = context.Payment
                });

                retVal.NewPaymentStatus      = context.Payment.PaymentStatus = PaymentStatus.Paid;
                context.Payment.OuterId      = retVal.OuterId;
                context.Payment.IsApproved   = true;
                context.Payment.CapturedDate = DateTime.UtcNow;
                retVal.IsSuccess             = true;
            }
            else if (status == "created")
            {
                retVal.NewPaymentStatus        = context.Payment.PaymentStatus = PaymentStatus.Authorized;
                context.Payment.OuterId        = retVal.OuterId = context.OuterId;
                context.Payment.AuthorizedDate = DateTime.UtcNow;
                retVal.IsSuccess = true;
            }
            else
            {
                retVal.ErrorMessage = "order not created";
            }

            retVal.OrderId = context.Order.Id;

            return(retVal);
        }
Exemplo n.º 7
0
        public IHttpActionResult PostProcessPayment(webModel.PaymentCallbackParameters callback)
        {
            if (callback != null && callback.Parameters != null && callback.Parameters.Any(param => param.Key == "orderid"))
            {
                var orderId = callback.Parameters.First(param => param.Key == "orderid").Value;
                //some payment method require customer number to be passed and returned. First search customer order by number
                var order = _customerOrderService.GetByOrderNumber(orderId, CustomerOrderResponseGroup.Full);

                //if order not found by order number search by order id
                if (order == null)
                {
                    order = _customerOrderService.GetById(orderId, CustomerOrderResponseGroup.Full);
                }

                var store      = _storeService.GetById(order.StoreId);
                var parameters = new NameValueCollection();
                foreach (var param in callback.Parameters)
                {
                    parameters.Add(param.Key, param.Value);
                }
                var paymentMethod = store.PaymentMethods.Where(x => x.IsActive).FirstOrDefault(x => x.ValidatePostProcessRequest(parameters).IsSuccess);
                if (paymentMethod != null)
                {
                    var paymentOuterId = paymentMethod.ValidatePostProcessRequest(parameters).OuterId;

                    var payment = order.InPayments.FirstOrDefault(x => string.IsNullOrEmpty(x.OuterId) || x.OuterId == paymentOuterId);
                    if (payment == null)
                    {
                        throw new NullReferenceException("appropriate paymentMethod not found");
                    }

                    var context = new PostProcessPaymentEvaluationContext
                    {
                        Order      = order,
                        Payment    = payment,
                        Store      = store,
                        OuterId    = paymentOuterId,
                        Parameters = parameters
                    };

                    var retVal = paymentMethod.PostProcessPayment(context);

                    if (retVal != null)
                    {
                        _customerOrderService.Update(new CustomerOrder[] { order });
                    }

                    return(Ok(retVal));
                }
            }
            return(Ok(new PostProcessPaymentResult {
                ErrorMessage = "cancel payment"
            }));
        }
Exemplo n.º 8
0
        public IHttpActionResult PostProcessPayment(string orderId)
        {
            var order = _customerOrderService.GetById(orderId, CustomerOrderResponseGroup.Full);

            if (order == null)
            {
                throw new NullReferenceException("order");
            }

            var store         = _storeService.GetById(order.StoreId);
            var parameters    = HttpContext.Current.Request.QueryString;
            var paymentMethod = store.PaymentMethods.Where(x => x.IsActive).FirstOrDefault(x => x.ValidatePostProcessRequest(parameters).IsSuccess);

            if (paymentMethod != null)
            {
                var paymentOuterId = paymentMethod.ValidatePostProcessRequest(HttpContext.Current.Request.QueryString).OuterId;

                var payment = order.InPayments.FirstOrDefault(x => x.OuterId == paymentOuterId);
                if (payment == null)
                {
                    throw new NullReferenceException("payment");
                }

                if (payment == null)
                {
                    throw new NullReferenceException("appropriate paymentMethod not found");
                }

                var context = new PostProcessPaymentEvaluationContext
                {
                    Order      = order,
                    Payment    = payment,
                    Store      = store,
                    OuterId    = paymentOuterId,
                    Parameters = parameters
                };

                var retVal = paymentMethod.PostProcessPayment(context);

                if (retVal != null)
                {
                    _customerOrderService.Update(new CustomerOrder[] { order });
                }

                return(Ok(retVal));
            }

            return(Ok(new PostProcessPaymentResult {
                ErrorMessage = "cancel payment"
            }));
        }
Exemplo n.º 9
0
        public override PostProcessPaymentResult PostProcessPayment(PostProcessPaymentEvaluationContext context)
        {
            var transactionId = context.Parameters["transact"];

            var retVal = new PostProcessPaymentResult();

            retVal.NewPaymentStatus      = context.Payment.PaymentStatus = PaymentStatus.Paid;
            context.Payment.CapturedDate = DateTime.UtcNow;
            context.Payment.IsApproved   = true;
            retVal.OuterId = context.Payment.OuterId = transactionId;
            context.Payment.AuthorizedDate = DateTime.UtcNow;
            retVal.OrderId   = context.Order.Number;
            retVal.IsSuccess = ValidatePostProcessRequest(context.Parameters).IsSuccess;

            return(retVal);
        }
Exemplo n.º 10
0
        public override PostProcessPaymentResult PostProcessPayment(PostProcessPaymentEvaluationContext context)
        {
            var retVal = new PostProcessPaymentResult();

            var localization = GetLocalization(context.Order.Currency.ToString(), null);

            if (localization.CountryName == "US" || localization.CountryName == "GB")
            {
                retVal = NewRegisterKlarnaOrder(context);
            }
            else
            {
                retVal = OldRegisterKlarnaOrder(context);
            }

            return(retVal);
        }
        public override PostProcessPaymentResult PostProcessPayment(PostProcessPaymentEvaluationContext context)
        {
            var retVal = new PostProcessPaymentResult();

            var service = new AdaptivePaymentsService(GetConfiguration());

            var response = service.PaymentDetails(new PaymentDetailsRequest
            {
                payKey          = context.OuterId,
                requestEnvelope = new RequestEnvelope {
                    errorLanguage = "en_US"
                }
            });

            if (response.status == "COMPLETED")
            {
                context.Payment.CapturedDate = DateTime.UtcNow;
                retVal.IsSuccess             = context.Payment.IsApproved = true;
                retVal.NewPaymentStatus      = context.Payment.PaymentStatus = PaymentStatus.Paid;
            }
            else if (response.status == "INCOMPLETE" && response.status == "ERROR" && response.status == "REVERSALERROR")
            {
                if (response.error != null && response.error.Count > 0)
                {
                    var sb = new StringBuilder();
                    foreach (var error in response.error)
                    {
                        sb.AppendLine(error.message);
                    }
                    retVal.ErrorMessage = sb.ToString();
                }
                else
                {
                    retVal.ErrorMessage = "payment canceled";
                }

                context.Payment.VoidedDate = DateTime.UtcNow;
                retVal.NewPaymentStatus    = context.Payment.PaymentStatus = PaymentStatus.Voided;
            }
            else
            {
                retVal.NewPaymentStatus = context.Payment.PaymentStatus = PaymentStatus.Pending;
            }

            return(retVal);
        }
Exemplo n.º 12
0
        public override PostProcessPaymentResult PostProcessPayment(PostProcessPaymentEvaluationContext context)
        {
            var result = new PostProcessPaymentResult();

            if (context.Parameters == null || !context.Parameters.HasKeys())
            {
                result.ErrorMessage = "NoStripeTokenPresent";
                return(result);
            }

            var stripeTokenId = context.Parameters.Get(_stripeTokenAttrName);

            if (stripeTokenId == null)
            {
                result.ErrorMessage = "NoStripeTokenPresent";
                return(result);
            }

            var charge = new StripeChargeCreateOptions
            {
                Amount      = (context.Payment.Sum * 100).Round(),
                Description = context.Store.Id,
                Currency    = context.Store.DefaultCurrency.ToLower(),
                SourceTokenOrExistingSourceId = stripeTokenId
            };

            var chargeService = new StripeChargeService(ApiSecretKey);
            var chargeResult  = chargeService.Create(charge);

            if (!string.IsNullOrEmpty(chargeResult.FailureCode))
            {
                result.ErrorMessage = chargeResult.FailureCode;
                return(result);
            }

            result.IsSuccess              = true;
            result.OuterId                = chargeResult.Id;
            result.OrderId                = context.Order.Id;
            result.NewPaymentStatus       = PaymentStatus.Paid;
            context.Payment.PaymentStatus = PaymentStatus.Paid;
            context.Payment.OuterId       = result.OuterId;

            return(result);
        }
Exemplo n.º 13
0
        public void PostProcessPaymentTest_CallbackSuccessAuthorize_PaymentProcessed()
        {
            var transactionId = "123";

            var checkoutService = new Mock <IHelcimCheckoutService>();
            var paymentService  = new Mock <IHelcimPaymentService>();

            paymentService.Setup(x => x.GetTransaction(It.IsAny <HelcimTransactionRequest>())).Returns((HelcimTransactionRequest request) => new HelcimPaymentResponse()
            {
                Response    = 1,
                Transaction = new HelcimPaymentTransaction()
                {
                    Id = transactionId,
                }
            });

            var paymentMethod = new HelcimCheckoutPaymentMethod(checkoutService.Object, s => paymentService.Object);

            paymentMethod.Settings = GetTestSettings("Authorize");

            var context = new PostProcessPaymentEvaluationContext()
            {
                Payment = new PaymentIn {
                    Transactions = new List <PaymentGatewayTransaction>()
                },
                Parameters = new NameValueCollection()
                {
                    { "response", "1" },
                    { "transactionId", transactionId }
                }
            };
            var result = paymentMethod.PostProcessPayment(context);

            Assert.True(result.IsSuccess);
            Assert.Equal(PaymentStatus.Authorized, result.NewPaymentStatus);
            Assert.Equal(transactionId, result.OuterId);
            Assert.Equal(transactionId, context.Payment.OuterId);
            Assert.False(context.Payment.IsApproved);
        }
Exemplo n.º 14
0
        public override PostProcessPaymentResult PostProcessPayment(PostProcessPaymentEvaluationContext context)
        {
            var retVal = new PostProcessPaymentResult();

            var transactionId      = context.Parameters["x_split_tender_id"] ?? context.Parameters["x_trans_id"];
            var invoiceNumber      = context.Parameters["x_invoice_num"];
            var authorizationCode  = context.Parameters["x_auth_code"];
            var totalPrice         = context.Parameters["x_amount"];
            var responseCode       = context.Parameters["x_response_code"];
            var responseReasonCode = context.Parameters["x_response_reason_code"];
            var responseReasonText = context.Parameters["x_response_reason_text"];
            var method             = context.Parameters["x_method"];
            var hash = context.Parameters["x_MD5_Hash"];

            var hashMD5 = GetMD5Hash(MD5Hash + ApiLogin + transactionId + totalPrice);

            if (!string.IsNullOrEmpty(hash) && !string.IsNullOrEmpty(hashMD5) && string.Equals(hashMD5, hash, StringComparison.OrdinalIgnoreCase) && !string.IsNullOrEmpty(responseCode) && responseCode.Equals("1"))
            {
                if (PaymentActionType == "Sale")
                {
                    retVal.NewPaymentStatus      = context.Payment.PaymentStatus = PaymentStatus.Paid;
                    context.Payment.CapturedDate = DateTime.UtcNow;
                    context.Payment.IsApproved   = true;
                }
                else if (PaymentActionType == "Authorization/Capture")
                {
                    retVal.NewPaymentStatus = context.Payment.PaymentStatus = PaymentStatus.Authorized;
                    context.Payment.OuterId = transactionId;
                }

                retVal.OuterId = context.Payment.OuterId = transactionId;
                context.Payment.AuthorizedDate = DateTime.UtcNow;
                retVal.IsSuccess = true;
                retVal.ReturnUrl = string.Format("{0}/{1}?id={2}", context.Store.Url, ThankYouPageRelativeUrl, context.Order.Id);
            }

            return(retVal);
        }
        public override PostProcessPaymentResult PostProcessPayment(PostProcessPaymentEvaluationContext context)
        {
            if (context.Order == null)
            {
                throw new ArgumentNullException("context.Order is null");
            }
            if (context.Payment == null)
            {
                throw new ArgumentNullException("context.Payment is null");
            }
            if (context.Store == null)
            {
                throw new ArgumentNullException("context.Store is null");
            }
            if (string.IsNullOrEmpty(context.Store.Url))
            {
                throw new NullReferenceException("url of store not set");
            }

            var retVal = new PostProcessPaymentResult();

            retVal.OrderId = context.Order.Id;

            var config = GetConfigMap();

            var service = new PayPalAPIInterfaceServiceService(config);

            var getExpressCheckoutDetailsRequest = GetGetExpressCheckoutDetailsRequest(context.OuterId);

            try
            {
                var response = service.GetExpressCheckoutDetails(getExpressCheckoutDetailsRequest);

                CheckResponse(response);

                var status = response.GetExpressCheckoutDetailsResponseDetails.CheckoutStatus;

                if (!status.Equals("PaymentActionCompleted"))
                {
                    var doExpressCheckoutPaymentRequest = GetDoExpressCheckoutPaymentRequest(response, context.OuterId);
                    var doResponse = service.DoExpressCheckoutPayment(doExpressCheckoutPaymentRequest);

                    CheckResponse(doResponse);

                    response = service.GetExpressCheckoutDetails(getExpressCheckoutDetailsRequest);
                    status   = response.GetExpressCheckoutDetailsResponseDetails.CheckoutStatus;
                }
                if (status.Equals("PaymentActionCompleted"))
                {
                    retVal.IsSuccess = true;
                    retVal.OuterId   = response.GetExpressCheckoutDetailsResponseDetails.PaymentDetails[0].TransactionId;
                    if (PaypalPaymentActionType == PaymentActionCodeType.AUTHORIZATION)
                    {
                        retVal.NewPaymentStatus        = context.Payment.PaymentStatus = PaymentStatus.Authorized;
                        context.Payment.OuterId        = retVal.OuterId;
                        context.Payment.AuthorizedDate = DateTime.UtcNow;
                    }
                    else if (PaypalPaymentActionType == PaymentActionCodeType.SALE)
                    {
                        retVal.NewPaymentStatus      = context.Payment.PaymentStatus = PaymentStatus.Paid;
                        context.Payment.OuterId      = retVal.OuterId;
                        context.Payment.IsApproved   = true;
                        context.Payment.CapturedDate = DateTime.UtcNow;
                    }
                }
                else
                {
                    retVal.ErrorMessage = "Payment process not successfully ends";
                }
            }
            catch (System.Exception ex)
            {
                retVal.ErrorMessage = ex.Message;
            }

            return(retVal);
        }
Exemplo n.º 16
0
        public override PostProcessPaymentResult PostProcessPayment(PostProcessPaymentEvaluationContext context)
        {
            var retVal = new PostProcessPaymentResult();

            return(retVal);
        }
Exemplo n.º 17
0
        public IHttpActionResult PostProcessPayment(webModel.PaymentCallbackParameters callback)
        {
            var parameters = new NameValueCollection();

            foreach (var param in callback?.Parameters ?? Array.Empty <KeyValuePair>())
            {
                parameters.Add(param.Key, param.Value);
            }
            var orderId = parameters.Get("orderid");

            if (string.IsNullOrEmpty(orderId))
            {
                throw new InvalidOperationException("the 'orderid' parameter must be passed");
            }

            //some payment method require customer number to be passed and returned. First search customer order by number
            var searchCriteria = AbstractTypeFactory <CustomerOrderSearchCriteria> .TryCreateInstance();

            searchCriteria.Number        = orderId;
            searchCriteria.ResponseGroup = CustomerOrderResponseGroup.Full.ToString();
            //if order not found by order number search by order id
            var order = _searchService.SearchCustomerOrders(searchCriteria).Results.FirstOrDefault() ?? _customerOrderService.GetByIds(new[] { orderId }, CustomerOrderResponseGroup.Full.ToString()).FirstOrDefault();

            if (order == null)
            {
                throw new InvalidOperationException($"Cannot find order with ID {orderId}");
            }

            var orderPaymentsCodes = order.InPayments.Select(x => x.GatewayCode).Distinct().ToArray();
            var store             = _storeService.GetById(order.StoreId);
            var paymentMethodCode = parameters.Get("code");
            //Need to use concrete  payment method if it code passed otherwise use all order payment methods
            var paymentMethods = store.PaymentMethods.Where(x => x.IsActive)
                                 .Where(x => orderPaymentsCodes.Contains(x.Code));

            if (!string.IsNullOrEmpty(paymentMethodCode))
            {
                paymentMethods = paymentMethods.Where(x => x.Code.EqualsInvariant(paymentMethodCode));
            }

            foreach (var paymentMethod in paymentMethods)
            {
                //Each payment method must check that these parameters are addressed to it
                var result = paymentMethod.ValidatePostProcessRequest(parameters);
                if (result.IsSuccess)
                {
                    var paymentOuterId = result.OuterId;
                    var payment        = order.InPayments.FirstOrDefault(x => string.IsNullOrEmpty(x.OuterId) || x.OuterId == paymentOuterId);
                    if (payment == null)
                    {
                        throw new InvalidOperationException(@"Cannot find payment");
                    }
                    var context = new PostProcessPaymentEvaluationContext
                    {
                        Order      = order,
                        Payment    = payment,
                        Store      = store,
                        OuterId    = paymentOuterId,
                        Parameters = parameters
                    };
                    var retVal = paymentMethod.PostProcessPayment(context);
                    if (retVal != null)
                    {
                        _customerOrderService.SaveChanges(new[] { order });

                        // order Number is required
                        retVal.OrderId = order.Number;
                    }
                    return(Ok(retVal));
                }
            }
            return(Ok(new PostProcessPaymentResult {
                ErrorMessage = "Payment method not found"
            }));
        }
Exemplo n.º 18
0
 public override PostProcessPaymentResult PostProcessPayment(PostProcessPaymentEvaluationContext context)
 {
     return(new PostProcessPaymentResult());
 }
Exemplo n.º 19
0
 public override PostProcessPaymentResult PostProcessPayment(PostProcessPaymentEvaluationContext context)
 {
     return(PostProcessKlarnaOrder(context));
 }
        public IHttpActionResult PostProcessPayment(webModel.PaymentCallbackParameters callback)
        {
            if (callback?.Parameters != null && callback.Parameters.Any(param => param.Key.EqualsInvariant("orderid")))
            {
                var orderId = callback.Parameters.First(param => param.Key.EqualsInvariant("orderid")).Value;

                //some payment method require customer number to be passed and returned. First search customer order by number
                var searchCriteria = AbstractTypeFactory <CustomerOrderSearchCriteria> .TryCreateInstance();

                searchCriteria.Number        = orderId;
                searchCriteria.ResponseGroup = CustomerOrderResponseGroup.Full.ToString();

                //if order not found by order number search by order id
                var order = _searchService.SearchCustomerOrders(searchCriteria).Results.FirstOrDefault() ?? _customerOrderService.GetByIds(new[] { orderId }, CustomerOrderResponseGroup.Full.ToString()).FirstOrDefault();

                if (order == null)
                {
                    throw new InvalidOperationException($"Cannot find order with ID {orderId}");
                }

                var store      = _storeService.GetById(order.StoreId);
                var parameters = new NameValueCollection();
                foreach (var param in callback.Parameters)
                {
                    parameters.Add(param.Key, param.Value);
                }
                var paymentMethod = store.PaymentMethods.Where(x => x.IsActive).FirstOrDefault(x => x.ValidatePostProcessRequest(parameters).IsSuccess);
                if (paymentMethod != null)
                {
                    var paymentOuterId = paymentMethod.ValidatePostProcessRequest(parameters).OuterId;

                    var payment = order.InPayments.FirstOrDefault(x => string.IsNullOrEmpty(x.OuterId) || x.OuterId == paymentOuterId);
                    if (payment == null)
                    {
                        throw new InvalidOperationException(@"Cannot find payment");
                    }

                    var context = new PostProcessPaymentEvaluationContext
                    {
                        Order      = order,
                        Payment    = payment,
                        Store      = store,
                        OuterId    = paymentOuterId,
                        Parameters = parameters
                    };

                    var retVal = paymentMethod.PostProcessPayment(context);
                    if (retVal != null)
                    {
                        _customerOrderService.SaveChanges(new[] { order });

                        // order Number is required
                        retVal.OrderId = order.Number;
                    }

                    return(Ok(retVal));
                }
            }
            return(Ok(new PostProcessPaymentResult {
                ErrorMessage = "cancel payment"
            }));
        }
Exemplo n.º 21
0
        public override PostProcessPaymentResult PostProcessPayment(PostProcessPaymentEvaluationContext context)
        {
            var result = new PostProcessPaymentResult();

            var response      = GetParamValue(context.Parameters, "response");
            var transactionId = GetParamValue(context.Parameters, "transactionId");

            var transaction = new PaymentGatewayTransaction
            {
                ResponseCode = response,
                ResponseData = GetParamValue(context.Parameters, "xml"),
                Amount       = GetParamValue(context.Parameters, "amount").ToDecimalSafe(),
                Note         = "PostProcessPayment"
            };

            context.Payment.Transactions.Add(transaction);

            var transactionSuccess = response.EqualsInvariant("1");

            if (!transactionSuccess)
            {
                var message = GetParamValue(context.Parameters, "responseMessage");
                transaction.ProcessError = message;
                result.ErrorMessage      = message;
                return(result);
            }

            //double check transaction status to be sure it legit came from helcim
            var service           = _helcimServiceFactory(ApiEndpoint);
            var transactionResult = service.GetTransaction(new HelcimTransactionRequest()
            {
                AccountId     = AccountId,
                ApiToken      = ApiAccessToken,
                TransactionId = transactionId
            });

            if (transactionResult.Error)
            {
                result.ErrorMessage = transactionResult.ResponseMessage;
                return(result);
            }

            if (PaymentActionType == "Sale")
            {
                result.NewPaymentStatus      = context.Payment.PaymentStatus = PaymentStatus.Paid;
                context.Payment.CapturedDate = DateTime.UtcNow;
                context.Payment.IsApproved   = true;
            }
            else
            {
                result.NewPaymentStatus = context.Payment.PaymentStatus = PaymentStatus.Authorized;
            }

            transaction.IsProcessed        = true;
            context.Payment.Status         = result.NewPaymentStatus.ToString();
            context.Payment.AuthorizedDate = DateTime.UtcNow;
            context.Payment.OuterId        = result.OuterId = transactionId;
            result.IsSuccess = true;

            return(result);
        }
        public override PostProcessPaymentResult PostProcessPayment(PostProcessPaymentEvaluationContext context)
        {
            var retVal = new PostProcessPaymentResult();

            if (context == null && context.Payment == null)
            {
                throw new ArgumentNullException("paymentEvaluationContext");
            }

            if (context.Order == null)
            {
                throw new NullReferenceException("no order with this id");
            }

            retVal.OrderId = context.Order.Id;

            if (!(context.Store != null && !string.IsNullOrEmpty(context.Store.Url)))
            {
                throw new NullReferenceException("no store with this id");
            }

            var config = GetConfigMap(context.Store);

            var service = new PayPalAPIInterfaceServiceService(config);

            GetExpressCheckoutDetailsResponseType response   = null;
            DoExpressCheckoutPaymentResponseType  doResponse = null;

            var getExpressCheckoutDetailsRequest = GetGetExpressCheckoutDetailsRequest(context.OuterId);

            try
            {
                response = service.GetExpressCheckoutDetails(getExpressCheckoutDetailsRequest);

                CheckResponse(response);

                var status = response.GetExpressCheckoutDetailsResponseDetails.CheckoutStatus;

                if (!status.Equals("PaymentActionCompleted"))
                {
                    var doExpressCheckoutPaymentRequest = GetDoExpressCheckoutPaymentRequest(response, context.OuterId);
                    doResponse = service.DoExpressCheckoutPayment(doExpressCheckoutPaymentRequest);

                    CheckResponse(doResponse);

                    response = service.GetExpressCheckoutDetails(getExpressCheckoutDetailsRequest);
                    status   = response.GetExpressCheckoutDetailsResponseDetails.CheckoutStatus;
                }
                if (status.Equals("PaymentActionCompleted"))
                {
                    retVal.IsSuccess        = true;
                    retVal.NewPaymentStatus = PaymentStatus.Paid;
                }
            }
            catch (System.Exception ex)
            {
                retVal.Error            = ex.Message;
                retVal.NewPaymentStatus = PaymentStatus.Pending;
            }

            return(retVal);
        }
Exemplo n.º 23
0
        public IHttpActionResult RegisterPayment(string orderId)
        {
            var order = _customerOrderService.GetById(orderId, CustomerOrderResponseGroup.Full);

            if (order == null)
            {
                throw new NullReferenceException("order");
            }

            var store      = _storeService.GetById(order.StoreId);
            var parameters = new NameValueCollection();

            foreach (var key in HttpContext.Current.Request.QueryString.AllKeys)
            {
                parameters.Add(key, HttpContext.Current.Request.Form[key]);
            }

            foreach (var key in HttpContext.Current.Request.Form.AllKeys)
            {
                parameters.Add(key, HttpContext.Current.Request.Form[key]);
            }

            var paymentMethod = store.PaymentMethods.FirstOrDefault(x => x.Code == "AuthorizeNet");

            if (paymentMethod != null)
            {
                var validateResult = paymentMethod.ValidatePostProcessRequest(parameters);
                var paymentOuterId = validateResult.OuterId;

                var payment = order.InPayments.FirstOrDefault(x => x.GatewayCode == "AuthorizeNet" && x.Sum == Convert.ToDecimal(parameters["x_amount"], CultureInfo.InvariantCulture));
                if (payment == null)
                {
                    throw new NullReferenceException("payment");
                }

                if (payment == null)
                {
                    throw new NullReferenceException("appropriate paymentMethod not found");
                }

                var context = new PostProcessPaymentEvaluationContext
                {
                    Order      = order,
                    Payment    = payment,
                    Store      = store,
                    OuterId    = paymentOuterId,
                    Parameters = parameters
                };

                var retVal = paymentMethod.PostProcessPayment(context);

                if (retVal != null && retVal.IsSuccess)
                {
                    _customerOrderService.Update(new CustomerOrder[] { order });

                    var returnHtml = string.Format("<html><head><script type='text/javascript' charset='utf-8'>window.location='{0}';</script><noscript><meta http-equiv='refresh' content='1;url={0}'></noscript></head><body></body></html>", retVal.ReturnUrl);

                    return(Ok(returnHtml));
                }
            }

            return(StatusCode(System.Net.HttpStatusCode.NoContent));
        }
 public override PostProcessPaymentResult PostProcessPayment(PostProcessPaymentEvaluationContext context)
 {
     throw new NotImplementedException();
 }
Exemplo n.º 25
0
        public IHttpActionResult RegisterPayment()
        {
            var orderId = HttpContext.Current.Request.Form["orderid"];
            var order   = _customerOrderService.GetByOrderNumber(orderId, CustomerOrderResponseGroup.Full);

            if (order == null)
            {
                order = _customerOrderService.GetById(orderId, CustomerOrderResponseGroup.Full);
            }
            if (order == null)
            {
                throw new NullReferenceException("Order not found");
            }

            var store = _storeService.GetById(order.StoreId);

            var parameters = new NameValueCollection();

            foreach (var key in HttpContext.Current.Request.QueryString.AllKeys)
            {
                parameters.Add(key, HttpContext.Current.Request.Form[key]);
            }

            foreach (var key in HttpContext.Current.Request.Form.AllKeys)
            {
                parameters.Add(key, HttpContext.Current.Request.Form[key]);
            }

            var paymentMethod = store.PaymentMethods.FirstOrDefault(x => x.Code == dibsCode);

            if (paymentMethod != null)
            {
                var validateResult = paymentMethod.ValidatePostProcessRequest(parameters);
                var paymentOuterId = validateResult.OuterId;

                var payment = order.InPayments.FirstOrDefault(x => x.GatewayCode == dibsCode && (int)(x.Sum * 100) == Convert.ToInt32(parameters["amount"], CultureInfo.InvariantCulture));

                if (payment == null)
                {
                    throw new NullReferenceException("appropriate paymentMethod not found");
                }

                var context = new PostProcessPaymentEvaluationContext
                {
                    Order      = order,
                    Payment    = payment,
                    Store      = store,
                    OuterId    = paymentOuterId,
                    Parameters = parameters
                };

                var retVal = paymentMethod.PostProcessPayment(context);

                if (retVal != null && retVal.IsSuccess)
                {
                    _customerOrderService.Update(new CustomerOrder[] { order });
                    return(Ok());
                }
            }

            return(StatusCode(System.Net.HttpStatusCode.NotFound));
        }
Exemplo n.º 26
0
 /// <summary>
 /// Method that contains logic of checking payment status of payment in external payment system
 /// </summary>
 /// <param name="context"></param>
 /// <returns>Result of checking payment in external payment system</returns>
 public abstract PostProcessPaymentResult PostProcessPayment(PostProcessPaymentEvaluationContext context);
        public override PostProcessPaymentResult PostProcessPayment(PostProcessPaymentEvaluationContext context)
        {
            var result = new PostProcessPaymentResult();

            var status        = GetParamValue(context.Parameters, "status"); //possible values: error, success
            var transactionId = GetParamValue(context.Parameters, _transactionParamName);

            bool.TryParse(GetSetting("Datatrans.Checkout.ErrorTesting"), out var errorTestingMode);

            if (errorTestingMode && IsTest)
            {
                status = _errorStatus;

                var errorCode = int.TryParse(GetSetting("Datatrans.Checkout.ErrorCode"), out var parsedErrorCode) ? parsedErrorCode : DatatransErrorCodes.DefaultErrorCode;

                context.Parameters["errorCode"]    = errorCode.ToString();
                context.Parameters["errorMessage"] = "Error testing mode";
            }

            context.Payment.OuterId = context.OuterId;
            if (status.EqualsInvariant(_successfulStatus) && IsSale)
            {
                var captureResult = CaptureProcessPayment(new CaptureProcessPaymentEvaluationContext
                {
                    Payment    = context.Payment,
                    Order      = context.Order,
                    Parameters = context.Parameters
                });

                if (captureResult.IsSuccess)
                {
                    context.OuterId              = transactionId;
                    result.NewPaymentStatus      = context.Payment.PaymentStatus = PaymentStatus.Paid;
                    context.Payment.IsApproved   = true;
                    context.Payment.CapturedDate = DateTime.UtcNow;
                    result.IsSuccess             = true;
                }
            }
            else if (status.EqualsInvariant(_successfulStatus))
            {
                var transactionInfo = GetTransactionStatus(context.Payment.OuterId);
                context.Payment.Transactions.Add(new PaymentGatewayTransaction()
                {
                    Note          = "Transaction Info",
                    ResponseData  = transactionInfo.ResponseContent,
                    Status        = transactionInfo.ResponseMessage,
                    ResponseCode  = transactionInfo.ResponseCode,
                    ProcessError  = transactionInfo.ErrorMessage,
                    CurrencyCode  = context.Order.Currency,
                    Amount        = context.Order.Sum,
                    IsProcessed   = true,
                    ProcessedDate = DateTime.UtcNow
                });

                result.NewPaymentStatus        = context.Payment.PaymentStatus = PaymentStatus.Authorized;
                context.Payment.OuterId        = result.OuterId = context.OuterId;
                context.Payment.AuthorizedDate = DateTime.UtcNow;
                result.IsSuccess = true;
            }
            else
            {
                var errorMessage = GetParamValue(context.Parameters, "errorMessage");
                var errorCode    = int.TryParse(GetParamValue(context.Parameters, "errorCode"), out var parsedErrorCode) ? parsedErrorCode : DatatransErrorCodes.DefaultErrorCode;
                result.ErrorMessage = GetErrorMessage(errorCode, errorMessage);
            }

            result.OrderId = context.Order.Id;
            return(result);
        }