Пример #1
0
        public async Task <IActionResult> VerifyRequest(BankVerifyViewModel vm)
        {
            try
            {
                // گرفتن اطلاعات فاکتور بر اساس شناسه خرید و شناسه گاربری
                var model = _usersPaymentRepository.GetByCondition(a => a.OrderId == vm.OrderId && a.Token == vm.Token);

                // رمز گذاری توکن
                var dataBytes = Encoding.UTF8.GetBytes(vm.Token);

                var symmetric = SymmetricAlgorithm.Create("TripleDes");
                symmetric.Mode    = CipherMode.ECB;
                symmetric.Padding = PaddingMode.PKCS7;

                var encryptor = symmetric.CreateEncryptor(Convert.FromBase64String(_bankConfig.MerchantKey), new byte[8]);

                var signedData = Convert.ToBase64String(encryptor.TransformFinalBlock(dataBytes, 0, dataBytes.Length));

                var data = new
                {
                    token    = vm.Token,
                    SignData = signedData
                };

                var ipgUri = string.Format("{0}/api/v0/Advice/Verify", _bankConfig.PurchasePage);

                var res = CallApi <BankCallBackResultViewModel>(ipgUri, data);
                if (res != null && res.Result != null)
                {
                    await _usersPaymentRepository.ResultOrder(model.ShopOrderId.Value, model.OrderId, model.UserId, res.Result.Succeed, res.Result.ResCode);

                    if (res.Result.ResCode == "0")
                    {
                        vm.VerifyResultData = res.Result;
                        res.Result.Succeed  = true;
                        ViewBag.Success     = res.Result.Description;

                        await _shopOrderRepository.SuccessedOrder(model.ShopOrderId.Value, model.UserId);

                        await _shopProductRepository.SuccessedOrder(model.ShopOrderId.Value, model.UserId);

                        return(RedirectToAction("Index", "UserOrder"));
                    }

                    ViewBag.Message = res.Result.Description;
                    return(RedirectToAction("Index", "UserOrder"));
                }
            }
            catch (Exception ex)
            {
                ViewBag.Message = ex.ToString();
            }

            return(Redirect("/"));
        }
        public async Task <IActionResult> VerifyPaymentRequest(BankVerifyViewModel vm)
        {
            try
            {
                _logRepository.Add(new Log()
                {
                    Text = $"*Start => "
                });
                // گرفتن اطلاعات فاکتور بر اساس شناسه خرید و شناسه گاربری
                var model = _usersPaymentRepository.GetByCondition(a => a.OrderId == vm.OrderId && a.Token == vm.Token);

                var result = await _shopOrderPaymentRepository.GetByConditionAsync(a => a.OrderId == vm.OrderId);

                if (result == null)
                {
                    TempData.AddResult(SweetAlertExtenstion.Error("متاسفانه اطلاعاتی با این شناسه خرید یافت نشد اگر هزینه ای از شما کسر شد طی 72 ساعت آینده به حسابتان واریز می شود"));
                    return(Redirect("/"));
                }

                await _usersPaymentRepository.ResultOrderCallBack(result.ShopOrderId, result.OrderId, UserId);

                // رمز گذاری توکن
                var dataBytes = Encoding.UTF8.GetBytes(vm.Token);

                var symmetric = SymmetricAlgorithm.Create("TripleDes");
                symmetric.Mode    = CipherMode.ECB;
                symmetric.Padding = PaddingMode.PKCS7;

                var encryptor = symmetric.CreateEncryptor(Convert.FromBase64String(_bankConfig.MerchantKey), new byte[8]);

                var signedData = Convert.ToBase64String(encryptor.TransformFinalBlock(dataBytes, 0, dataBytes.Length));

                var data = new
                {
                    token    = vm.Token,
                    SignData = signedData
                };

                var ipgUri = string.Format("{0}/api/v0/Advice/Verify", _bankConfig.PurchasePage);

                var res = CallApi <BankCallBackResultViewModel>(ipgUri, data);
                _logRepository.Add(new Log()
                {
                    Text = $"*1 => " + ((res != null && res.Result != null) ? "" : "")
                });

                if (res != null && res.Result != null)
                {
                    await _usersPaymentRepository.ResultOrder(result.ShopOrderId, result.OrderId, UserId, res.Result.Succeed, res.Result.ResCode);

                    _logRepository.Add(new Log()
                    {
                        Text = $"*2 => " + res.Result.ResCode.ToString()
                    });
                    if (res.Result.ResCode == "0")
                    {
                        vm.VerifyResultData = res.Result;
                        res.Result.Succeed  = true;
                        ViewBag.Success     = res.Result.Description;


                        await _shopOrderPaymentRepository.UpdateStatus(result.Id);

                        // ثبت کردن اطلاعات در وضعیت
                        await _shopOrderStatusRepository.InsertAsync(new ShopOrderStatusInsertViewModel()
                        {
                            Date        = DateTime.Now,
                            ShopOrderId = result.ShopOrderId,
                            Status      = ShopOrderStatusSSOT.Ordered
                        });


                        if (await _shopOrderPaymentRepository.AllIsPay(result.ShopOrderId))
                        {
                            // تغییر وضعیت فاکتور از پیش خرید به خرید شده
                            await _shopOrderRepository.SuccessedOrder(result.ShopOrderId, model.UserId);

                            // تغییر وضعیت سبد خرید
                            await _shopProductRepository.SuccessedOrder(result.ShopOrderId, model.UserId);
                        }

                        _logRepository.Add(new Log()
                        {
                            Text = $"*3 => " + "Start send message"
                        });
                        // ارسال اس ام اس به کاربر جهت ثبت سفارش
                        var text        = $"{result.ShopOrderId};{DateTime.Now.ToPersianDay()}";
                        var phoneNumber = _userRepository.GetByCondition(a => a.Id == model.UserId).PhoneNumber;

                        var smsResult = _smsRestClient.SendByBaseNumber(text, phoneNumber, (int)SmsBaseCodeSSOT.SetOrder);

                        // ارسال اس ام اس به مدیریت
                        var ResultTest = $"{DateTime.Now.ToPersianDay()};{result.ShopOrderId}";


                        var sms1Result = _smsRestClient.SendByBaseNumber(ResultTest, "09122013443", (int)SmsBaseCodeSSOT.Result);
                        var sms2Result = _smsRestClient.SendByBaseNumber(ResultTest, "09351631398", (int)SmsBaseCodeSSOT.Result);
                        var sms3Result = _smsRestClient.SendByBaseNumber(ResultTest, "09104996615", (int)SmsBaseCodeSSOT.Result);

                        _logRepository.Add(new Log()
                        {
                            Text = $"*sms -> FirstUser>{sms1Result.RetStatus}-{sms1Result.Value}-{sms1Result.StrRetStatus}"
                        });
                        _logRepository.Add(new Log()
                        {
                            Text = $"*sms -> SecondUser>{sms2Result.RetStatus}-{sms2Result.Value}-{sms2Result.StrRetStatus}"
                        });
                        _logRepository.Add(new Log()
                        {
                            Text = $"*sms -> ThirtUser>{sms3Result.RetStatus}-{sms3Result.Value}-{sms3Result.StrRetStatus}"
                        });
                        _logRepository.Add(new Log()
                        {
                            Text = $"*3 => " + "End send message"
                        });


                        await _treeRepository.CalculateRateTreeFromAmountAndInsert(result.PaymentAmount, model.UserId);

                        return(RedirectToAction("Result", "UserOrder", new { orderId = res.Result.OrderId, shopOrderId = result.ShopOrderId }));
                    }

                    ViewBag.Message = res.Result.Description;
                    return(RedirectToAction("Result", "UserOrder", new { orderId = result.OrderId, shopOrderId = result.ShopOrderId }));
                }
            }
            catch (Exception ex)
            {
                ViewBag.Message = ex.ToString();
                _logRepository.Add(new Log()
                {
                    Text = $"*Error => {ex.ToString()}"
                });
            }

            return(Redirect("/"));
        }
 public IActionResult CallBack(BankVerifyViewModel vm)
 {
     return(View(vm));
 }