public virtual Task <string> Verify(VerifyRequestDto input)
        {
            if (_signatureChecker.Validate(_officialOptions.Token, input.Timestamp, input.Nonce, input.Signature))
            {
                return(Task.FromResult(input.EchoStr));
            }

            return(Task.FromResult("非法参数。"));
        }
Example #2
0
        public virtual Task <string> Verify(VerifyRequestDto input)
        {
            var options = _optionsResolver.Resolve();

            if (_signatureChecker.Validate(options.Token, input.Timestamp, input.Nonce, input.Signature))
            {
                return(Task.FromResult(input.EchoStr));
            }

            return(Task.FromResult("非法参数。"));
        }
Example #3
0
        public virtual async Task <string> Verify(VerifyRequestDto input)
        {
            var options = await _optionsResolver.ResolveAsync();

            if (_signatureChecker.Validate(options.Token, input.Timestamp, input.Nonce, input.Signature))
            {
                return(input.EchoStr);
            }

            return("非法参数。");
        }
        public async Task <IActionResult> VerifySend(VerifyRequestDto verifyRequestDto)
        {
            var model = new GateApiReturn <VerifyResponseDto>
            {
                Status = true
            };
            //Error
            var factorFromRepo = await _dbFinancial.FactorRepository.GetByIdAsync(verifyRequestDto.Token);

            if (factorFromRepo == null)
            {
                errorModel.Messages.Clear();
                errorModel.Messages = new string[] { "تراکنشی با این مشخصات یافت نشد" };
                return(BadRequest(errorModel));
            }
            if (factorFromRepo.DateModified.AddMinutes(20) < DateTime.Now)
            {
                errorModel.Messages.Clear();
                errorModel.Messages = new string[] { "زمان تایید تراکنش شما گذشته است" };
                return(BadRequest(errorModel));
            }
            if (factorFromRepo.IsAlreadyVerified)
            {
                errorModel.Messages.Clear();
                errorModel.Messages = new string[] { "این تراکنش قبلا بررسی شده است" };
                return(BadRequest(errorModel));
            }
            var gateFromRepo = (await _db.GateRepository.GetManyAsync(p => p.Id == verifyRequestDto.Api, null, "Wallet")).SingleOrDefault();

            if (gateFromRepo == null)
            {
                errorModel.Messages.Clear();
                errorModel.Messages = new string[] { "Api درگاه معتبر نمیباشد" };
                return(BadRequest(errorModel));
            }
            var userDocuments = await _db.DocumentRepository
                                .GetManyAsync(p => p.Approve == 1 && p.UserId == gateFromRepo.Wallet.UserId, null, "");

            if (!userDocuments.Any())
            {
                errorModel.Messages.Clear();
                errorModel.Messages = new string[] { "مدارک کاربر صاحب درگاه تکمیل نمیباشد" };
                return(BadRequest(errorModel));
            }
            if (!gateFromRepo.IsActive)
            {
                errorModel.Messages.Clear();
                errorModel.Messages = new string[] { "این درگاه غیر فعال میباشد . درصورت نیاز با پشتیبانی در تماس باید" };
                return(BadRequest(errorModel));
            }
            if (gateFromRepo.IsIp)
            {
                var currentIp     = HttpContext.Connection.RemoteIpAddress.ToString(); //::1
                var gateWebsiteIp = await _utilities.GetDomainIpAsync(gateFromRepo.WebsiteUrl);

                if (currentIp != gateWebsiteIp)
                {
                    errorModel.Messages.Clear();
                    errorModel.Messages = new string[] { "آی پی وبسایت درخواست دهنده پرداخت معبتر نمیباشد" };
                    return(BadRequest(errorModel));
                }
            }


            //Verify
            var trackingNumber = Convert.ToInt64(factorFromRepo.RefBank);
            var verifyResult   = await _onlinePayment.VerifyAsync(trackingNumber);

            if (verifyResult.IsSucceed)
            {
                factorFromRepo.Status            = true;
                factorFromRepo.IsAlreadyVerified = true;
                factorFromRepo.DateModified      = DateTime.Now;
                factorFromRepo.Message           = "تراکنش با موفقیت انجام شد";
                _dbFinancial.FactorRepository.Update(factorFromRepo);
                await _dbFinancial.SaveAsync();

                await _walletService
                .IncreaseInventoryAsync(factorFromRepo.EndPrice, factorFromRepo.EnterMoneyWalletId, true);

                model.Messages.Clear();
                model.Messages = new string[] { "تراکنش با موفقیت انجام شد" };
                model.Result   = new VerifyResponseDto
                {
                    Amount       = factorFromRepo.EndPrice,
                    FactorNumber = factorFromRepo.FactorNumber,
                    RefBank      = "MPC-" + factorFromRepo.RefBank,
                    Mobile       = factorFromRepo.Mobile,
                    Email        = factorFromRepo.Email,
                    Description  = factorFromRepo.Description,
                    CardNumber   = factorFromRepo.ValidCardNumber
                };
                return(Ok(model));
            }
            else
            {
                factorFromRepo.IsAlreadyVerified = true;
                factorFromRepo.DateModified      = DateTime.Now;
                factorFromRepo.Message           = verifyResult.Message;
                _dbFinancial.FactorRepository.Update(factorFromRepo);
                await _dbFinancial.SaveAsync();


                errorModel.Messages.Clear();
                errorModel.Messages = new string[] { verifyResult.Message };
                return(BadRequest(errorModel));
            }
        }