public JsonResult New(string session, string email, int merchant, int system)
        {
            using (var db = new Entities())
            {
                Response response = null;

                if (!string.IsNullOrEmpty(email))
                {
                    if (!string.IsNullOrEmpty(session))
                    {
                        var participants = db.Sys_User.Where(z => z.dsEmail == email);

                        List<Sys_User> listParticipant = participants.ToList();

                        if (listParticipant != null && listParticipant.Count > 0)
                        {
                            int active_session = 0;

                            Sys_User participant = db.Sys_User.Find(listParticipant[0].idUser);

                            if (participant.dtLastSession != null)
                            {
                                DateTime dateNow = DateTime.Now;

                                TimeSpan timeSpan = dateNow.Subtract((DateTime)participant.dtLastSession);
                                active_session = timeSpan.Minutes;
                            }

                            if (active_session <= 60 && participant.dsSession.Equals(session))
                            {
                                Stream req = Request.InputStream;
                                req.Seek(0, System.IO.SeekOrigin.Begin);
                                string json = new StreamReader(req).ReadToEnd();

                                dynamic myObj;
                                try
                                {
                                    myObj = JsonConvert.DeserializeObject(json);

                                    string newSession = SessionController.New(email);
                                    SessionController.Write(newSession, participant.idUser, system);

                                    var payTransaction = new Pay_Transaction();
                                    payTransaction.idMerchant = merchant;
                                    payTransaction.dtCreate = DateTime.Now;
                                    payTransaction.dtLastUpdate = DateTime.Now;

                                    payTransaction.date = payTransaction.dtCreate;

                                    if (myObj.merchantEmail != null)
                                        payTransaction.merchantEmail = myObj.merchantEmail; //required
                                    if (myObj.merchantName != null)
                                        payTransaction.merchantName = myObj.merchantName;
                                    if (myObj.merchantInstallmentAllowed != null)
                                        payTransaction.merchantInstallmentAllowed = myObj.merchantInstallmentAllowed;

                                    if (myObj.isTest != null)
                                        payTransaction.isTest = myObj.isTest;
                                    if (myObj.operation != null)
                                        payTransaction.operation = myObj.operation;
                                    if (myObj.pinpadInfo != null)
                                        payTransaction.pinpadInfo = myObj.pinpadInfo;
                                    if (myObj.serial_number != null)
                                        payTransaction.pinpadSerialNumber = myObj.serial_number;
                                    if (myObj.state != null)
                                        payTransaction.state = myObj.state;
                                    if (myObj.statusCode != null)
                                        payTransaction.statusCode = myObj.statusCode;
                                    if (myObj.type != null)
                                        payTransaction.type = myObj.type;
                                    if (myObj.value != null)
                                        payTransaction.value = myObj.value;

                                    if (myObj.latitude != null)
                                        payTransaction.latitude = myObj.latitude;
                                    if (myObj.longitude != null)
                                        payTransaction.longitude = myObj.longitude;

                                    if (myObj.flStatus != null && !((string)myObj.flStatus).Equals("null"))
                                        payTransaction.flStatus = myObj.flStatus;

                                    db.Pay_Transaction.Add(payTransaction);
                                    db.SaveChanges();

                                    response = new PayRequest(newSession, payTransaction);
                                }
                                catch (Exception ex)
                                {
                                    response = new ResponseFailure("invalid-data");
                                }
                            }
                            else
                            {
                                response = new ResponseFailure("invalid-session");
                            }
                        }
                        else
                        {
                            response = new ResponseFailure("invalid-email");
                        }
                    }
                    else
                    {
                        response = new ResponseFailure("invalid-session");
                    }
                }
                else
                {
                    response = new ResponseFailure("invalid-email");
                }

                return Json(response, JsonRequestBehavior.AllowGet);
            }
        }
        public JsonResult Refund(string session, string email, int merchant, int system)
        {
            using (var db = new Entities())
            {
                Response response = null;

                if (!string.IsNullOrEmpty(email))
                {
                    if (!string.IsNullOrEmpty(session))
                    {
                        var participants = db.Sys_User.Where(z => z.dsEmail == email);

                        List<Sys_User> listParticipant = participants.ToList();

                        if (listParticipant != null && listParticipant.Count > 0)
                        {
                            int active_session = 0;

                            Sys_User participant = db.Sys_User.Find(listParticipant[0].idUser);

                            if (participant.dtLastSession != null)
                            {
                                DateTime dateNow = DateTime.Now;

                                TimeSpan timeSpan = dateNow.Subtract((DateTime)participant.dtLastSession);
                                active_session = timeSpan.Minutes;
                            }

                            if (active_session <= 60 && participant.dsSession.Equals(session))
                            {
                                Stream req = Request.InputStream;
                                req.Seek(0, System.IO.SeekOrigin.Begin);
                                string json = new StreamReader(req).ReadToEnd();

                                dynamic myObj;
                                try
                                {
                                    myObj = JsonConvert.DeserializeObject(json);

                                    string newSession = SessionController.New(email);
                                    SessionController.Write(newSession, participant.idUser, system);

                                    if (myObj.id != null & myObj.id > 0)
                                    {
                                        Pay_Transaction payTransaction = new Pay_Transaction();
                                        payTransaction.idMerchant = merchant;
                                        payTransaction.dtCreate = DateTime.Now;
                                        payTransaction.dtLastUpdate = DateTime.Now;

                                        long idMobile = myObj.id;
                                        Guid idServer = Guid.Empty;
                                        string strIdServer = null;

                                        if (myObj.idServer != null)
                                            strIdServer = myObj.idServer;

                                        if (myObj.token != null && !((string)myObj.token).Equals("null"))
                                            payTransaction.token = myObj.token;
                                        if (myObj.serial_number != null && !((string)myObj.serial_number).Equals("null"))
                                            payTransaction.pinpadSerialNumber = myObj.serial_number;

                                        //if (myObj.techonology != null)

                                        if (myObj.type != null)
                                            payTransaction.type = myObj.type;
                                        if (myObj.operation != null)
                                            payTransaction.operation = myObj.operation;
                                        if (myObj.state != null)
                                            payTransaction.state = myObj.state;

                                        if (myObj.fiscalDate != null && !((string)myObj.fiscalDate).Equals("null"))
                                            payTransaction.fiscalDate = myObj.fiscalDate;
                                        if (myObj.fiscalHour != null && !((string)myObj.fiscalHour).Equals("null"))
                                            payTransaction.fiscalHour = myObj.fiscalHour;

                                        if (myObj.cs_pinpad_info != null && !((string)myObj.cs_pinpad_info).Equals("null"))
                                            payTransaction.pinpadInfo = myObj.cs_pinpad_info;
                                        if (myObj.value != null && !((string)myObj.value).Equals("null"))
                                            payTransaction.value = myObj.value;
                                        if (myObj.status != null)
                                            payTransaction.statusCode = myObj.status;

                                        //if (myObj.message != null && !((string)myObj.message).Equals("null"))
                                        //payTransaction.statusMessage = myObj.message;

                                        if (myObj.type != null)
                                            payTransaction.type = myObj.type;
                                        if (myObj.creditcard != null && !((string)myObj.creditcard).Equals("null"))
                                            payTransaction.cardBIN = myObj.creditcard;
                                        if (myObj.card_brand != null && !((string)myObj.card_brand).Equals("null"))
                                            payTransaction.cardBrand = myObj.card_brand;
                                        if (myObj.card_type != null && !((string)myObj.card_type).Equals("null"))
                                            payTransaction.cardType = myObj.card_type;
                                        if (myObj.installments != null && !((string)myObj.installments).Equals("null"))
                                            payTransaction.installmentAmount = myObj.installments;
                                        if (myObj.nsu != null && !((string)myObj.nsu).Equals("null"))
                                            payTransaction.acquirerNSU = myObj.nsu;
                                        if (myObj.auth_code != null && !((string)myObj.auth_code).Equals("null"))
                                            payTransaction.authorizationNumber = myObj.auth_code;
                                        if (myObj.return_code != null && !((string)myObj.return_code).Equals("null"))
                                            payTransaction.acquirerResponseCode = myObj.return_code;
                                        if (myObj.cs_payment_type != null && !((string)myObj.cs_payment_type).Equals("null"))
                                            payTransaction.paymentType = myObj.cs_payment_type;
                                        if (myObj.cs_payment_function != null && !((string)myObj.cs_payment_function).Equals("null"))
                                            payTransaction.paymentFunction = myObj.cs_payment_function;
                                        if (myObj.cs_payment_function_description != null && !((string)myObj.cs_payment_function_description).Equals("null"))
                                            payTransaction.paymentFunctionDescription = myObj.cs_payment_function_description;
                                        if (myObj.cs_card_brand_number != null && !((string)myObj.cs_card_brand_number).Equals("null"))
                                            payTransaction.cardBrandCode = myObj.cs_card_brand_number;
                                        if (myObj.cs_sitef_nsu != null && !((string)myObj.cs_sitef_nsu).Equals("null"))
                                            payTransaction.sitefNSU = myObj.cs_sitef_nsu;
                                        if (myObj.cs_sitef_request_number != null && !((string)myObj.cs_sitef_request_number).Equals("null"))
                                            payTransaction.clisitefRequestNumber = myObj.cs_sitef_request_number;
                                        if (myObj.cs_sitef_confirmation_data != null && !((string)myObj.cs_sitef_confirmation_data).Equals("null"))
                                            payTransaction.clisitefConfirmationData = myObj.cs_sitef_confirmation_data;
                                        if (myObj.cs_sitef_refund_date != null && !((string)myObj.cs_sitef_refund_date).Equals("null"))
                                            payTransaction.refundDate = myObj.cs_sitef_refund_date;
                                        if (myObj.cs_sitef_refund_number != null && !((string)myObj.cs_sitef_refund_number).Equals("null"))
                                            payTransaction.refundDocumentNumber = myObj.cs_sitef_refund_number;
                                        if (myObj.cs_pinpad_info != null && !((string)myObj.cs_pinpad_info).Equals("null"))
                                            payTransaction.pinpadInfo = myObj.cs_pinpad_info;
                                        if (myObj.cs_sitef_version != null && !((string)myObj.cs_sitef_version).Equals("null"))
                                            payTransaction.sitefVersion = myObj.cs_sitef_version;
                                        if (myObj.cs_merchant_installments_allowed != null && !((string)myObj.cs_merchant_installments_allowed).Equals("null"))
                                            payTransaction.merchantInstallmentAllowed = myObj.cs_merchant_installments_allowed;
                                        if (myObj.cs_issuer_installments_allowed != null && !((string)myObj.cs_issuer_installments_allowed).Equals("null"))
                                            payTransaction.issuerInstallmentAllowed = myObj.cs_issuer_installments_allowed;
                                        if (myObj.cs_max_merchant_installments != null && !((string)myObj.cs_max_merchant_installments).Equals("null"))
                                            payTransaction.maxMerchantInstallments = myObj.cs_max_merchant_installments;
                                        if (myObj.cs_max_issuer_installments != null && !((string)myObj.cs_max_issuer_installments).Equals("null"))
                                            payTransaction.maxIssuerInstallments = myObj.cs_max_issuer_installments;
                                        if (myObj.cs_customer_receipt != null && !((string)myObj.cs_customer_receipt).Equals("null"))
                                            payTransaction.customerReceipt = myObj.cs_customer_receipt;
                                        if (myObj.cs_merchant_receipt != null && !((string)myObj.cs_merchant_receipt).Equals("null"))
                                            payTransaction.merchantReceipt = myObj.cs_merchant_receipt;

                                        if (myObj.flStatus != null && !((string)myObj.flStatus).Equals("null"))
                                            payTransaction.flStatus = myObj.flStatus;

                                        payTransaction.dtLastUpdate = DateTime.Now;

                                        Pay_Transaction payTransactionUpd = null;
                                        if (!string.IsNullOrEmpty(strIdServer) && Guid.TryParse(strIdServer, out idServer))
                                        {
                                            payTransactionUpd = db.Pay_Transaction.Where(z => z.idTransaction == idServer).FirstOrDefault();
                                        }
                                        else
                                        {
                                            payTransactionUpd = db.Pay_Transaction.Where(z => z.idMobile == idMobile).FirstOrDefault();
                                        }

                                        if (payTransaction != null)
                                        {
                                            payTransaction.idTransactionParent = payTransactionUpd.idTransaction;

                                            payTransactionUpd.flStatus = "R";
                                            payTransactionUpd.dtLastUpdate = DateTime.Now;

                                            db.Entry(payTransactionUpd).State = EntityState.Modified;
                                            db.SaveChanges();
                                        }

                                        db.Entry(payTransaction).State = EntityState.Added;
                                        db.SaveChanges();

                                        response = new PayRequest(newSession, payTransaction);
                                    }
                                    else
                                    {
                                        response = new ResponseFailure("invalid-data");
                                    }
                                }
                                catch (Exception ex)
                                {
                                    response = new ResponseFailure("invalid-data");
                                }
                            }
                            else
                            {
                                response = new ResponseFailure("invalid-session");
                            }
                        }
                        else
                        {
                            response = new ResponseFailure("invalid-email");
                        }
                    }
                    else
                    {
                        response = new ResponseFailure("invalid-session");
                    }
                }
                else
                {
                    response = new ResponseFailure("invalid-email");
                }

                return Json(response, JsonRequestBehavior.AllowGet);
            }
        }