public async Task <ActionResult> Post()
        {
            var embeddata      = NgrokHelper.CreateEmbeddataWithPublicUrl();
            var paymentcodeRaw = Request.Form.Get("paymentcodeRaw");
            var amount         = long.Parse(Request.Form.Get("amount"));
            var description    = Request.Form.Get("description");

            var orderData = new QuickPayOrderData(amount, paymentcodeRaw, description, embeddata);
            var result    = await ZaloPayHelper.QuickPay(orderData);

            var returncode = int.Parse(result["returncode"].ToString());

            if (returncode > 0)
            {
                using (var db = new ZaloPayDemoContext())
                {
                    db.Orders.Add(new Models.Order
                    {
                        Apptransid  = orderData.Apptransid,
                        Amount      = orderData.Amount,
                        Timestamp   = orderData.Apptime,
                        Description = orderData.Description,
                        Status      = 0
                    });

                    db.SaveChanges();
                }
            }

            Session["result"] = result;

            return(Redirect("/QuickPay"));
        }
Esempio n. 2
0
        public JsonResult Index(CallbackRequest cbdata)
        {
            var result = new Dictionary <string, object>();

            try
            {
                var dataStr    = Convert.ToString(cbdata.Data);
                var requestMac = Convert.ToString(cbdata.Mac);

                var isValidCallback = ZaloPayHelper.VerifyCallback(dataStr, requestMac);

                // kiểm tra callback hợp lệ (đến từ zalopay server)
                if (!isValidCallback)
                {
                    // callback không hợp lệ
                    result["returncode"]    = -1;
                    result["returnmessage"] = "mac not equal";
                }
                else
                {
                    // thanh toán thành công
                    // merchant xử lý đơn hàng cho user
                    var data       = JsonConvert.DeserializeObject <Dictionary <string, object> >(dataStr);
                    var apptransid = data["apptransid"].ToString();

                    using (var db = new ZaloPayDemoContext())
                    {
                        var orderDTO = db.Orders.SingleOrDefault(o => o.Apptransid.Equals(apptransid));
                        if (orderDTO != null)
                        {
                            orderDTO.Zptransid = data["zptransid"].ToString();
                            orderDTO.Channel   = int.Parse(data["channel"].ToString());
                            orderDTO.Status    = 1;

                            db.SaveChanges();
                        }
                    }

                    result["returncode"]    = 1;
                    result["returnmessage"] = "success";
                }

                // thông báo kết quả cho zalopay server
                return(Json(result));
            } catch (Exception ex)
            {
                result["returncode"]    = 0; // ZaloPay sẽ callback lại tối đa 3 lần
                result["returnmessage"] = ex.Message;
                return(Json(result));
            }
        }
Esempio n. 3
0
        // GET: History
        public ActionResult Index()
        {
            int page;

            try
            {
                page = int.Parse(Request.QueryString["page"]);
            }
            catch
            {
                page = 1;
            }

            using (var db = new ZaloPayDemoContext())
            {
                var ors = db.Orders
                          .GroupJoin(
                    db.Refunds,
                    order => order.Zptransid,
                    refund => refund.Zptransid,
                    (order, refunds) => new { Order = order, Refunds = refunds })
                          .SelectMany(
                    o => o.Refunds.DefaultIfEmpty(),
                    (order, refund) => new { order.Order, Refund = refund })
                          .OrderByDescending(o => o.Order.Timestamp)
                          .Skip((page - 1) * orderPerPage)
                          .Take(orderPerPage)
                          .ToList();

                var totalOrder   = db.Orders.Count();
                var orders       = ors.GroupBy(o => o.Order.Apptransid).Select(g => g.First().Order).ToList();
                var totalRefunds = ors.GroupBy(o => o.Order.Apptransid).Select(g => g.Sum(o => o.Refund != null ? o.Refund.Amount : 0)).ToList();

                ViewData["orders"]       = orders;
                ViewData["totalRefunds"] = totalRefunds;
                ViewData["totalOrder"]   = totalOrder;
                ViewData["orderPerPage"] = orderPerPage;
                ViewData["page"]         = page;
            }

            return(View());
        }
        public async Task <ActionResult> Post()
        {
            var amount      = long.Parse(Request.Form.Get("amount"));
            var description = Request.Form.Get("description");
            var bankcode    = Request.Form.Get("bankcode");
            var embeddata   = NgrokHelper.CreateEmbeddataWithPublicUrl();

            if (bankcode.Equals("ATM"))
            {
                embeddata["bankgroup"] = "ATM";
                bankcode = "";
            }

            var orderData = new OrderData(amount, description, bankcode, embeddata);
            var order     = await ZaloPayHelper.CreateOrder(orderData);

            var returncode = (long)order["returncode"];

            if (returncode == 1)
            {
                using (var db = new ZaloPayDemoContext())
                {
                    db.Orders.Add(new Models.Order
                    {
                        Apptransid  = orderData.Apptransid,
                        Amount      = orderData.Amount,
                        Timestamp   = orderData.Apptime,
                        Description = orderData.Description,
                        Status      = 0
                    });

                    db.SaveChanges();
                }

                return(Redirect(order["orderurl"].ToString()));
            }
            else
            {
                Session["error"] = true;
                return(Redirect("/Gateway"));
            }
        }
