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