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"));
        }
示例#2
0
        public CreateOrderPage()
        {
            InitializeComponent();

            Title = "Create Order";
            string appTransId = ZaloPayHelper.GenTransID();

            Order = new Order
            {
                AppId            = Int32.Parse(Constants.APP_ID),
                AppUser          = "******",
                AppTransId       = appTransId,
                AppTime          = Util.GetTimeStamp(),
                Amount           = 10000,
                Description      = "[Demp ZPDK Xamarin] Thanh toan don hang " + appTransId,
                Item             = "[]",
                EmbedData        = "{}",
                Mac              = "",
                ReturnCode       = "",
                ReturnMessage    = "",
                OrderUrl         = "",
                SubReturnCode    = "",
                SubReturnMessage = "",
                Status           = "PENDING",
                ZpTransToken     = ""
            };

            BindingContext = this;
        }
 public RefundData(long amount, string zptransid, string description = "")
 {
     Appid       = ConfigurationManager.AppSettings["Appid"];
     Zptransid   = zptransid;
     Amount      = amount;
     Description = description;
     Mrefundid   = ZaloPayHelper.GenTransID();
     Timestamp   = Util.GetTimeStamp();
     Mac         = ComputeMac();
 }
        // GET: Gateway
        public async Task <ActionResult> Index()
        {
            var banklistResponse = await ZaloPayHelper.GetBankList();

            var banklist = ZaloPayHelper.ParseBankList(banklistResponse);

            ViewData["banklist"] = banklist;

            return(View());
        }
示例#5
0
 public RefundData(long amount, string zptransid, string description = "")
 {
     Appid       = Constants.APP_ID;
     Zptransid   = zptransid;
     Amount      = amount;
     Description = description;
     Mrefundid   = ZaloPayHelper.GenTransID();
     Timestamp   = TimeHelper.GetTimeStamp();
     Mac         = ComputeMac();
 }
示例#6
0
 public OrderData(long amount, string description = "", string bankcode = "", object embeddata = null, object item = null, string appuser = "")
 {
     Appid       = ConfigurationManager.AppSettings["Appid"];
     Apptransid  = ZaloPayHelper.GenTransID();
     Apptime     = Util.GetTimeStamp();
     Appuser     = appuser;
     Amount      = amount;
     Description = description;
     Embeddata   = JsonConvert.SerializeObject(embeddata);
     Item        = JsonConvert.SerializeObject(item);
     Mac         = ComputeMac();
 }
示例#7
0
 public OrderData(long amount, string description = "", string bankcode = "", object embeddata = null, object item = null, string appuser = "")
 {
     Appid       = Constants.APP_ID;
     Apptransid  = ZaloPayHelper.GenTransID();
     Apptime     = TimeHelper.GetTimeStamp();
     Appuser     = appuser;
     Amount      = amount;
     Bankcode    = bankcode;
     Description = description;
     Embeddata   = JsonConvert.SerializeObject(embeddata);
     Item        = JsonConvert.SerializeObject(item);
     Mac         = ComputeMac();
 }
示例#8
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));
            }
        }
示例#9
0
        public static async Task <int> CreateOrder(Order order)
        {
            order.Mac = ZaloPayMacGenerator.CalculateOrderMac(order);

            Dictionary <string, string> orderData = new Dictionary <string, string>();

            orderData.Add("app_id", order.AppId.ToString());
            orderData.Add("app_user", order.AppUser);
            orderData.Add("app_time", order.AppTime.ToString());
            orderData.Add("app_trans_id", order.AppTransId);
            orderData.Add("description", order.Description);
            orderData.Add("amount", order.Amount.ToString());
            orderData.Add("item", order.Item);
            orderData.Add("embed_data", order.EmbedData);
            orderData.Add("mac", order.Mac);

            try
            {
                var orderResponse = await ZaloPayHelper.CreateOrder(orderData);

                if (orderResponse.Count > 0)
                {
                    //Console.WriteLine(string.Join(";", orderResponse.Select(x => x.Key + "=" + x.Value).ToArray()));
                    Order updateOrder = await App.Database.GetItemAsync(order.ID);

                    order.ReturnCode       = orderResponse["return_code"].ToString();
                    order.ReturnMessage    = orderResponse["return_message"].ToString();
                    order.SubReturnCode    = orderResponse["sub_return_code"].ToString();
                    order.SubReturnMessage = orderResponse["sub_return_message"].ToString();
                    order.OrderUrl         = orderResponse["order_url"].ToString();
                    order.ZpTransToken     = orderResponse["zp_trans_token"].ToString();
                    await App.Database.SaveItemAsync(order);
                }
                else
                {
                    order.Status = "FAILED";
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine(">>> EXCEPTION!");
                Console.WriteLine(ex);
                order.Status = "FAILED";
            }
            finally
            {
                Console.WriteLine(order.OrderUrl);
            }

            return(await App.Database.SaveItemAsync(order));
        }
示例#10
0
        public OrderDetailViewModel(Order order = null)
        {
            Title = "Order detail";
            Order = order;
            if (Order.Status != "PENDING")
            {
                IsFinished = true;
            }

            // -------------------------------------------------------------------------

            MessagingCenter.Instance.Subscribe <Application, string>(Application.Current, "Redirect", async(sender, result) =>
            {
                IsBusy = true;
                try
                {
                    /// NOTE: Need to query to your backend service and then your backend will check the ZaloPay API to get the order status
                    var response   = await ZaloPayHelper.GetOrderStatus(Order.AppTransId);
                    int returnCode = int.Parse(response["return_code"].ToString());
                    if (returnCode == 1)
                    {
                        Order.Status = "SUCCESS";
                        IsFinished   = true;
                    }
                    else
                    {
                        IsFinished   = true;
                        Order.Status = "FAILED";
                    }
                    await App.Database.SaveItemAsync(Order);
                }
                catch (Exception e)
                {
                    Console.WriteLine(">> EXCEPTION: " + e.ToString());
                    Order.Status = "FAILED";
                    IsFinished   = true;
                }
                finally
                {
                    IsBusy = false;
                    await Navigation.PopAsync();
                }
            });


            // -------------------------------------------------------------------------
        }
        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"));
            }
        }
示例#12
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");
        }