예제 #1
0
        // POST: /TranAdmin/DoParsePs
        public ActionResult DoParsePs()
        {
            bool   isOk = false;
            string msg  = "";
            PayseraPaymentResponse resp = null;
            string r = String.Empty;

            try
            {
                string data = Request["data"];
                if (String.IsNullOrEmpty(data))
                {
                    throw new ArgumentNullException("data", "No data from PS is provided");
                }

                resp = Factory.PayseraBll.ParseData(data);
                r    = RenderPartialView("_PsResponsePartial", resp);
                isOk = true;
                msg  = "Response from PS is parserd";
            }
            catch (Exception ex)
            {
                isOk = false;
                msg  = ex.Message;
                resp = null;
            }

            return(Json(new
            {
                Status = isOk,
                Message = msg,
                Response = r
            }));
        }
        public void Test_User_Cancels_NonExisting_Transaction()
        {
            // OrderId from Paysera is same as PaySystemUid
            var resp = new PayseraPaymentResponse();

            resp.OrderId = Guid.NewGuid().ToString("N");

            _bll.CancelTransactionByUser(resp.OrderId);
        }
        public void Test_User_Cancels_Transaction_Empty_PaySystemUid()
        {
            // OrderId from Paysera is same as PaySystemUid
            var resp = new PayseraPaymentResponse();

            resp.OrderId = null;

            _bll.CancelTransactionByUser(resp.OrderId);
        }
        public void Test_Finish_Transaction_On_Bad_Status()
        {
            var resp = new PayseraPaymentResponse();

            resp.OrderId = Guid.NewGuid().ToString("N");
            _transactionDal.Setup(x => x.GetTransactionByPaySystemUid(It.IsAny <string>()))
            .Returns((string paySysUid) => new TransactionBdo
            {
                PaySystemUid  = paySysUid,
                PaymentStatus = PaymentStatusIds.WaitingForPayment
            });
            resp.Status = "0";

            var t = _bll.FinishTransaction(resp);

            Assert.AreNotEqual(PaymentStatusIds.PaidOk, t.PaymentStatus);
        }
        public void Test_FinishTransaction_Success()
        {
            _transactionDal.Setup(x => x.GetTransactionByPaySystemUid(It.IsAny <string>()))
            .Returns((string paySysUid) => new TransactionBdo
            {
                PaySystemUid  = paySysUid,
                PaymentStatus = PaymentStatusIds.WaitingForPayment
            });
            var resp = new PayseraPaymentResponse();

            resp.OrderId         = Guid.NewGuid().ToString("N");
            resp.Status          = "1";
            resp.PayAmount       = 543.21m;
            resp.PayCurrencyCode = "USD";
            resp.Payment         = "nordealt";

            var t = _bll.FinishTransaction(resp);

            Assert.AreEqual(PaymentStatusIds.PaidOk, t.PaymentStatus);
            Assert.AreEqual(resp.PayAmount, t.PaidAmount);
            Assert.AreEqual(resp.PayCurrencyCode, t.PaidCurrencyCode);
            Assert.AreEqual(resp.Payment, t.PaidThrough);
        }
예제 #6
0
        public PayseraPaymentResponse BuildResponseFromHttpParameters(NameValueCollection pars)
        {
            PayseraPaymentResponse resp = new PayseraPaymentResponse();

            foreach (string key in pars.AllKeys)
            {
                switch (key)
                {
                case "status":
                    resp.Status = pars[key];
                    break;

                case "orderid":
                    resp.OrderId = pars[key];
                    break;

                case "projectid":
                    resp.ProjectId = pars[key];
                    break;

                case "test":
                    resp.IsTestPayment = pars[key] == "0" ? false : true;
                    break;

                case "amount":
                    resp.AmountToPay = GetDecimal(pars[key], -1m);
                    if (resp.AmountToPay > 0)
                    {
                        resp.AmountToPay /= 100m;
                    }
                    break;

                case "payamount":
                    resp.PayAmount = GetDecimal(pars[key], -1m);
                    if (resp.PayAmount > 0)
                    {
                        resp.PayAmount /= 100m;
                    }
                    break;

                case "currency":
                    resp.CurrencyCode = pars[key];
                    break;

                case "paycurrency":
                    resp.PayCurrencyCode = pars[key];
                    break;

                case "p_firstname":
                    resp.CustomerName = pars[key];
                    break;

                case "p_lastname":
                    resp.CustomerLastName = pars[key];
                    break;

                case "p_email":
                    resp.CustomerEmail = pars[key];
                    break;

                case "p_phone":
                    resp.CustomerPhone = pars[key];
                    break;

                case "p_comment":
                    resp.Remarks = pars[key];
                    break;

                case "paytext":
                    resp.PayText = pars[key];
                    break;

                case "payment":
                    resp.Payment = pars[key];
                    break;

                default:
                    break;
                }
            }

            return(resp);
        }
예제 #7
0
        public void Test_IsTestPayment_By_Default_Is_True()
        {
            var resp = new PayseraPaymentResponse();

            Assert.IsTrue(resp.IsTestPayment);
        }
예제 #8
0
        public TransactionBdo FinishTransaction(PayseraPaymentResponse resp)
        {
            if (resp == null)
            {
                throw new ArgumentNullException("Could not finish transaction for NULL response from payment system");
            }

            // Paysera OrderId == PaySystemUid
            _securityBll.ValidateOrderNr(resp.OrderId);

            var t = _transactionDal.GetTransactionByOrderNr(resp.OrderId);

            if (t.PaymentStatus == PaymentStatusIds.PaidOk)
            {
                Logger.Warn("Transaction status is already PaidOk, do not update and exit");
                return(t);
            }

            t.IsPaymentProcessed  = true;
            t.PaySystemResponseAt = DateTime.UtcNow;
            t.IsTestPayment       = resp.IsTestPayment;

            t.PaidAmount       = resp.PayAmount;
            t.PaidCurrencyCode = resp.PayCurrencyCode;

            t.PayerEmail    = resp.CustomerEmail;
            t.PayerLastName = resp.CustomerLastName;
            t.PayerName     = resp.CustomerName;
            t.PayerPhone    = resp.CustomerPhone;

            t.PaidThrough = resp.Payment;

            /**
             * Payment status:
             *  0 - payment has no been executed
             *  1 - payment successful
             *  2 - payment order accepted, but not yet executed
             *  3 - additional payment information
             */
            switch (resp.Status)
            {
            case "1":
                t.PaymentStatus = PaymentStatusIds.PaidOk;
                break;

            case "2":
                t.PaymentStatus = PaymentStatusIds.AcceptedButNotExecuted;
                break;

            default:
                Logger.Warn("Payment status (from Paysera) is not OK: " + resp.Status);
                break;
            }

            t.ResponseFromPaymentSystem = t.ResponseFromPaymentSystem;

            Logger.Info("Updating transaction after finishing");
            _transactionDal.Update(t);

            return(t);
        }