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")); }
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)); } }
// 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")); } }
// 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"); }