public ShopProductController(ShopProductRepository shopProductRepository , IConfiguration configuration , ProductRepostitory productRepostitory , ProductPackageDetailsRepostitory productPackageDetailsRepostitory , ShopOrderRepository shopOrderRepository , ManageBankService manageBankService , UsersPaymentRepository usersPaymentRepository) { _bankConfig = configuration.GetSection(nameof(BankConfig)).Get <BankConfig>(); _shopProductRepository = shopProductRepository; _configuration = configuration; _productRepostitory = productRepostitory; _productPackageDetailsRepostitory = productPackageDetailsRepostitory; _shopOrderRepository = shopOrderRepository; _manageBankService = manageBankService; _usersPaymentRepository = usersPaymentRepository; }
public async Task <IActionResult> RequestBuilder(int id) { if (!User.Identity.IsAuthenticated) { return(RedirectToAction("Login", "Account")); } var factorInfo = await _shopOrderRepository.GetByIdAsync(id); #region BankDependency if (factorInfo == null) { TempData.AddResult(SweetAlertExtenstion.Error("اطلاعات سبد خریدی با این عنوان یافت نشد")); return(RedirectToAction("Index", "ShopProductController")); } // شماره خرید var OrderId = new Random().Next(1000, int.MaxValue).ToString(); // رمز گذاری اطلاعات var dataBytes = Encoding.UTF8.GetBytes(string.Format("{0};{1};{2}", _bankConfig.TerminalId, OrderId, 1000)); 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 SignData = Convert.ToBase64String(encryptor.TransformFinalBlock(dataBytes, 0, dataBytes.Length)); // ادرس بازگشت از درگاه var ReturnUrl = string.Format(_bankConfig.ReturnUrl); // ادرس وب سرویس درگاه var ipgUri = string.Format("{0}/api/v0/Request/PaymentRequest", _bankConfig.PurchasePage); #endregion #region Informations // آماده سازی اطلاعات برای ا var data = new { _bankConfig.TerminalId, _bankConfig.MerchantId, Amount = 1000, SignData, _bankConfig.ReturnUrl, LocalDateTime = DateTime.Now, OrderId, //MultiplexingData = request.MultiplexingData }; #endregion #region RequestBuild var res = ManageBankService.CallApi <BankResultViewModel>(ipgUri, data); res.Wait(); #endregion #region Request Result if (res != null && res.Result != null) { if (res.Result.ResCode == "0") { factorInfo.OrderId = OrderId; await _usersPaymentRepository.MapAddAsync(SetValue(res.Result.Token)); await _shopOrderRepository.UpdateAsync(factorInfo); Response.Redirect(string.Format("{0}/Purchase/Index?token={1}", _bankConfig.PurchasePage, res.Result.Token)); } ViewBag.Message = res.Result.Description; return(View()); } #endregion return(View()); #region LocalMethods AddUserPaymentViewModel SetValue(string token) { return(new AddUserPaymentViewModel() { Amount = data.Amount, DateTime = data.LocalDateTime, OrderId = data.OrderId, Token = token, UserId = UserId, ShopOrderId = id }); } #endregion }