Beispiel #1
0
        public override PublicPaymentTransaction AmendPaymentTransaction(PublicPaymentTransaction transaction, PaymentData paymentData)
        {
            transaction.ReturnUrl = urlProvider.DefaultPaymentUrl;
            transaction           = SetCancelUrl(transaction, urlProvider.CancelUrl);

            return(transaction);
        }
Beispiel #2
0
        private ActionResult FinishPayment(PublicPaymentTransaction transaction)
        {
            billingApi.UpdatePaymentTransactionData(
                transaction.TransactionId,
                transaction.Status,
                transaction.StatusCode,
                transaction.StatusCodeDescription,
                transaction.Attributes.Select(a => new NameValue {
                Name = a.Name, Value = a.Value
            }).ToArray());

            var finishedTransaction = billingApi.FinishPayment(transaction.TransactionId);

            if (finishedTransaction == null)
            {
                // error: transaction does not exist
                throw new ArgumentException("Transaction could not be finished.");
            }

            var status = finishedTransaction.Status;

            if (status.ToUpper() == "OK" || status.ToUpper() == "IN_PROGRESS")
            {
                return(Redirect(urlProvider.SuccessUrl));
            }

            return(Redirect(urlProvider.FailureUrl));
        }
        public override PublicPaymentTransaction AmendPaymentTransaction(PublicPaymentTransaction transaction, PaymentData paymentData)
        {
            transaction.ReturnUrl = urlProvider.DefaultPaymentUrl;
            transaction = SetCancelUrl(transaction, urlProvider.CancelUrl);

            return transaction;
        }
