Exemplo n.º 1
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.º 2
0
        public override PostProcessPaymentResult PostProcessPayment(PostProcessPaymentEvaluationContext context)
        {
            var retVal = new PostProcessPaymentResult();

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

            retVal = NewRegisterKlarnaOrder(context);

            return(retVal);
        }
Exemplo n.º 3
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);
        }
        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);
        }
        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.º 6
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);
        }
        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.º 8
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);
        }
Exemplo n.º 9
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.º 10
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.º 12
0
        public override PostProcessPaymentResult PostProcessPayment(PostProcessPaymentEvaluationContext context)
        {
            var retVal = new PostProcessPaymentResult();

            return(retVal);
        }
Exemplo n.º 13
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 paymentMethod = store.PaymentMethods.Where(x => x.IsActive).FirstOrDefault(x => x.ValidatePostProcessRequest(HttpContext.Current.Request.QueryString).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
                };

                PostProcessPaymentResult retVal;
                if (!payment.IsApproved)
                {
                    retVal = paymentMethod.PostProcessPayment(context);

                    if (retVal != null && retVal.NewPaymentStatus == PaymentStatus.Paid)
                    {
                        payment.IsApproved = true;
                        _customerOrderService.Update(new CustomerOrder[] { order });
                    }
                }
                else
                {
                    retVal = new PostProcessPaymentResult
                    {
                        IsSuccess        = true,
                        NewPaymentStatus = PaymentStatus.Paid,
                        OrderId          = orderId
                    };
                }

                return(Ok(retVal));
            }

            return(Ok(new PostProcessPaymentResult {
                Error = "cancel payment"
            }));
        }
        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.º 15
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 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);
        }