public ActionResult Callback(string payment_key)
        {
            HttpWebRequest request = (HttpWebRequest)WebRequest.Create(RequestToServerURLGetPaymentResult + "?payment_key="
                                                                       + payment_key + "&hash_code=" + GetMD5HashCode(AuthKey + payment_key));

            request.ContentType = "application/json; charset=utf-8";
            request.Method      = "POST";
            request.Accept      = "application/json";
            HttpWebResponse response     = (HttpWebResponse)request.GetResponse();
            string          responseData = string.Empty;

            using (StreamReader reader = new StreamReader(response.GetResponseStream()))
            {
                responseData = reader.ReadToEnd();
            }

            CRespGetPaymentResult paymentResult = (CRespGetPaymentResult)JsonConvert.DeserializeObject(responseData, typeof(CRespGetPaymentResult));

            if (paymentResult.status.code == 1)
            {
            }
            return(View(paymentResult));
        }
        public async Task <IActionResult> Callback(string payment_key, [FromServices] EmailService service)
        {
            int langId = HttpContext.GetLanguage("langId");

            if (langId == 0)
            {
                langId = db.Languages.FirstOrDefault().Id;
            }
            #region Get Payment Result
            HttpWebRequest request = (HttpWebRequest)WebRequest.Create(configuration["PaymentInformation:RequestToServerUrlGetPaymentResult"] + "?payment_key="
                                                                       + payment_key + "&hash_code=" + GetMD5HashCode(configuration["PaymentInformation:AuthKey"] + payment_key));
            request.ContentType = "application/json; charset=utf-8";
            request.Method      = "POST";
            request.Accept      = "application/json";
            HttpWebResponse response     = (HttpWebResponse)request.GetResponse();
            string          responseData = string.Empty;
            using (StreamReader reader = new StreamReader(response.GetResponseStream()))
            {
                responseData = reader.ReadToEnd();
            }

            #endregion
            CRespGetPaymentResult paymentResult = (CRespGetPaymentResult)JsonConvert.DeserializeObject(responseData, typeof(CRespGetPaymentResult));

            #region Make Payment Status 1 if succeeded(Payed)
            string         user_id  = HttpContext.Session.GetString("user_id");
            List <Payment> payments = await db.Payments.Where(p => p.UserId == user_id && p.Status == 2).ToListAsync();

            foreach (var payment in payments)
            {
                payment.PaymentKey = payment_key;
                payment.Status     = paymentResult.status.code == 1 ? 1 : 0;
                await db.SaveChangesAsync();
            }
            #endregion


            if (paymentResult.status.code == 1)
            {
                #region Send Email to User
                await Task.Run(async() =>
                {
                    User user        = await db.Users.Where(u => u.Id == user_id).FirstOrDefaultAsync();
                    string userEmail = user?.Email;

                    string orderHtmlPath    = Path.Combine(Directory.GetCurrentDirectory(), "wwwroot", "Email", "order.html");
                    StringBuilder orderHtml = new StringBuilder();

                    StringBuilder orderItem = new StringBuilder();
                    string orderItemPath    = Path.Combine(Directory.GetCurrentDirectory(), "wwwroot", "Email", "orderitem.html");

                    using (StreamReader orderHtmlReader = new StreamReader(orderHtmlPath))
                    {
                        orderHtml.Append(orderHtmlReader.ReadToEnd());
                    }

                    using (StreamReader orderItemreader = new StreamReader(orderItemPath))
                    {
                        orderItem.Append(orderItemreader.ReadToEnd());
                    }

                    StringBuilder builder = new StringBuilder();
                    foreach (Payment payment1 in payments)
                    {
                        StringBuilder finalOrderItem = new StringBuilder();
                        finalOrderItem.Append(orderItem.ToString());
                        finalOrderItem.Replace("{ProductName}", payment1.ProductName);
                        finalOrderItem.Replace("{ProductSize}", payment1.ProductSize);
                        finalOrderItem.Replace("{ProductCount}", payment1.Count.ToString());
                        finalOrderItem.Replace("{ProductPrice}", payment1.TotalPrice.ToString());
                        builder.Append(finalOrderItem.ToString());
                    }
                    orderHtml.Replace("{OrderItem}", builder.ToString());

                    await service.SendMailAsync(user?.Email, "Order", orderHtml.ToString());
                });

                #endregion
                return(RedirectToAction("Success", "Payment"));
            }
            else
            {
                return(RedirectToAction("Error", "Payment"));
            }
        }