Beispiel #4
0
        public override PublicPaymentTransaction AmendPaymentTransaction(PublicPaymentTransaction transaction, PaymentData paymentData)
        {
            var form = paymentData.PaymentForm as CCPaymentForm;

            var attributes = new List <AttributeData>(transaction.Attributes);

            attributes.Add(new AttributeData {
                Name = "cc_number", Value = form.CardNumber
            });
            attributes.Add(new AttributeData {
                Name = "cc_name", Value = form.CardOwner
            });
            attributes.Add(new AttributeData {
                Name = "ccv", Value = form.CardSecurityCode
            });                                                                                // wrong abbreviation "ccv" is expected.
            attributes.Add(new AttributeData {
                Name = "expires_month", Value = form.ExpiresMonth.ToString()
            });
            attributes.Add(new AttributeData {
                Name = "expires_year", Value = form.ExpiresYear.ToString()
            });

            transaction.Attributes = attributes.ToArray();

            transaction.ReturnUrl = urlProvider.DefaultPaymentUrl;
            transaction           = SetCancelUrl(transaction, urlProvider.CancelUrl);

            return(transaction);
        }
        /// <summary>
        /// Create PublicPaymentTransaction and call MakePayment in Atomia Billing Public Service.
        /// </summary>
        /// <param name="publicOrderContext">Order data</param>
        /// <param name="order">The order object returned from CreateOrder call in Atomia Billing Public Service</param>
        /// <param name="paymentHandler">Handler for customer's selected payment method</param>
        /// <returns>URL to redirect to for finishing or seeing result of payment transaction.</returns>
        public string CreatePaymentTransaction(PublicOrderContext publicOrderContext, PublicOrder order, PaymentDataHandler paymentHandler)
        {
            var paymentTransaction = new PublicPaymentTransaction
            {
                GuiPluginName = paymentHandler.Id,
                Attributes = new AttributeData[0],
                CurrencyCode = order.Currency,
                TransactionReference = order.Number,
                Amount = order.Total
            };

            paymentTransaction = paymentHandler.AmendPaymentTransaction(paymentTransaction, publicOrderContext.PaymentData);

            if (paymentTransaction == null)
            {
                throw new InvalidOperationException("PaymentDataHandler must return a non-null payment transaction from AmendTransaction.");
            }

            foreach (var handler in transactionDataHandlers)
            {
                paymentTransaction = handler.AmendPaymentTransaction(paymentTransaction, publicOrderContext);

                if (paymentTransaction == null)
                {
                    throw new InvalidOperationException("ExtraTransactionDataHandlers must return a non-null payment transaction from AmendTransaction.");
                }
            }

            PublicPaymentTransaction createdTransaction;

            try
            {
                createdTransaction = BillingApi.MakePayment(paymentTransaction);
            }
            catch (SoapException ex)
            {
                logger.LogException(ex, "MakePayment failed.");

                return urlProvider.FailureUrl;
            }

            if (createdTransaction.Status.ToUpper() == "IN_PROGRESS" && !string.IsNullOrEmpty(createdTransaction.RedirectUrl))
            {
                return createdTransaction.RedirectUrl;
            }
            else if (createdTransaction.Status.ToUpper() == "OK")
            {
                return urlProvider.SuccessUrl;
            }
            else if (createdTransaction.Status.ToUpper() == "FRAUD_DETECTED" || createdTransaction.Status.ToUpper() == "FAILED")
            {
                return urlProvider.FailureUrl;
            }
            else
            {
                return createdTransaction.ReturnUrl;
            }
        }
        /// <summary>
        /// Create PublicPaymentTransaction and call MakePayment in Atomia Billing Public Service.
        /// </summary>
        /// <param name="publicOrderContext">Order data</param>
        /// <param name="order">The order object returned from CreateOrder call in Atomia Billing Public Service</param>
        /// <param name="paymentHandler">Handler for customer's selected payment method</param>
        /// <returns>URL to redirect to for finishing or seeing result of payment transaction.</returns>
        public string CreatePaymentTransaction(PublicOrderContext publicOrderContext, PublicOrder order, PaymentDataHandler paymentHandler)
        {
            var paymentTransaction = new PublicPaymentTransaction
            {
                GuiPluginName        = paymentHandler.Id,
                Attributes           = new AttributeData[0],
                CurrencyCode         = order.Currency,
                TransactionReference = order.Number,
                Amount = order.Total
            };

            paymentTransaction = paymentHandler.AmendPaymentTransaction(paymentTransaction, publicOrderContext.PaymentData);

            if (paymentTransaction == null)
            {
                throw new InvalidOperationException("PaymentDataHandler must return a non-null payment transaction from AmendTransaction.");
            }

            foreach (var handler in transactionDataHandlers)
            {
                paymentTransaction = handler.AmendPaymentTransaction(paymentTransaction, publicOrderContext);

                if (paymentTransaction == null)
                {
                    throw new InvalidOperationException("ExtraTransactionDataHandlers must return a non-null payment transaction from AmendTransaction.");
                }
            }

            PublicPaymentTransaction createdTransaction;

            try
            {
                createdTransaction = BillingApi.MakePayment(paymentTransaction);
            }
            catch (SoapException ex)
            {
                logger.LogException(ex, "MakePayment failed.");

                return(urlProvider.FailureUrl);
            }

            if (createdTransaction.Status.ToUpper() == "IN_PROGRESS" && !string.IsNullOrEmpty(createdTransaction.RedirectUrl))
            {
                return(createdTransaction.RedirectUrl);
            }
            else if (createdTransaction.Status.ToUpper() == "OK")
            {
                return(urlProvider.SuccessUrl);
            }
            else if (createdTransaction.Status.ToUpper() == "FRAUD_DETECTED" || createdTransaction.Status.ToUpper() == "FAILED")
            {
                return(urlProvider.FailureUrl);
            }
            else
            {
                return(createdTransaction.ReturnUrl);
            }
        }
        public override PublicPaymentTransaction AmendPaymentTransaction(PublicPaymentTransaction transaction, PaymentData paymentData)
        {
            var urlHelper = new UrlHelper(HttpContext.Current.Request.RequestContext, RouteTable.Routes);
            var path = urlHelper.Action("Confirm", "PayPal");

            transaction.ReturnUrl = urlProvider.QualifiedUrl(path);
            transaction = SetCancelUrl(transaction, urlProvider.CancelUrl);

            return transaction;
        }
        public override PublicPaymentTransaction AmendPaymentTransaction(PublicPaymentTransaction transaction, PaymentData paymentData)
        {
            var urlHelper = new UrlHelper(HttpContext.Current.Request.RequestContext, RouteTable.Routes);
            var path      = urlHelper.Action("Confirm", "PayPal");

            transaction.ReturnUrl = urlProvider.QualifiedUrl(path);
            transaction           = SetCancelUrl(transaction, urlProvider.CancelUrl);

            return(transaction);
        }
