/// <summary>
        /// Gets all TransactionPayments by Member identifier
        /// </summary>
        /// <param name="MemberId">Member identifier</param>
        /// <returns>TransactionPayment collection</returns>
        public List <TransactionPayment> GetTransactionPaymentsByMemberId(long memberId)
        {
            List <TransactionPayment> lstTransactionPayment = new List <TransactionPayment>();
            List <Transaction>        lstTransaction;

            using (var dba = new BetEXDataContainer())
            {
                lstTransaction = dba.Transactions.Where(w => w.MemberId == memberId).ToList();
            }
            if (lstTransaction != null && lstTransaction.Count > 0)
            {
                foreach (var transaction in lstTransaction)
                {
                    TransactionPayment transactionPayment = new TransactionPayment();
                    transactionPayment.TransactionPaymentId   = transaction.ID;
                    transactionPayment.TransactionPaymentType = transaction.Type;
                    transactionPayment.MemberId = transaction.MemberId;
                    transactionPayment.MemberIP = transaction.MemberIP;
                    transactionPayment.TransactionPaymentTotal    = transaction.Amount;
                    transactionPayment.TransactionPaymentStatusId = transaction.Status;
                    transactionPayment.PaymentMethodId            = transaction.PaymentMenthodID;
                    transactionPayment.MemberEmail          = transaction.MemberEmail;
                    transactionPayment.TransactionIDRespone = transaction.ResponeTranId != null ? transaction.ResponeTranId.Value : 0;
                    lstTransactionPayment.Add(transactionPayment);
                }
            }
            return(lstTransactionPayment);
        }
        public ActionResult About(FormCollection collection, byte id)
        {
            string message = string.Empty;
            long transactionPaymentId = 0;
            TransactionPayment transactionPayment = new TransactionPayment();

            if (id != 1)
            {
                transactionPayment = IoC.Resolve<ITransactionPaymentService>().GetTransactionPaymentByUserId(1);
                transactionPayment.TransactionPaymentType = id;
                transactionPayment.MemberIP = Request.UserHostAddress;
                transactionPayment.RecurringTotalCycles = 1;
                transactionPayment.RecurringCycleLength = 7;
            }
            else
            {
                transactionPayment.TransactionPaymentType = id;
                transactionPayment.MemberId = 1;
                transactionPayment.MemberIP = Request.UserHostAddress;
                transactionPayment.MemberEmail = transactionPayment.Customer.Email1;
                transactionPayment.TransactionPaymentTotal = collection["Amount"].ToDecimal();
                transactionPayment.TransactionPaymentStatusId = (int)PaymentStatusEnum.Authorized;
                transactionPayment.PaymentMethodId = 1;
            }

            message = IoC.Resolve<ITransactionPaymentService>().PlaceTransactionPayment(transactionPayment, out transactionPaymentId);

            ViewBag.Message = message;
            return View();
        }
        /// <summary>
        /// Gets last TransactionPayment by userID
        /// </summary>
        /// <param name="UserId">The UserId identifier</param>
        /// <returns>TransactionPayment</returns>
        public TransactionPayment GetTransactionPaymentByUserId(long UserId)
        {
            TransactionPayment transactionPayment = new TransactionPayment();
            Transaction        transaction        = new Transaction();

            using (var dba = new BetEXDataContainer())
            {
                byte type            = (byte)1;
                var  listTransaction = dba.Transactions.Where(w => w.MemberId == UserId && w.Type == type).OrderByDescending(z => z.Amount).ToList();
                if (listTransaction != null)
                {
                    transaction = listTransaction[0];
                }
            }
            if (transaction != null)
            {
                transactionPayment.TransactionPaymentId   = transaction.ID;
                transactionPayment.TransactionPaymentType = transaction.Type;
                transactionPayment.MemberId                   = transaction.MemberId;
                transactionPayment.MemberIP                   = transaction.MemberIP;
                transactionPayment.TransactionIDRespone       = transaction.ResponeTranId != null?transaction.ResponeTranId.Value:0;
                transactionPayment.TransactionPaymentTotal    = transaction.Amount;
                transactionPayment.TransactionPaymentStatusId = transaction.Status;
                transactionPayment.PaymentMethodId            = transaction.PaymentMenthodID;
                transactionPayment.MemberEmail                = transaction.MemberEmail;
            }
            return(transactionPayment);
        }
        /// <summary>
        /// Cancels recurring payment
        /// </summary>
        /// <param name="transactionPayment">transactionPayment</param>
        /// <param name="cancelPaymentResult">Cancel payment result</param>
        public void CancelRecurringPayment(TransactionPayment transactionPayment, ref CancelPaymentResult cancelPaymentResult)
        {
            if (transactionPayment.TransactionPaymentTotal == decimal.Zero)
                return;

            var paymentMethod = GetPaymentMethodById(transactionPayment.PaymentMethodId);
            if (paymentMethod == null)
                throw new Exception("Payment method couldn't be loaded");
            var iPaymentMethod = Activator.CreateInstance(Type.GetType(paymentMethod.ClassName)) as IPaymentMethod;
            iPaymentMethod.CancelRecurringPayment(transactionPayment, ref cancelPaymentResult);
        }
        /// <summary>
        /// Post process payment (payment gateways that require redirecting)
        /// </summary>
        /// <param name="transactionPayment">transactionPayment</param>
        /// <returns>The error status, or String.Empty if no errors</returns>
        public string PostProcessPayment(TransactionPayment transactionPayment)
        {
            var paymentMethod = GetPaymentMethodById(transactionPayment.PaymentMethodId);

            if (paymentMethod == null)
            {
                throw new Exception("Payment method couldn't be loaded");
            }
            var iPaymentMethod = Activator.CreateInstance(Type.GetType(paymentMethod.ClassName)) as IPaymentMethod;

            return(iPaymentMethod.PostProcessPayment(transactionPayment));
        }
        /// <summary>
        /// Voids payment
        /// </summary>
        /// <param name="transactionPayment">transactionPayment</param>
        /// <param name="cancelPaymentResult">Cancel payment result</param>
        public void Void(TransactionPayment transactionPayment, ref CancelPaymentResult cancelPaymentResult)
        {
            var paymentMethod = GetPaymentMethodById(transactionPayment.PaymentMethodId);

            if (paymentMethod == null)
            {
                throw new Exception("Payment method couldn't be loaded");
            }
            var iPaymentMethod = Activator.CreateInstance(Type.GetType(paymentMethod.ClassName)) as IPaymentMethod;

            iPaymentMethod.Void(transactionPayment, ref cancelPaymentResult);
        }
        /// <summary>
        /// Cancels recurring payment
        /// </summary>
        /// <param name="transactionPayment">transactionPayment</param>
        /// <param name="cancelPaymentResult">Cancel payment result</param>
        public void CancelRecurringPayment(TransactionPayment transactionPayment, ref CancelPaymentResult cancelPaymentResult)
        {
            if (transactionPayment.TransactionPaymentTotal == decimal.Zero)
            {
                return;
            }

            var paymentMethod = GetPaymentMethodById(transactionPayment.PaymentMethodId);

            if (paymentMethod == null)
            {
                throw new Exception("Payment method couldn't be loaded");
            }
            var iPaymentMethod = Activator.CreateInstance(Type.GetType(paymentMethod.ClassName)) as IPaymentMethod;

            iPaymentMethod.CancelRecurringPayment(transactionPayment, ref cancelPaymentResult);
        }
 /// <summary>
 /// Process recurring payments
 /// </summary>
 /// <param name="transactionPayment">transactionPayment required for an order processing</param>
 /// <param name="customer">Customer</param>
 /// <param name="orderGuid">Unique order identifier</param>
 /// <param name="processPaymentResult">Process payment result</param>
 public void ProcessRecurringPayment(TransactionPayment transactionPayment, Guid transactionPaymentGuid, ref ProcessPaymentResult processPaymentResult)
 {
     if (transactionPayment.TransactionPaymentTotal == decimal.Zero)
     {
         processPaymentResult.Error         = string.Empty;
         processPaymentResult.FullError     = string.Empty;
         processPaymentResult.PaymentStatus = PaymentStatusEnum.Paid;
     }
     else
     {
         var paymentMethod = GetPaymentMethodById(transactionPayment.PaymentMethodId);
         if (paymentMethod == null)
         {
             throw new Exception("Payment method couldn't be loaded");
         }
         var iPaymentMethod = Activator.CreateInstance(Type.GetType(paymentMethod.ClassName)) as IPaymentMethod;
         iPaymentMethod.ProcessRecurringPayment(transactionPayment, transactionPaymentGuid, ref processPaymentResult);
     }
 }
        /// <summary>
        /// Gets an TransactionPayment
        /// </summary>
        /// <param name="TransactionPaymentId">The TransactionPayment identifier</param>
        /// <returns>TransactionPayment</returns>
        public TransactionPayment GetTransactionPaymentById(long transactionPaymentId)
        {
            TransactionPayment transactionPayment = new TransactionPayment();
            Transaction        transaction;

            using (var dba = new BetEXDataContainer())
            {
                transaction = dba.Transactions.Where(w => w.ID == transactionPaymentId).SingleOrDefault();
            }
            if (transaction != null)
            {
                transactionPayment.TransactionPaymentId   = transactionPaymentId;
                transactionPayment.TransactionPaymentType = transaction.Type;
                transactionPayment.MemberId = transaction.MemberId;
                transactionPayment.MemberIP = transaction.MemberIP;
                transactionPayment.TransactionPaymentTotal    = transaction.Amount;
                transactionPayment.TransactionPaymentStatusId = transaction.Status;
                transactionPayment.PaymentMethodId            = transaction.PaymentMenthodID;
                transactionPayment.TransactionIDRespone       = transaction.ResponeTranId != null? transaction.ResponeTranId.Value:0;
                transactionPayment.MemberEmail = transaction.MemberEmail;
            }
            return(transactionPayment);
        }
        /// <summary>
        /// Inserts an TransactionPayment
        /// </summary>
        /// <param name="TransactionPayment">TransactionPayment</param>
        public void InsertTransactionPayment(TransactionPayment transactionPayment)
        {
            if (transactionPayment == null)
            {
                throw new ArgumentNullException("transactionPayment");
            }

            Transaction transaction = new Transaction();

            transaction.Type             = transactionPayment.TransactionPaymentType;
            transaction.Amount           = transactionPayment.TransactionPaymentTotal;
            transaction.Status           = transactionPayment.TransactionPaymentStatusId;
            transaction.MemberId         = transactionPayment.MemberId;
            transaction.MemberIP         = transactionPayment.MemberIP;
            transaction.MemberEmail      = transactionPayment.MemberEmail;
            transaction.ResponeTranId    = transactionPayment.TransactionIDRespone;
            transaction.PaymentMenthodID = transactionPayment.PaymentMethodId;
            transaction.AddedDate        = DateTime.Now;
            transaction.ModifyDate       = DateTime.Now;

            _context.AddToTransactions(transaction);
            _context.SaveChanges();
        }
        /// <summary>
        /// Updates the TransactionPayment
        /// </summary>
        /// <param name="TransactionPayment">The TransactionPayment</param>
        public void UpdateTransactionPayment(TransactionPayment transactionPayment)
        {
            if (transactionPayment == null)
            {
                throw new ArgumentNullException("transactionPayment");
            }

            Transaction transaction = new Transaction();

            transaction = _context.Transactions.Where(w => w.ID == transactionPayment.TransactionPaymentId).SingleOrDefault();
            if (transaction != null)
            {
                transaction.ID               = transactionPayment.TransactionPaymentId;
                transaction.Type             = transactionPayment.TransactionPaymentType;
                transaction.Amount           = transactionPayment.TransactionPaymentTotal;
                transaction.Status           = transactionPayment.TransactionPaymentStatusId;
                transaction.MemberId         = transactionPayment.MemberId;
                transaction.MemberIP         = transactionPayment.MemberIP;
                transaction.MemberEmail      = transactionPayment.MemberEmail;
                transaction.PaymentMenthodID = transactionPayment.PaymentMethodId;
                transaction.ModifyDate       = DateTime.Now;
                _context.SaveChanges();
            }
        }
 public bool CanRefundOffline(TransactionPayment transactionPayment)
 {
     throw new NotImplementedException();
 }
        /// <summary>
        /// Updates the TransactionPayment
        /// </summary>
        /// <param name="TransactionPayment">The TransactionPayment</param>
        public void UpdateTransactionPayment(TransactionPayment transactionPayment)
        {
            if (transactionPayment == null)
                throw new ArgumentNullException("transactionPayment");

            Transaction transaction = new Transaction();
            transaction = _context.Transactions.Where(w => w.ID == transactionPayment.TransactionPaymentId).SingleOrDefault();
            if (transaction != null)
            {
                transaction.ID = transactionPayment.TransactionPaymentId;
                transaction.Type = transactionPayment.TransactionPaymentType;
                transaction.Amount = transactionPayment.TransactionPaymentTotal;
                transaction.Status = transactionPayment.TransactionPaymentStatusId;
                transaction.MemberId = transactionPayment.MemberId;
                transaction.MemberIP = transactionPayment.MemberIP;
                transaction.MemberEmail = transactionPayment.MemberEmail;
                transaction.PaymentMenthodID = transactionPayment.PaymentMethodId;
                transaction.ModifyDate = DateTime.Now;
                _context.SaveChanges();
            }
        }
        /// <summary>
        /// Places an order
        /// </summary>
        /// <param name="transactionPayment">Payment info</param>
        /// <param name="customer">Customer</param>
        /// <param name="orderGuid">Order GUID to use</param>
        /// <param name="orderId">Order identifier</param>
        /// <returns>The error status, or String.Empty if no errors</returns>
        public string PlaceTransactionPayment(TransactionPayment transactionPayment,
            Guid transactionPaymentGuid, out long TransactionPaymentId)
        {
            TransactionPaymentId = 0;
            string outMessage = string.Empty;
            var processPaymentResult = new ProcessPaymentResult();
            var customerService = IoC.Resolve<ICustomerService>();
            var paymentService = IoC.Resolve<IPaymentService>();

            try
            {
                if (!CommonHelper.IsValidEmail(transactionPayment.Customer.Email1))
                {
                    throw new Exception("Email is not valid");
                }

                if (transactionPayment == null)
                    throw new ArgumentNullException("transactionPayment");

                //skip payment workflow if order total equals zero
                PaymentMethod paymentMethod = null;
                string paymentMethodName = string.Empty;
                paymentMethod = paymentService.GetPaymentMethodById(transactionPayment.PaymentMethodId);
                if (paymentMethod == null)
                    throw new Exception("Payment method couldn't be loaded");
                paymentMethodName = paymentMethod.Name;

                //recurring or standard
                bool isRecurring = false;
                if (transactionPayment.TransactionPaymentType == 2)
                    isRecurring = true;
                //process payment
                if (!transactionPayment.IsRecurringPayment)
                {
                    if (isRecurring)
                    {
                        paymentService.ProcessRecurringPayment(transactionPayment, transactionPaymentGuid, ref processPaymentResult);
                        #region tempcode
                        //recurring cart
                        //var recurringPaymentType = paymentService.SupportRecurringPayments(transactionPayment.PaymentMethodId);
                        //switch (recurringPaymentType)
                        //{
                        //    case RecurringPaymentTypeEnum.NotSupported:
                        //        throw new Exception("Recurring payments are not supported by selected payment method");
                        //    case RecurringPaymentTypeEnum.Manual:
                        //    case RecurringPaymentTypeEnum.Automatic:
                        //        paymentService.ProcessRecurringPayment(transactionPayment, transactionPaymentGuid, ref processPaymentResult);
                        //        break;
                        //    default:
                        //        throw new Exception("Not supported recurring payment type");
                        //}
                        #endregion
                    }
                    else
                    {
                        //standard cart
                        paymentService.ProcessPayment(transactionPayment, transactionPaymentGuid, ref processPaymentResult);
                    }
                }
                else
                {
                    if (isRecurring)
                    {
                        paymentService.ProcessRecurringPayment(transactionPayment, transactionPaymentGuid, ref processPaymentResult);
                        #region tempcode
                        //var recurringPaymentType = paymentService.SupportRecurringPayments(transactionPayment.PaymentMethodId);
                        //switch (recurringPaymentType)
                        //{
                        //    case RecurringPaymentTypeEnum.NotSupported:
                        //        throw new Exception("Recurring payments are not supported by selected payment method");
                        //    case RecurringPaymentTypeEnum.Manual:
                        //paymentService.ProcessRecurringPayment(transactionPayment, transactionPaymentGuid, ref processPaymentResult);
                        //        break;
                        //    case RecurringPaymentTypeEnum.Automatic:
                        //        //payment is processed on payment gateway site
                        //        break;
                        //    default:
                        //        throw new Exception("Not supported recurring payment type");
                        //}
                        #endregion
                    }
                    else
                    {
                        throw new Exception("No recurring products");
                    }
                }

                //process transaction
                if (String.IsNullOrEmpty(processPaymentResult.Error))
                {
                    transactionPayment.TransactionIDRespone = processPaymentResult.AuthorizationTransactionCode.ToInt64();
                    InsertTransactionPayment(transactionPayment);
                    #region tempcode
                    //recurring orders
                    //if (!transactionPayment.IsRecurringPayment)
                    //{
                    //    if (isRecurring)
                    //    {
                    //        //create recurring payment
                    //        var rp = new RecurringPayment()
                    //        {
                    //            InitialTransactionPaymentId = transactionPayment.TransactionPaymentId,
                    //            CycleLength = transactionPayment.RecurringCycleLength,
                    //            CyclePeriod = transactionPayment.RecurringCyclePeriod,
                    //            TotalCycles = transactionPayment.RecurringTotalCycles,
                    //            StartDate = DateTime.UtcNow,
                    //            IsActive = true,
                    //            Deleted = false,
                    //            CreatedOn = DateTime.UtcNow
                    //        };
                    //        InsertRecurringPayment(rp);
                    //        var recurringPaymentType = paymentService.SupportRecurringPayments(transactionPayment.PaymentMethodId);
                    //        switch (recurringPaymentType)
                    //        {
                    //            case RecurringPaymentTypeEnum.NotSupported:
                    //                //not supported
                    //                break;
                    //            case RecurringPaymentTypeEnum.Manual:
                    //                //first payment
                    //                var rph = new RecurringPaymentHistory()
                    //                {
                    //                    RecurringPaymentId = rp.RecurringPaymentId,
                    //                    TransactionPaymentId = transactionPayment.TransactionPaymentId,
                    //                    CreatedOn = DateTime.UtcNow
                    //                };
                    //                InsertRecurringPaymentHistory(rph);
                    //                break;
                    //            case RecurringPaymentTypeEnum.Automatic:
                    //                //will be created later (process is automated)
                    //                break;
                    //            default:
                    //                break;
                    //        }
                    //    }
                    //}
                    #endregion
                }
            }
            catch (Exception exc)
            {
                processPaymentResult.Error = exc.Message;
                processPaymentResult.FullError = exc.ToString();
            }
            if (!string.IsNullOrEmpty(processPaymentResult.Error))
                outMessage = processPaymentResult.Error;
            else
                outMessage = processPaymentResult.AuthorizationTransactionCode;
            return outMessage;
        }
 public bool IsReturnRequestAllowed(TransactionPayment transactionPayment)
 {
     throw new NotImplementedException();
 }
 /// <summary>
 /// Gets all TransactionPayments by Member identifier
 /// </summary>
 /// <param name="MemberId">Member identifier</param>
 /// <returns>TransactionPayment collection</returns>
 public List<TransactionPayment> GetTransactionPaymentsByMemberId(long memberId)
 {
     List<TransactionPayment> lstTransactionPayment = new List<TransactionPayment>();
     List<Transaction> lstTransaction;
     using (var dba = new BetEXDataContainer())
     {
         lstTransaction = dba.Transactions.Where(w => w.MemberId == memberId).ToList();
     }
     if (lstTransaction != null && lstTransaction.Count > 0)
     {
         foreach (var transaction in lstTransaction)
         {
             TransactionPayment transactionPayment = new TransactionPayment();
             transactionPayment.TransactionPaymentId = transaction.ID;
             transactionPayment.TransactionPaymentType = transaction.Type;
             transactionPayment.MemberId = transaction.MemberId;
             transactionPayment.MemberIP = transaction.MemberIP;
             transactionPayment.TransactionPaymentTotal = transaction.Amount;
             transactionPayment.TransactionPaymentStatusId = transaction.Status;
             transactionPayment.PaymentMethodId = transaction.PaymentMenthodID;
             transactionPayment.MemberEmail = transaction.MemberEmail;
             transactionPayment.TransactionIDRespone = transaction.ResponeTranId != null ? transaction.ResponeTranId.Value : 0;
             lstTransactionPayment.Add(transactionPayment);
         }
     }
     return lstTransactionPayment;
 }
 /// <summary>
 /// Gets an TransactionPayment
 /// </summary>
 /// <param name="TransactionPaymentId">The TransactionPayment identifier</param>
 /// <returns>TransactionPayment</returns>
 public TransactionPayment GetTransactionPaymentById(long transactionPaymentId)
 {
     TransactionPayment transactionPayment = new TransactionPayment();
     Transaction transaction;
     using (var dba = new BetEXDataContainer())
     {
         transaction = dba.Transactions.Where(w => w.ID == transactionPaymentId).SingleOrDefault();
     }
     if (transaction != null)
     {
         transactionPayment.TransactionPaymentId = transactionPaymentId;
         transactionPayment.TransactionPaymentType = transaction.Type;
         transactionPayment.MemberId = transaction.MemberId;
         transactionPayment.MemberIP = transaction.MemberIP;
         transactionPayment.TransactionPaymentTotal = transaction.Amount;
         transactionPayment.TransactionPaymentStatusId = transaction.Status;
         transactionPayment.PaymentMethodId = transaction.PaymentMenthodID;
         transactionPayment.TransactionIDRespone = transaction.ResponeTranId!=null? transaction.ResponeTranId.Value:0;
         transactionPayment.MemberEmail = transaction.MemberEmail;
     }
     return transactionPayment;
 }
        /// <summary>
        /// Places an order
        /// </summary>
        /// <param name="transactionPayment">Payment info</param>
        /// <param name="customer">Customer</param>
        /// <param name="orderGuid">Order GUID to use</param>
        /// <param name="orderId">Order identifier</param>
        /// <returns>The error status, or String.Empty if no errors</returns>
        public string PlaceTransactionPayment(TransactionPayment transactionPayment,
                                              Guid transactionPaymentGuid, out long TransactionPaymentId)
        {
            TransactionPaymentId = 0;
            string outMessage           = string.Empty;
            var    processPaymentResult = new ProcessPaymentResult();
            var    customerService      = IoC.Resolve <ICustomerService>();
            var    paymentService       = IoC.Resolve <IPaymentService>();

            try
            {
                if (!CommonHelper.IsValidEmail(transactionPayment.Customer.Email1))
                {
                    throw new Exception("Email is not valid");
                }

                if (transactionPayment == null)
                {
                    throw new ArgumentNullException("transactionPayment");
                }

                //skip payment workflow if order total equals zero
                PaymentMethod paymentMethod     = null;
                string        paymentMethodName = string.Empty;
                paymentMethod = paymentService.GetPaymentMethodById(transactionPayment.PaymentMethodId);
                if (paymentMethod == null)
                {
                    throw new Exception("Payment method couldn't be loaded");
                }
                paymentMethodName = paymentMethod.Name;

                //recurring or standard
                bool isRecurring = false;
                if (transactionPayment.TransactionPaymentType == 2)
                {
                    isRecurring = true;
                }
                //process payment
                if (!transactionPayment.IsRecurringPayment)
                {
                    if (isRecurring)
                    {
                        paymentService.ProcessRecurringPayment(transactionPayment, transactionPaymentGuid, ref processPaymentResult);
                        #region tempcode
                        //recurring cart
                        //var recurringPaymentType = paymentService.SupportRecurringPayments(transactionPayment.PaymentMethodId);
                        //switch (recurringPaymentType)
                        //{
                        //    case RecurringPaymentTypeEnum.NotSupported:
                        //        throw new Exception("Recurring payments are not supported by selected payment method");
                        //    case RecurringPaymentTypeEnum.Manual:
                        //    case RecurringPaymentTypeEnum.Automatic:
                        //        paymentService.ProcessRecurringPayment(transactionPayment, transactionPaymentGuid, ref processPaymentResult);
                        //        break;
                        //    default:
                        //        throw new Exception("Not supported recurring payment type");
                        //}
                        #endregion
                    }
                    else
                    {
                        //standard cart
                        paymentService.ProcessPayment(transactionPayment, transactionPaymentGuid, ref processPaymentResult);
                    }
                }
                else
                {
                    if (isRecurring)
                    {
                        paymentService.ProcessRecurringPayment(transactionPayment, transactionPaymentGuid, ref processPaymentResult);
                        #region tempcode
                        //var recurringPaymentType = paymentService.SupportRecurringPayments(transactionPayment.PaymentMethodId);
                        //switch (recurringPaymentType)
                        //{
                        //    case RecurringPaymentTypeEnum.NotSupported:
                        //        throw new Exception("Recurring payments are not supported by selected payment method");
                        //    case RecurringPaymentTypeEnum.Manual:
                        //paymentService.ProcessRecurringPayment(transactionPayment, transactionPaymentGuid, ref processPaymentResult);
                        //        break;
                        //    case RecurringPaymentTypeEnum.Automatic:
                        //        //payment is processed on payment gateway site
                        //        break;
                        //    default:
                        //        throw new Exception("Not supported recurring payment type");
                        //}
                        #endregion
                    }
                    else
                    {
                        throw new Exception("No recurring products");
                    }
                }


                //process transaction
                if (String.IsNullOrEmpty(processPaymentResult.Error))
                {
                    transactionPayment.TransactionIDRespone = processPaymentResult.AuthorizationTransactionCode.ToInt64();
                    InsertTransactionPayment(transactionPayment);
                    #region tempcode
                    //recurring orders
                    //if (!transactionPayment.IsRecurringPayment)
                    //{
                    //    if (isRecurring)
                    //    {
                    //        //create recurring payment
                    //        var rp = new RecurringPayment()
                    //        {
                    //            InitialTransactionPaymentId = transactionPayment.TransactionPaymentId,
                    //            CycleLength = transactionPayment.RecurringCycleLength,
                    //            CyclePeriod = transactionPayment.RecurringCyclePeriod,
                    //            TotalCycles = transactionPayment.RecurringTotalCycles,
                    //            StartDate = DateTime.UtcNow,
                    //            IsActive = true,
                    //            Deleted = false,
                    //            CreatedOn = DateTime.UtcNow
                    //        };
                    //        InsertRecurringPayment(rp);
                    //        var recurringPaymentType = paymentService.SupportRecurringPayments(transactionPayment.PaymentMethodId);
                    //        switch (recurringPaymentType)
                    //        {
                    //            case RecurringPaymentTypeEnum.NotSupported:
                    //                //not supported
                    //                break;
                    //            case RecurringPaymentTypeEnum.Manual:
                    //                //first payment
                    //                var rph = new RecurringPaymentHistory()
                    //                {
                    //                    RecurringPaymentId = rp.RecurringPaymentId,
                    //                    TransactionPaymentId = transactionPayment.TransactionPaymentId,
                    //                    CreatedOn = DateTime.UtcNow
                    //                };
                    //                InsertRecurringPaymentHistory(rph);
                    //                break;
                    //            case RecurringPaymentTypeEnum.Automatic:
                    //                //will be created later (process is automated)
                    //                break;
                    //            default:
                    //                break;
                    //        }
                    //    }
                    //}
                    #endregion
                }
            }
            catch (Exception exc)
            {
                processPaymentResult.Error     = exc.Message;
                processPaymentResult.FullError = exc.ToString();
            }
            if (!string.IsNullOrEmpty(processPaymentResult.Error))
            {
                outMessage = processPaymentResult.Error;
            }
            else
            {
                outMessage = processPaymentResult.AuthorizationTransactionCode;
            }
            return(outMessage);
        }
 public bool IsReturnRequestAllowed(TransactionPayment transactionPayment)
 {
     throw new NotImplementedException();
 }
 public bool CanVoid(TransactionPayment transactionPayment)
 {
     throw new NotImplementedException();
 }
 public bool CanPartiallyRefundOffline(TransactionPayment transactionPayment, decimal amountToRefund)
 {
     throw new NotImplementedException();
 }
 public bool CanRefundOffline(TransactionPayment transactionPayment)
 {
     throw new NotImplementedException();
 }
 public bool CanMarkTransactionPaymentAsAuthorized(TransactionPayment transactionPayment)
 {
     throw new NotImplementedException();
 }
        /// <summary>
        /// Process recurring payment
        /// </summary>
        /// <param name="paymentInfo">Payment info required for an betting processing</param>
        /// <param name="bettingGuid">Unique order identifier</param>
        /// <param name="processPaymentResult">Process payment result</param>
        public void ProcessRecurringPayment(TransactionPayment transactionPayment, Guid bettingGuid, ref ProcessPaymentResult processPaymentResult)
        {
            InitSettings();
            MerchantAuthenticationType authentication = PopulateMerchantAuthentication();
            if (!transactionPayment.IsRecurringPayment)
            {
                ARBSubscriptionType subscription = new ARBSubscriptionType();
                AuthorizeNet.net.authorize.api.CreditCardType creditCard = new AuthorizeNet.net.authorize.api.CreditCardType();

                subscription.name = bettingGuid.ToString();
                creditCard.cardNumber = transactionPayment.PaymentMenthod.CreditCardNumber;
                creditCard.expirationDate = transactionPayment.PaymentMenthod.CardExpirationYear + "-" + transactionPayment.PaymentMenthod.CardExpirationMonth; // required format for API is YYYY-MM
                creditCard.cardCode = transactionPayment.PaymentMenthod.CardCvv2;

                subscription.payment = new PaymentType();
                subscription.payment.Item = creditCard;
                subscription.billTo = new NameAndAddressType();
                subscription.billTo.firstName = transactionPayment.Customer.FirstName;
                subscription.billTo.lastName = transactionPayment.Customer.LastName;
                subscription.billTo.address = transactionPayment.Customer.Address;
                subscription.billTo.city = transactionPayment.Customer.City;
                subscription.billTo.zip = transactionPayment.Customer.PostalCode;
                subscription.customer = new CustomerType();
                subscription.customer.email = transactionPayment.Customer.Email1;
                subscription.customer.phoneNumber = transactionPayment.Customer.Telephone;
                subscription.order = new OrderType();
                subscription.order.description =Constant.Payment.STORENAME+" "+ "Recurring payment";

                // Create a subscription that is leng of specified occurrences and interval is amount of days ad runs

                subscription.paymentSchedule = new PaymentScheduleType();
                DateTime dtNow = DateTime.UtcNow;
                subscription.paymentSchedule.startDate = new DateTime(dtNow.Year, dtNow.Month, dtNow.Day);
                subscription.paymentSchedule.startDateSpecified = true;

                subscription.paymentSchedule.totalOccurrences = Convert.ToInt16(transactionPayment.RecurringTotalCycles);
                subscription.paymentSchedule.totalOccurrencesSpecified = true;

                subscription.amount = transactionPayment.TransactionPaymentTotal;
                subscription.amountSpecified = true;

                // Interval can't be updated once a subscription is created.
                subscription.paymentSchedule.interval = new PaymentScheduleTypeInterval();
                switch (transactionPayment.RecurringCyclePeriod)
                {
                    case (int)RecurringProductCyclePeriodEnum.Days:
                        subscription.paymentSchedule.interval.length = Convert.ToInt16(transactionPayment.RecurringCycleLength);
                        subscription.paymentSchedule.interval.unit = ARBSubscriptionUnitEnum.days;
                        break;
                    case (int)RecurringProductCyclePeriodEnum.Weeks:
                        subscription.paymentSchedule.interval.length = Convert.ToInt16(transactionPayment.RecurringCycleLength * 7);
                        subscription.paymentSchedule.interval.unit = ARBSubscriptionUnitEnum.days;
                        break;
                    case (int)RecurringProductCyclePeriodEnum.Months:
                        subscription.paymentSchedule.interval.length = Convert.ToInt16(transactionPayment.RecurringCycleLength);
                        subscription.paymentSchedule.interval.unit = ARBSubscriptionUnitEnum.months;
                        break;
                    case (int)RecurringProductCyclePeriodEnum.Years:
                        subscription.paymentSchedule.interval.length = Convert.ToInt16(transactionPayment.RecurringCycleLength * 12);
                        subscription.paymentSchedule.interval.unit = ARBSubscriptionUnitEnum.months;
                        break;
                    default:
                        throw new Exception("Not supported cycle period");
                }

                ARBCreateSubscriptionResponseType response = webService.ARBCreateSubscription(authentication, subscription);

                if (response.resultCode == MessageTypeEnum.Ok)
                {
                    processPaymentResult.SubscriptionTransactionId = response.subscriptionId.ToString();
                    processPaymentResult.AuthorizationTransactionCode = response.resultCode.ToString();
                    processPaymentResult.AuthorizationTransactionResult = string.Format("Approved ({0}: {1})", response.resultCode.ToString(), response.subscriptionId.ToString());
                }
                else
                {
                    processPaymentResult.Error = string.Format("Error processing recurring payment. {0}", GetErrors(response));
                    processPaymentResult.FullError = string.Format("Error processing recurring payment. {0}", GetErrors(response));
                }
            }
        }
 /// <summary>
 /// Cancels recurring payment
 /// </summary>
 /// <param name="transactionPayment">transactionPayment</param>
 /// <param name="cancelPaymentResult">Cancel payment result</param>        
 public void CancelRecurringPayment(TransactionPayment transactionPayment, ref CancelPaymentResult cancelPaymentResult)
 {
 }
        /// <summary>
        /// Places an TransactionPayment
        /// </summary>
        /// <param name="transactionPayment">Payment info</param>
        /// <param name="Member">Member</param>
        /// <param name="TransactionPaymentId">TransactionPayment identifier</param>
        /// <returns>The error status, or String.Empty if no errors</returns>
        public string PlaceTransactionPayment(TransactionPayment transactionPayment, out long TransactionPaymentId)
        {
            var TransactionGuid = Guid.NewGuid();

            return(PlaceTransactionPayment(transactionPayment, TransactionGuid, out TransactionPaymentId));
        }
        /// <summary>
        /// Process payment
        /// </summary>
        /// <param name="paymentInfo">Payment info required for an betting processing</param>
        /// <param name="orderGuid">Unique order identifier</param>
        /// <param name="processPaymentResult">Process payment result</param>
        public void ProcessPayment(TransactionPayment betting, Guid orderGuid, ref ProcessPaymentResult processPaymentResult)
        {
            InitSettings();
            TransactMode transactionMode = GetCurrentTransactionMode();
            WebClient webClient = new WebClient();
            NameValueCollection form = new NameValueCollection();
            form.Add("x_login", loginID);
            form.Add("x_tran_key", transactionKey);
            //if (useSandBox)
            //    form.Add("x_test_request", "TRUE");
            //else
                form.Add("x_test_request", "FALSE");

            form.Add("x_delim_data", "TRUE");
            form.Add("x_delim_char", "|");
            form.Add("x_encap_char", "");
            form.Add("x_version", APIVersion);
            form.Add("x_relay_response", "FALSE");
            form.Add("x_method", "CC");
            form.Add("x_currency_code", Constant.Payment.CURRENCYCODE);
            if (transactionMode == TransactMode.Authorize)
                form.Add("x_type", "AUTH_ONLY");
            else if (transactionMode == TransactMode.AuthorizeAndCapture)
                form.Add("x_type", "AUTH_CAPTURE");
            else
                throw new Exception("Not supported transaction mode");

            form.Add("x_amount",betting.TransactionPaymentTotal.ToString("0.00", CultureInfo.InvariantCulture));
            form.Add("x_card_num", betting.PaymentMenthod.CreditCardNumber);
            form.Add("x_exp_date", betting.PaymentMenthod.CardExpirationMonth +"/"+ betting.PaymentMenthod.CardExpirationYear);
            form.Add("x_card_code", betting.PaymentMenthod.CardCvv2);
            form.Add("x_first_name", betting.Customer.FirstName);
            form.Add("x_last_name", betting.Customer.LastName);
            form.Add("x_address", betting.Customer.Address);
            form.Add("x_city", betting.Customer.City);
            form.Add("x_email_customer ", betting.Customer.Email1);
            //if (paymentInfo.BillingAddress.StateProvince != null)
            //    form.Add("x_state", paymentInfo.BillingAddress.StateProvince.Abbreviation);
            form.Add("x_zip", betting.Customer.PostalCode);
            //if (paymentInfo.BillingAddress.Country != null)
            //    form.Add("x_country", paymentInfo.BillingAddress.Country.TwoLetterIsoCode);
            //20 chars maximum
            form.Add("x_invoice_num", orderGuid.ToString().Substring(0, 20));
            //form.Add("x_customer_ip", Request.UserHostAddress);

            string reply = null;
            Byte[] responseData = webClient.UploadValues(GetAuthorizeNETUrl(), form);
            reply = Encoding.ASCII.GetString(responseData);

            if (!String.IsNullOrEmpty(reply))
            {
                string[] responseFields = reply.Split('|');
                switch (responseFields[0])
                {
                    case "1":
                        processPaymentResult.AuthorizationTransactionCode = string.Format("{0},{1}", responseFields[6], responseFields[4]);
                        processPaymentResult.AuthorizationTransactionResult = string.Format("Approved ({0}: {1})", responseFields[2], responseFields[3]);
                        processPaymentResult.AVSResult = responseFields[5];
                        //responseFields[38];
                        if (transactionMode == TransactMode.Authorize)
                        {
                            processPaymentResult.PaymentStatus = PaymentStatusEnum.Authorized;
                        }
                        else
                        {
                            processPaymentResult.PaymentStatus = PaymentStatusEnum.Paid;
                        }
                        break;
                    case "2":
                        processPaymentResult.Error = string.Format("Declined ({0}: {1})", responseFields[2], responseFields[3]);
                        processPaymentResult.FullError = string.Format("Declined ({0}: {1})", responseFields[2], responseFields[3]);
                        break;
                    case "3":
                        processPaymentResult.Error = string.Format("Error: {0}", reply);
                        processPaymentResult.FullError = string.Format("Error: {0}", reply);
                        break;

                }
            }
            else
            {
                processPaymentResult.Error = "Authorize.NET unknown error";
                processPaymentResult.FullError = "Authorize.NET unknown error";
            }
        }
 /// <summary>
 /// Captures payment
 /// </summary>
 /// <param name="transactionPayment">transactionPayment</param>
 /// <param name="processPaymentResult">Process payment result</param>
 public void Capture(TransactionPayment transactionPayment, ref ProcessPaymentResult processPaymentResult)
 {
     throw new Exception("Capture method not supported");
 }
 /// <summary>
 /// Voids payment
 /// </summary>
 /// <param name="betting">betting</param>
 /// <param name="cancelPaymentResult">Cancel payment result</param>        
 public void Void(TransactionPayment transactionPayment, ref CancelPaymentResult cancelPaymentResult)
 {
     throw new Exception("Void method not supported");
 }
        /// <summary>
        /// Process payment
        /// </summary>
        /// <param name="transactionPayment">transactionPayment required for an betting processing</param>
        /// <param name="bettingGuid">Unique betting identifier</param>
        /// <param name="processPaymentResult">Process payment result</param>
        public void ProcessPayment(TransactionPayment transactionPayment,Guid bettingGuid, ref ProcessPaymentResult processPaymentResult)
        {
            #region tempcode
            //WebClient webClient = new WebClient();
            //NameValueCollection form = new NameValueCollection();
            //form.Add("MerchID", loginID);
            //form.Add("Pass", loginPass);
            //form.Add("TrType", "FALSE");
            //form.Add("CardNum", transactionPayment.PaymentMenthod.CreditCardNumber);
            //form.Add("CVV2", transactionPayment.PaymentMenthod.CardCvv2);
            //form.Add("ExpDay", "31");
            //form.Add("ExpMonth", transactionPayment.PaymentMenthod.CardExpirationMonth);
            //form.Add("ExpYear", transactionPayment.PaymentMenthod.CardExpirationYear);
            //form.Add("CardHName", transactionPayment.PaymentMenthod.NameOnCard);
            //form.Add("Amount", transactionPayment.TransactionPaymentTotal.ToString("0.00", CultureInfo.InvariantCulture));
            //form.Add("CurrencyCode", Constant.Payment.CURRENCYCODE);
            //form.Add("Addr", transactionPayment.Customer.Address);
            //form.Add("PostCode",transactionPayment.Customer.PostalCode);
            //form.Add("TransID", transactionPayment.TransactionPaymentId.ToString());
            //form.Add("UserIP",CommonHelper.GetRequestIP());
            //form.Add("UDF1", "Test 1");
            //form.Add("UDF2", "Test 1");
            //form.Add("UDF3", "Test 1");

            //string reply = null;
            //Byte[] responseData = webClient.UploadValues(GetApcPaymentUrl(), form);
            //reply = Encoding.ASCII.GetString(responseData);
            #endregion

            int transactionMode = (int)TransactMode.Authorization;
            string reply = webService.DoTransaction(loginID, loginPass, transactionMode.ToString(),
                transactionPayment.PaymentMenthod.CreditCardNumber, transactionPayment.PaymentMenthod.CardCvv2, "", transactionPayment.PaymentMenthod.CardExpirationMonth, transactionPayment.PaymentMenthod.CardExpirationYear,
                transactionPayment.PaymentMenthod.NameOnCard, transactionPayment.TransactionPaymentTotal.ToString("0.00", CultureInfo.InvariantCulture),
                Constant.Payment.CURRENCYCODENUMBER, transactionPayment.Customer.Address, transactionPayment.Customer.PostalCode, transactionPayment.TransactionPaymentId.ToString(),
                CommonHelper.GetRequestIP(), "Authorization 1", "Authorization 2", "Authorization 3");

            if (!String.IsNullOrEmpty(reply))
            {
                reply=reply.Replace("||","|");
                string[] responseFields = reply.Split('|');
                switch (responseFields[0])
                {
                    case "APPROVED":
                        processPaymentResult.AuthorizationTransactionCode = string.Format("{0}", responseFields[1]);
                        processPaymentResult.AuthorizationTransactionResult = string.Format("Approved ({0}: {1})", responseFields[2], responseFields[11]);
                        processPaymentResult.AVSResult = responseFields[0];
                        //responseFields[38];
                        if (transactionMode == (int)TransactMode.Authorization)
                        {
                            processPaymentResult.PaymentStatus = PaymentStatusEnum.Paid;
                        }
                        else
                        {
                            processPaymentResult.PaymentStatus = PaymentStatusEnum.Authorized;
                        }
                        break;
                    default:
                        processPaymentResult.Error = string.Format("Declined {0}", responseFields[0] + " " + transactionPayment.PaymentMenthod.CreditCardNumber);
                        processPaymentResult.FullError = string.Format("Declined {0}", responseFields[0] + " " + transactionPayment.PaymentMenthod.CreditCardNumber);
                        break;
                }
            }
            else
            {
                processPaymentResult.Error = "Unknown error";
                processPaymentResult.FullError = "Unknown error";
            }
        }
 /// <summary>
 /// Gets last TransactionPayment by userID
 /// </summary>
 /// <param name="UserId">The UserId identifier</param>
 /// <returns>TransactionPayment</returns>
 public TransactionPayment GetTransactionPaymentByUserId(long UserId)
 {
     TransactionPayment transactionPayment = new TransactionPayment();
     Transaction transaction=new Transaction();
     using (var dba = new BetEXDataContainer())
     {
         byte type = (byte)1;
         var listTransaction = dba.Transactions.Where(w => w.MemberId == UserId && w.Type == type).OrderByDescending(z=>z.Amount).ToList();
         if (listTransaction != null)
         {
             transaction = listTransaction[0];
         }
     }
     if (transaction != null)
     {
         transactionPayment.TransactionPaymentId = transaction.ID;
         transactionPayment.TransactionPaymentType = transaction.Type;
         transactionPayment.MemberId = transaction.MemberId;
         transactionPayment.MemberIP = transaction.MemberIP;
         transactionPayment.TransactionIDRespone = transaction.ResponeTranId!=null?transaction.ResponeTranId.Value:0;
         transactionPayment.TransactionPaymentTotal = transaction.Amount;
         transactionPayment.TransactionPaymentStatusId = transaction.Status;
         transactionPayment.PaymentMethodId = transaction.PaymentMenthodID;
         transactionPayment.MemberEmail = transaction.MemberEmail;
     }
     return transactionPayment;
 }
        /// <summary>
        /// Process recurring payment
        /// </summary>
        /// <param name="transactionPayment">transactionPayment required for an betting processing</param>
        /// <param name="bettingGuid">Unique betting identifier</param>
        /// <param name="processPaymentResult">Process payment result</param>
        public void ProcessRecurringPayment(TransactionPayment transactionPayment, Guid bettingGuid, ref ProcessPaymentResult processPaymentResult)
        {
            int transactionMode = (int)TransactMode.OriginalCredit;
            string reply = webService.DoTransaction(loginID, loginPass, transactionMode.ToString(),
                transactionPayment.PaymentMenthod.CreditCardNumber, transactionPayment.PaymentMenthod.CardCvv2, "", transactionPayment.PaymentMenthod.CardExpirationMonth, transactionPayment.PaymentMenthod.CardExpirationYear,
                transactionPayment.PaymentMenthod.NameOnCard, transactionPayment.TransactionPaymentTotal.ToString("0.00", CultureInfo.InvariantCulture),
                Constant.Payment.CURRENCYCODENUMBER, transactionPayment.Customer.Address, transactionPayment.Customer.PostalCode,transactionPayment.TransactionIDRespone.ToString(), //transactionPayment.TransactionPaymentId.ToString(),
                CommonHelper.GetRequestIP(), "Authorization 1", "Authorization 2", "Authorization 3");

            if (!String.IsNullOrEmpty(reply))
            {
                reply = reply.Replace("||", "|");
                string[] responseFields = reply.Split('|');
                switch (responseFields[0])
                {
                    case "CAPTURED":
                        processPaymentResult.AuthorizationTransactionCode = string.Format("{0}", responseFields[1]);
                        processPaymentResult.AuthorizationTransactionResult = string.Format("Approved ({0}: {1})", responseFields[2], responseFields[11]);
                        processPaymentResult.AVSResult = responseFields[0];
                        //responseFields[38];
                        if (transactionMode == (int)TransactMode.Authorization)
                        {
                            processPaymentResult.PaymentStatus = PaymentStatusEnum.Paid;
                        }
                        else
                        {
                            processPaymentResult.PaymentStatus = PaymentStatusEnum.Authorized;
                        }
                        break;
                    default:
                        processPaymentResult.Error = string.Format("Declined {0}", responseFields[0]);
                        processPaymentResult.FullError = string.Format("Declined {0}", responseFields[0]);
                        break;
                }
            }
            else
            {
                processPaymentResult.Error = "Unknown error";
                processPaymentResult.FullError = "Unknown error";
            }
        }
        /// <summary>
        /// Inserts an TransactionPayment
        /// </summary>
        /// <param name="TransactionPayment">TransactionPayment</param>
        public void InsertTransactionPayment(TransactionPayment transactionPayment)
        {
            if (transactionPayment == null)
                throw new ArgumentNullException("transactionPayment");

            Transaction transaction = new Transaction();
            transaction.Type = transactionPayment.TransactionPaymentType;
            transaction.Amount = transactionPayment.TransactionPaymentTotal;
            transaction.Status = transactionPayment.TransactionPaymentStatusId;
            transaction.MemberId = transactionPayment.MemberId;
            transaction.MemberIP = transactionPayment.MemberIP;
            transaction.MemberEmail = transactionPayment.MemberEmail;
            transaction.ResponeTranId = transactionPayment.TransactionIDRespone;
            transaction.PaymentMenthodID = transactionPayment.PaymentMethodId;
            transaction.AddedDate = DateTime.Now;
            transaction.ModifyDate = DateTime.Now;

            _context.AddToTransactions(transaction);
            _context.SaveChanges();
        }
 /// <summary>
 /// Post process payment (payment gateways that require redirecting)
 /// </summary>
 /// <param name="transactionPayment">transactionPayment</param>
 /// <returns>The error status, or String.Empty if no errors</returns>
 public string PostProcessPayment(TransactionPayment transactionPayment)
 {
     var paymentMethod = GetPaymentMethodById(transactionPayment.PaymentMethodId);
     if (paymentMethod == null)
         throw new Exception("Payment method couldn't be loaded");
     var iPaymentMethod = Activator.CreateInstance(Type.GetType(paymentMethod.ClassName)) as IPaymentMethod;
     return iPaymentMethod.PostProcessPayment(transactionPayment);
 }
 /// <summary>
 /// Places an TransactionPayment
 /// </summary>
 /// <param name="transactionPayment">Payment info</param>
 /// <param name="Member">Member</param>
 /// <param name="TransactionPaymentId">TransactionPayment identifier</param>
 /// <returns>The error status, or String.Empty if no errors</returns>
 public string PlaceTransactionPayment(TransactionPayment transactionPayment, out long TransactionPaymentId)
 {
     var TransactionGuid = Guid.NewGuid();
     return PlaceTransactionPayment(transactionPayment, TransactionGuid, out TransactionPaymentId);
 }
 /// <summary>
 /// Process recurring payments
 /// </summary>
 /// <param name="transactionPayment">transactionPayment required for an order processing</param>
 /// <param name="customer">Customer</param>
 /// <param name="orderGuid">Unique order identifier</param>
 /// <param name="processPaymentResult">Process payment result</param>
 public void ProcessRecurringPayment(TransactionPayment transactionPayment, Guid transactionPaymentGuid, ref ProcessPaymentResult processPaymentResult)
 {
     if (transactionPayment.TransactionPaymentTotal == decimal.Zero)
     {
         processPaymentResult.Error = string.Empty;
         processPaymentResult.FullError = string.Empty;
         processPaymentResult.PaymentStatus = PaymentStatusEnum.Paid;
     }
     else
     {
         var paymentMethod = GetPaymentMethodById(transactionPayment.PaymentMethodId);
         if (paymentMethod == null)
             throw new Exception("Payment method couldn't be loaded");
         var iPaymentMethod = Activator.CreateInstance(Type.GetType(paymentMethod.ClassName)) as IPaymentMethod;
         iPaymentMethod.ProcessRecurringPayment(transactionPayment, transactionPaymentGuid, ref processPaymentResult);
     }
 }
 public bool CanMarkTransactionPaymentAsAuthorized(TransactionPayment transactionPayment)
 {
     throw new NotImplementedException();
 }
 /// <summary>
 /// Voids payment
 /// </summary>
 /// <param name="transactionPayment">transactionPayment</param>
 /// <param name="cancelPaymentResult">Cancel payment result</param>
 public void Void(TransactionPayment transactionPayment, ref CancelPaymentResult cancelPaymentResult)
 {
     var paymentMethod = GetPaymentMethodById(transactionPayment.PaymentMethodId);
     if (paymentMethod == null)
         throw new Exception("Payment method couldn't be loaded");
     var iPaymentMethod = Activator.CreateInstance(Type.GetType(paymentMethod.ClassName)) as IPaymentMethod;
     iPaymentMethod.Void(transactionPayment, ref cancelPaymentResult);
 }
 public bool CanPartiallyRefundOffline(TransactionPayment transactionPayment, decimal amountToRefund)
 {
     throw new NotImplementedException();
 }
        public ActionResult Deposit(FormCollection collection)
        {
            string message = string.Empty;
            long transactionPaymentId = 0;
            long memberId = SessionManager.USER_ID;

            TransactionPayment transactionPayment = new TransactionPayment();
            transactionPayment.TransactionPaymentType = (int)Constant.TransactionType.DEPOSIT;
            transactionPayment.MemberId = memberId;
            transactionPayment.MemberIP = Request.UserHostAddress;
            transactionPayment.MemberEmail = transactionPayment.Customer.Email1;
            transactionPayment.TransactionPaymentTotal = collection["Amount"].ToDecimal();
            transactionPayment.TransactionPaymentStatusId = (int)PaymentStatusEnum.Authorized;
            transactionPayment.PaymentMethodId = 1;

            message = IoC.Resolve<ITransactionPaymentService>().PlaceTransactionPayment(transactionPayment, out transactionPaymentId);

            ViewBag.Message = message;
            return View();
        }
 public bool CanVoid(TransactionPayment transactionPayment)
 {
     throw new NotImplementedException();
 }
        /// <summary>
        /// Cancels recurring payment
        /// </summary>
        /// <param name="transactionPayment">transactionPayment</param>
        /// <param name="cancelPaymentResult">Cancel payment result</param>        
        public void CancelRecurringPayment(TransactionPayment transactionPayment, ref CancelPaymentResult cancelPaymentResult)
        {
            InitSettings();
            MerchantAuthenticationType authentication = PopulateMerchantAuthentication();
            long subscriptionID = 0;
            long.TryParse(cancelPaymentResult.SubscriptionTransactionId, out subscriptionID);
            ARBCancelSubscriptionResponseType response = webService.ARBCancelSubscription(authentication, subscriptionID);

            if (response.resultCode == MessageTypeEnum.Ok)
            {
                //ok
            }
            else
            {
                cancelPaymentResult.Error = "Error cancelling subscription, please contact customer support. " + GetErrors(response);
                cancelPaymentResult.FullError = "Error cancelling subscription, please contact customer support. " + GetErrors(response);
            }
        }
        public ActionResult Withdraw(FormCollection collection)
        {
            string message = string.Empty;
            long memberId = SessionManager.USER_ID;
            long transactionPaymentId = 0;
            if (IoC.Resolve<ITransactionPaymentService>().GetTransactionByUserId(memberId) != null)
            {
                message = Constant.Messagage.NOTRANSACTION;
            }
            else
            {
                TransactionPayment transactionPayment = new TransactionPayment();
                transactionPayment = IoC.Resolve<ITransactionPaymentService>().GetTransactionPaymentByUserId(memberId);
                transactionPayment.TransactionPaymentType = (int)Constant.TransactionType.WITHDRAW;
                transactionPayment.MemberIP = Request.UserHostAddress;
                transactionPayment.RecurringTotalCycles = 1;
                transactionPayment.RecurringCycleLength = 7;

                message = IoC.Resolve<ITransactionPaymentService>().PlaceTransactionPayment(transactionPayment, out transactionPaymentId);
            }
            ViewBag.Message = message;
            return View();
        }
        /// <summary>
        /// Captures payment
        /// </summary>
        /// <param name="betting">betting</param>
        /// <param name="processPaymentResult">Process payment result</param>
        public void Capture(TransactionPayment transactionPayment, ref ProcessPaymentResult processPaymentResult)
        {
            InitSettings();

            WebClient webClient = new WebClient();
            NameValueCollection form = new NameValueCollection();
            form.Add("x_login", loginID);
            form.Add("x_tran_key", transactionKey);
            if (useSandBox)
                form.Add("x_test_request", "TRUE");
            else
                form.Add("x_test_request", "FALSE");

            form.Add("x_delim_data", "TRUE");
            form.Add("x_delim_char", "|");
            form.Add("x_encap_char", "");
            form.Add("x_version", APIVersion);
            form.Add("x_relay_response", "FALSE");
            form.Add("x_method", "CC");
            form.Add("x_currency_code", Constant.Payment.CURRENCYCODE);
            form.Add("x_type", "PRIOR_AUTH_CAPTURE");

            form.Add("x_amount", transactionPayment.TransactionPaymentTotal.ToString("0.00", CultureInfo.InvariantCulture));
            string[] codes = processPaymentResult.AuthorizationTransactionCode.Split(',');
            //x_trans_id. When x_test_request (sandbox) is set to a positive response,
            //or when Test mode is enabled on the payment gateway, this value will be "0".
            form.Add("x_trans_id", codes[0]);

            string reply = null;
            Byte[] responseData = webClient.UploadValues(GetAuthorizeNETUrl(), form);
            reply = Encoding.ASCII.GetString(responseData);

            if (!String.IsNullOrEmpty(reply))
            {
                string[] responseFields = reply.Split('|');
                switch (responseFields[0])
                {
                    case "1":
                        processPaymentResult.AuthorizationTransactionCode = string.Format("{0},{1}", responseFields[6], responseFields[4]);
                        processPaymentResult.AuthorizationTransactionResult = string.Format("Approved ({0}: {1})", responseFields[2], responseFields[3]);
                        processPaymentResult.AVSResult = responseFields[5];
                        //responseFields[38];
                        processPaymentResult.PaymentStatus = PaymentStatusEnum.Paid;
                        break;
                    case "2":
                        processPaymentResult.Error = string.Format("Declined ({0}: {1})", responseFields[2], responseFields[3]);
                        processPaymentResult.FullError = string.Format("Declined ({0}: {1})", responseFields[2], responseFields[3]);
                        break;
                    case "3":
                        processPaymentResult.Error = string.Format("Error: {0}", reply);
                        processPaymentResult.FullError = string.Format("Error: {0}", reply);
                        break;
                }
            }
            else
            {
                processPaymentResult.Error = "Authorize.NET unknown error";
                processPaymentResult.FullError = "Authorize.NET unknown error";
            }
        }
 /// <summary>
 /// Process recurring payment
 /// </summary>
 /// <param name="transactionPayment">transactionPayment required for an betting processing</param>
 /// <param name="bettingGuid">Unique betting identifier</param>
 /// <param name="processPaymentResult">Process payment result</param>
 public void ProcessRecurringPayment(TransactionPayment transactionPayment, Guid bettingGuid, ref ProcessPaymentResult processPaymentResult)
 {
     throw new Exception("Recurring payments not supported");
 }
 /// <summary>
 /// Post process payment (payment gateways that require redirecting)
 /// </summary>
 /// <param name="betting">betting</param>
 /// <returns>The error status, or String.Empty if no errors</returns>
 public string PostProcessPayment(TransactionPayment transaction)
 {
     return string.Empty;
 }