Esempio n. 5
0
        // GET: Redirect
        public async Task <ActionResult> Index()
        {
            bool isValidRedirect;

            try
            {
                var data = new Dictionary <string, object>();
                Request.QueryString.CopyTo(data);

                isValidRedirect = ZaloPayHelper.VerifyRedirect(data);
                if (isValidRedirect)
                {
                    var apptransid = data["apptransid"].ToString();
                    using (var db = new ZaloPayDemoContext())
                    {
                        var orderDTO = db.Orders.First(o => o.Apptransid.Equals(apptransid));
                        if (orderDTO != null && orderDTO.Status == 0)
                        {
                            var orderStatus = await ZaloPayHelper.GetOrderStatus(apptransid);

                            var returncode = int.Parse(orderStatus["returncode"].ToString());

                            orderDTO.Zptransid = orderStatus["zptransid"].ToString();
                            orderDTO.Channel   = int.Parse(orderStatus["pmcid"].ToString());
                            orderDTO.Status    = returncode == 1 ? 1 : -1;
                        }
                    }
                }
            } catch (Exception ex)
            {
                isValidRedirect       = false;
                ViewData["Exception"] = ex.Message;
            }

            ViewData["isValidRedirect"] = isValidRedirect;

            return(View());
        }
        public async Task Index()
        {
            try
            {
                var data = new Dictionary <string, object>();
                Request.Form.CopyTo(data);

                var amount      = long.Parse(Request.Form.Get("amount"));
                var zptransid   = Request.Form.Get("zptransid");
                var description = Request.Form.Get("description");

                var refundData = new RefundData(amount, zptransid, description);
                var result     = await ZaloPayHelper.Refund(refundData);

                var returncode = int.Parse(result["returncode"].ToString());

                if (returncode >= 1)
                {
                    while (true)
                    {
                        var refundStatus = await ZaloPayHelper.GetRefundStatus(refundData.Mrefundid);

                        var c = int.Parse(refundStatus["returncode"].ToString());

                        if (c < 2)
                        {
                            if (c == 1)
                            {
                                using (var db = new ZaloPayDemoContext())
                                {
                                    db.Refunds.Add(new Models.Refund
                                    {
                                        Amount    = refundData.Amount,
                                        Zptransid = refundData.Zptransid,
                                        Mrefundid = refundData.Mrefundid
                                    });

                                    db.SaveChanges();
                                }
                            }

                            Session["refundResult"] = refundStatus;

                            break;
                        }

                        System.Threading.Thread.Sleep(1000);
                    }
                }
                else
                {
                    Session["refundResult"] = result;
                }
            } catch (Exception ex)
            {
                var result = new Dictionary <string, object>();
                result["returncode"]    = -1;
                result["returnmessage"] = "Exception: " + ex.Message;

                Session["refundResult"] = result;
            }

            Response.Redirect("/History");
        }