Beispiel #9
0
        /// <summary>
        /// Creates the payment transaction.
        /// </summary>
        /// <param name="controller">The controller.</param>
        /// <param name="order">The order.</param>
        /// <param name="paidAmount">The paid amount.</param>
        /// <param name="returnUrl">The return URL.</param>
        /// <param name="transaction">The transaction.</param>
        /// <returns>Success of creation.</returns>
        public static string CreatePaymentTransaction(Controller controller, OrderServiceReferences.AtomiaBillingPublicService.PublicOrder order, decimal paidAmount, string returnUrl, PublicPaymentTransaction transaction)
        {
            // set the return URL, if redirection outside our application is required
            List<string> tmpList = returnUrl.TrimStart('/').Split('/').ToList();
            var currentUrl = controller.Url.RequestContext.HttpContext.Request.Url;
            string appUrl = currentUrl == null
                                ? controller.HttpContext.Application["OrderApplicationRawURL"].ToString()
                                : string.Format("{0}://{1}/", currentUrl.Scheme, currentUrl.Authority);

            if (appUrl.EndsWith(tmpList[0]))
            {
                tmpList.RemoveAt(0);
            }

            returnUrl = string.Empty;
            for (int i = 0; i < tmpList.Count; i++)
            {
                if (i < tmpList.Count - 1)
                {
                    returnUrl += tmpList[i] + '/';
                }
                else
                {
                    returnUrl += tmpList[i];
                }
            }

            transaction.ReturnUrl = appUrl.TrimEnd(new[] { '/' }) + '/' + returnUrl.TrimStart(new[] { '/' });

            var service = GeneralHelper.GetPublicOrderService(controller.HttpContext.ApplicationInstance.Context);
            PublicPaymentTransaction returnedTransaction = service.MakePayment(transaction);

            if (returnedTransaction.Status.ToUpper() == "IN_PROGRESS" && !string.IsNullOrEmpty(returnedTransaction.RedirectUrl))
            {
                return returnedTransaction.RedirectUrl;
            }

            if (returnedTransaction.Status.ToUpper() == "OK")
            {
                return string.Empty;
            }

            return returnedTransaction.Status.ToUpper() == "FRAUD_DETECTED"
                   || returnedTransaction.Status.ToUpper() == "FAILED"
                       ? controller.Url.Action("PaymentFailed")
                       : transaction.ReturnUrl;
        }
        /// <summary>
        /// Amend payment transaction with all request headers as custom attributes.
        /// </summary>
        public override PublicPaymentTransaction AmendPaymentTransaction(PublicPaymentTransaction paymentTransaction, PublicOrderContext orderContext)
        {
            var attributes = new List<AttributeData>(paymentTransaction.Attributes);
            var request = orderContext.ExtraData.OfType<HttpRequestBase>().FirstOrDefault();

            if (request != null)
            {
                foreach (var key in GuiPaymentPluginRequestHelper.RequestToCustomAttributes(request))
                {
                    attributes.Add(new AttributeData { Name = key.Key, Value = key.Value });
                }
            }

            paymentTransaction.Attributes = attributes.ToArray();

            return paymentTransaction;
        }
        public override PublicPaymentTransaction AmendPaymentTransaction(PublicPaymentTransaction transaction, PaymentData paymentData)
        {
            var form = paymentData.PaymentForm as CCPaymentForm;

            var attributes = new List<AttributeData>(transaction.Attributes);

            attributes.Add(new AttributeData { Name = "cc_number", Value = form.CardNumber });
            attributes.Add(new AttributeData { Name = "cc_name", Value = form.CardOwner });
            attributes.Add(new AttributeData { Name = "ccv", Value = form.CardSecurityCode }); // wrong abbreviation "ccv" is expected.
            attributes.Add(new AttributeData { Name = "expires_month", Value = form.ExpiresMonth.ToString() });
            attributes.Add(new AttributeData { Name = "expires_year", Value = form.ExpiresYear.ToString() });

            transaction.Attributes = attributes.ToArray();

            transaction.ReturnUrl = urlProvider.DefaultPaymentUrl;
            transaction = SetCancelUrl(transaction, urlProvider.CancelUrl);

            return transaction;
        }
        /// <summary>
        /// Amend payment transaction with all request headers as custom attributes.
        /// </summary>
        public override PublicPaymentTransaction AmendPaymentTransaction(PublicPaymentTransaction paymentTransaction, PublicOrderContext orderContext)
        {
            var attributes = new List <AttributeData>(paymentTransaction.Attributes);
            var request    = orderContext.ExtraData.OfType <HttpRequestBase>().FirstOrDefault();

            if (request != null)
            {
                foreach (var key in GuiPaymentPluginRequestHelper.RequestToCustomAttributes(request))
                {
                    attributes.Add(new AttributeData {
                        Name = key.Key, Value = key.Value
                    });
                }
            }

            paymentTransaction.Attributes = attributes.ToArray();

            return(paymentTransaction);
        }
        /// <summary>
        /// Amend payment transaction with payment profile attributes
        /// </summary>
        public override PublicPaymentTransaction AmendPaymentTransaction(PublicPaymentTransaction paymentTransaction, PublicOrderContext orderContext)
        {
            var paymentData = orderContext.PaymentData;

            if (paymentData.SaveCcInfo)
            {
                var attributes = new List<AttributeData>(paymentTransaction.Attributes);

                attributes.Add(new AttributeData { Name = "cc_saveccinfo", Value = "true" });

                if (paymentData.AutoPay)
                {
                    attributes.Add(new AttributeData { Name = "cc_autopay", Value = "true"  });
                }

                paymentTransaction.Attributes = attributes.ToArray();
            }

            return paymentTransaction;
        }
        /// <summary>
        /// Helper to set "CancelUrl" custom attribute on payment transaction.
        /// </summary>
        /// <param name="paymentTransaction">The payment transaction to add cancel url to</param>
        /// <param name="cancelUrl">The cancel url to add</param>
        /// <returns>The amended payment transaction</returns>
        protected PublicPaymentTransaction SetCancelUrl(PublicPaymentTransaction paymentTransaction, string cancelUrl)
        {
            var cancelAttribute = paymentTransaction.Attributes.FirstOrDefault(item => item.Name == "CancelUrl");

            if (cancelAttribute != null)
            {
                cancelAttribute.Value = cancelUrl;
            }
            else
            {
                var transactionAttributes = new List<AttributeData>(paymentTransaction.Attributes);
                transactionAttributes.Add(new AttributeData
                {
                    Name = "CancelUrl",
                    Value = cancelUrl
                });

                paymentTransaction.Attributes = transactionAttributes.ToArray();
            }

            return paymentTransaction;
        }
        /// <summary>
        /// Helper to set "CancelUrl" custom attribute on payment transaction.
        /// </summary>
        /// <param name="paymentTransaction">The payment transaction to add cancel url to</param>
        /// <param name="cancelUrl">The cancel url to add</param>
        /// <returns>The amended payment transaction</returns>
        protected PublicPaymentTransaction SetCancelUrl(PublicPaymentTransaction paymentTransaction, string cancelUrl)
        {
            var cancelAttribute = paymentTransaction.Attributes.FirstOrDefault(item => item.Name == "CancelUrl");

            if (cancelAttribute != null)
            {
                cancelAttribute.Value = cancelUrl;
            }
            else
            {
                var transactionAttributes = new List <AttributeData>(paymentTransaction.Attributes);
                transactionAttributes.Add(new AttributeData
                {
                    Name  = "CancelUrl",
                    Value = cancelUrl
                });

                paymentTransaction.Attributes = transactionAttributes.ToArray();
            }

            return(paymentTransaction);
        }
        /// <summary>
        /// Amend payment transaction with payment profile attributes
        /// </summary>
        public override PublicPaymentTransaction AmendPaymentTransaction(PublicPaymentTransaction paymentTransaction, PublicOrderContext orderContext)
        {
            var paymentData = orderContext.PaymentData;

            if (paymentData.SaveCcInfo)
            {
                var attributes = new List <AttributeData>(paymentTransaction.Attributes);

                attributes.Add(new AttributeData {
                    Name = "cc_saveccinfo", Value = "true"
                });

                if (paymentData.AutoPay)
                {
                    attributes.Add(new AttributeData {
                        Name = "cc_autopay", Value = "true"
                    });
                }

                paymentTransaction.Attributes = attributes.ToArray();
            }

            return(paymentTransaction);
        }
        /// <summary>
        /// Finishes the payment.
        /// </summary>
        /// <param name="transaction">The transaction.</param>
        /// <returns>Action result.</returns>
        private ActionResult FinishPayment(PublicPaymentTransaction transaction)
        {
            PublicPaymentTransaction finishedTransaction = null;

            try
            {
                AtomiaBillingPublicService service = GeneralHelper.GetPublicOrderService(this.HttpContext.ApplicationInstance.Context);
                service.UpdatePaymentTransactionData(
                    transaction.TransactionId,
                    transaction.Status,
                    transaction.StatusCode,
                    transaction.StatusCodeDescription,
                    transaction.Attributes.Select(a => new NameValue { Name = a.Name, Value = a.Value }).ToArray());
                finishedTransaction = service.FinishPayment(transaction.TransactionId);
            }
            catch (Exception ex)
            {
                OrderPageLogger.LogOrderPageException(ex);
            }

            if (finishedTransaction == null)
            {
                // error: transaction does not exist
                throw new ArgumentException("Transcation could not be finished.");
            }

            CultureInfo locale = CultureInfo.CreateSpecificCulture("en-US");
            return this.RedirectToAction(
                "Payment",
                "PublicOrder",
                new
                {
                    amount = transaction.Amount.ToString(locale),
                    transactionReference = finishedTransaction.TransactionReference,
                    transactionReferenceType = 0,
                    status = finishedTransaction.Status
                });
        }
