Beispiel #1
0
        public ActionResult Return(int saleOrderId)

        {
            try
            {
                //حتی می توان ورودی های برگشتی از وب سرویس را بصورت ویو مدل دریافت کرد، یا از طریق ورودی مانند بالا، و یا
                //همانند پایین httpcobtext
                string saleOrderIdQuery = _contextAccessor.HttpContext.Request.Query["saleOrderId"]; //getting null

                string StatusQuery    = _contextAccessor.HttpContext.Request.Query["Status"];        //getting null
                string AuthorityQuery = _contextAccessor.HttpContext.Request.Query["Authority"];     //getting null

                if (saleOrderIdQuery != "" && StatusQuery != "" && StatusQuery != null && AuthorityQuery != "" && AuthorityQuery != null)
                {
                    // بررسی وضعیت پرداخت
                    if (StatusQuery.ToString().Equals("OK"))
                    {
                        int paymentId = Convert.ToInt32(saleOrderId);

                        // پیدا کردن مبلغ پرداختی از دیتابیس
                        int amount = FindAmountPayment(paymentId);

                        // شماره پیگیری
                        long refId = 0;
                        //System.Net.ServicePointManager.Expect100Continue = false;
                        WinHttpHandler httpHandler = new WinHttpHandler();
                        httpHandler.MaxConnectionsPerServer.Equals(int.MaxValue);
                        httpHandler.SslProtocols = SslProtocols.Tls12;


                        // ایجاد یک شی از وب سرویس اتصال به درگاه زرین پال
                        var zp = new ZarinpalServiceReference.PaymentGatewayImplementationServicePortTypeClient();

                        // کد پذیرنده
                        string merchantCode = "501a433c-6d2f-11e7-b90f-033c295111fc";
                        // وری فای کردن اطلاعات

                        var paymentVerification = zp.PaymentVerificationAsync(merchantCode, AuthorityQuery, amount);

                        // بررسی وضعیت تایید پرداخت
                        if (paymentVerification.Result.Body.Status == 100)
                        {
                            refId = paymentVerification.Result.Body.RefID;

                            // پرداخت موفق بوده و اطلاعات دریافتی را در دیتابیس ثبت می کنیم
                            // در این قسمت می توانید اطلاعات دریافتی را در دیتابیس ذخیره کنید
                            Payment payment = _context.Payment.Find(paymentId);

                            if (payment != null)
                            {
                                payment.ReferenceNumber = refId;
                                payment.SaleReferenceId = AuthorityQuery.ToString();
                                payment.StatusPayment   = Convert.ToString(paymentVerification.Result.Body.Status);
                                _context.Update(payment);
                                //بعد از ثبت موفقیت آمیز فرآیند پرداخت
                                //سبد خرید را خالی کرده
                                var Cart  = new ShoppingCart(_contextAccessor, _context);
                                var items = _context.CartItems.Include(c => c.Product).Where(current => current.CartId == Cart.GetCart(_contextAccessor));
                                // clear ShoppingCart
                                _context.CartItems.RemoveRange(items);
                                // شماره آی دی جدول کاربر
                                var userId = _contextAccessor.HttpContext.User.FindFirst(ClaimTypes.NameIdentifier).Value;
                                //آخرین سفارش کاربر را گرفته و مهر تائید بر آن می زنیم
                                Order order = _context.Order.Where(c => c.UserId == userId).OrderByDescending(d => d.OrderDate).FirstOrDefault();
                                //مهر تائید
                                order.IsBuy = true;
                                _context.Update(order);
                                _context.SaveChanges();
                            }
                            ViewBag.SaleID          = saleOrderId;
                            ViewBag.PaymentID       = paymentId;
                            ViewBag.Message         = ZarinPalResult.Status(paymentVerification.Result.Body.Status.ToString());
                            ViewBag.SaleReferenceId = refId;
                            //ViewBag.Image = "~/Content/Images/accept.png";
                        }

                        else
                        {
                            Payment payment = _context.Payment.Find(paymentId);

                            if (payment != null)
                            {
                                payment.ReferenceNumber = 0;
                                payment.SaleReferenceId = AuthorityQuery.ToString();
                                payment.StatusPayment   = Convert.ToString(paymentVerification.Result.Body.Status);

                                _context.Update(payment);

                                _context.SaveChanges();
                            }
                            ViewBag.SaleID          = saleOrderId;
                            ViewBag.PaymentID       = paymentId;
                            ViewBag.Message         = ZarinPalResult.Status(Convert.ToString(paymentVerification.Result.Body.Status));
                            ViewBag.SaleReferenceId = "**************";
                            //ViewBag.Image = "~/Content/Images/notaccept.png";
                        }
                    }
                    else
                    {
                        int     paymentId = Convert.ToInt32(saleOrderId);
                        Payment payment   = _context.Payment.Find(paymentId);

                        if (payment != null)
                        {
                            payment.ReferenceNumber = 0;
                            payment.SaleReferenceId = AuthorityQuery.ToString();
                            payment.StatusPayment   = StatusQuery.ToString();
                            _context.Update(payment);

                            _context.SaveChanges();
                        }
                        ViewBag.PaymentID = paymentId;

                        ViewBag.Message         = StatusQuery.ToString();
                        ViewBag.SaleReferenceId = "**************";
                        //ViewBag.Image = "~/Content/Images/notaccept.png";
                    }
                }
                else
                {
                    ViewBag.Message = "دسترسی امکانپذیر نیست";
                }
            }
            catch
            {
                ViewBag.Message = "پاسخی دریافت نشد";
            }
            return(View());
        }
Beispiel #2
0
        public async Task <IActionResult> Pay(int price)
        {
            try
            {
                //ایجاد یک شی از جدول ثبت اطلاعات فرآیند پرداخت
                Payment payment = new Payment();

                payment.Amount          = price;
                payment.ReferenceNumber = 0;
                // شماره آی دی جدول کاربر
                var userId = _contextAccessor.HttpContext.User.FindFirst(ClaimTypes.NameIdentifier).Value;

                payment.UserId = userId;

                _context.Add(payment);
                await _context.SaveChangesAsync();

                int paymentId = payment.PaymentId;

                WinHttpHandler httpHandler = new WinHttpHandler();
                httpHandler.MaxConnectionsPerServer.Equals(int.MaxValue);
                httpHandler.SslProtocols = SslProtocols.Tls12;

                // آدرس برگشت از درگاه
                string redirectPage = "http://*****:*****@Info.com", "09010487144", redirectPage);

                // بررسی وضعیت
                if (paymentReques.Result.Body.Status == 100)
                {
                    authority = paymentReques.Result.Body.Authority;

                    // اتصال به درگاه
                    Response.Redirect("https://www.zarinpal.com/pg/StartPay/" + authority);
                }
                else
                {
                    // ویرایش اطلاعات ارسالی از زرین پال در صورت عدم اتصال
                    Payment editPayment = _context.Payment.Find(paymentId);

                    if (editPayment != null)
                    {
                        // ویرایش خطای عدم اتصال به درگاه
                        editPayment.StatusPayment = Convert.ToString(paymentReques);

                        _context.Update(editPayment);
                        await _context.SaveChangesAsync();
                    }

                    // نمایش خطا به کاربر
                    ViewData["Message"]       = ZarinPalResult.Status(paymentReques.Result.Body.Status.ToString());
                    ViewData["SumCountPrice"] = price;
                }
            }

            catch (Exception ex)
            {
                string error = ex.Message;
                ViewData["Message"]       = "در حال حاضر امکان اتصال به این درگاه وجود ندارد";
                ViewData["SumCountPrice"] = price;
            }
            return(View());
        }