Beispiel #18
0
        /// <summary>
        /// Fills the payment transaction for invoice.
        /// </summary>
        /// <param name="order">The order.</param>
        /// <param name="request">The request.</param>
        /// <param name="paidAmount">The paid amount.</param>
        /// <param name="paymentMethod">The payment method.</param>
        /// <returns>PaymentTransaction object</returns>
        public static PublicPaymentTransaction FillPaymentTransactionForOrder(OrderServiceReferences.AtomiaBillingPublicService.PublicOrder order, HttpRequestBase request, decimal paidAmount, string paymentMethod)
        {
            // Fill transaction
            var paymentTransaction = new PublicPaymentTransaction { GuiPluginName = paymentMethod };
            List<AttributeData> attrData = new List<AttributeData>();
            foreach (var key in GuiPaymentPluginRequestHelper.RequestToCustomAttributes(request))
            {
                attrData.Add(new AttributeData { Name = key.Key, Value = key.Value });
            }

            paymentTransaction.Attributes = attrData.ToArray();
            paymentTransaction.CurrencyCode = order.Currency;
            paymentTransaction.TransactionReference = order.Number;
            paymentTransaction.Amount = paidAmount;

            if (paymentTransaction.Amount <= decimal.Zero)
            {
                throw new Exception(String.Format("Total:{0}, paidAmmount:{1}, OrderNumber:{2}", order.Total, paidAmount, order.Number));
            }

            return paymentTransaction;
        }
Beispiel #19
0
 public virtual PublicPaymentTransaction MakePayment(PublicPaymentTransaction paymentTransaction)
 {
     return(service.MakePayment(paymentTransaction));
 }
 /// <summary>
 /// Amend payment transaction with order data.
 /// </summary>
 /// <param name="paymentTransaction">The payment transaction to amend</param>
 /// <param name="orderContext">The order data</param>
 /// <returns>The amended transaction</returns>
 public abstract PublicPaymentTransaction AmendPaymentTransaction(PublicPaymentTransaction paymentTransaction, PublicOrderContext orderContext);
 /// <summary>
 /// Amend payment transaction with payment method specific attributes.
 /// Typical is to set ReturnUrl on transaction and add CancelUrl to attributes.
 /// </summary>
 /// <param name="transaction">The transaction to amend</param>
 public virtual PublicPaymentTransaction AmendPaymentTransaction(PublicPaymentTransaction paymentTransaction, PaymentData paymentData)
 {
     return(paymentTransaction);
 }
 public virtual PublicPaymentTransaction MakePayment(PublicPaymentTransaction paymentTransaction)
 {
     return service.MakePayment(paymentTransaction);
 }
 /// <summary>
 /// Amend payment transaction with payment method specific attributes.
 /// Typical is to set ReturnUrl on transaction and add CancelUrl to attributes.
 /// </summary>
 /// <param name="transaction">The transaction to amend</param>
 public virtual PublicPaymentTransaction AmendPaymentTransaction(PublicPaymentTransaction paymentTransaction, PaymentData paymentData)
 {
     return paymentTransaction;
 }
Beispiel #24
0
 /// <summary>
 /// Amend payment transaction with order data.
 /// </summary>
 /// <param name="paymentTransaction">The payment transaction to amend</param>
 /// <param name="orderContext">The order data</param>
 /// <returns>The amended transaction</returns>
 public abstract PublicPaymentTransaction AmendPaymentTransaction(PublicPaymentTransaction paymentTransaction, PublicOrderContext orderContext);
        private ActionResult FinishPayment(PublicPaymentTransaction transaction)
        {
            billingApi.UpdatePaymentTransactionData(
                transaction.TransactionId,
                transaction.Status,
                transaction.StatusCode,
                transaction.StatusCodeDescription,
                transaction.Attributes.Select(a => new NameValue { Name = a.Name, Value = a.Value }).ToArray());

            var finishedTransaction = billingApi.FinishPayment(transaction.TransactionId);
            
            if (finishedTransaction == null)
            {
                // error: transaction does not exist
                throw new ArgumentException("Transaction could not be finished.");
            }

            var status = finishedTransaction.Status;

            if (status.ToUpper() == "OK" || status.ToUpper() == "IN_PROGRESS")
            {
                return Redirect(urlProvider.SuccessUrl);
            }

            return Redirect(urlProvider.FailureUrl);
        }