public PaymentSettingsResponse OnlineDepositPaymentSettings([FromUri] DefaultPaymentSettingsRequest request) { var defaultVipLevel = _playerQueries.GetDefaultVipLevel(request.BrandId); if (defaultVipLevel == null) { throw new RegoValidationException(ErrorMessagesEnum.ThereIsNoDefaultVipLevelForRequestedBrand.ToString()); } var paymentGetewaySettings = _paymentGatewaySettingsQueries.GetOnePaymentGatewaySettingsByPlayerId(PlayerId); if (paymentGetewaySettings == null) { throw new RegoException("PaymentGatewaySettings not found"); } var method = paymentGetewaySettings.OnlinePaymentMethodName; var paymentSetting = _paymentQueries.GetOnlinePaymentSettings(request.BrandId, PaymentType.Deposit, defaultVipLevel.Id.ToString(), method, request.CurrencyCode); return(new PaymentSettingsResponse(paymentSetting)); }
public async Task <SubmitOnlineDepositRequestResult> SubmitOnlineDepositRequest(OnlineDepositRequest request) { var validationResult = new OnlineDepositRequestValidator(_repository).Validate(request); if (!validationResult.IsValid) { throw new RegoValidationException(validationResult); } var player = _repository.Players.FirstOrDefault(x => x.Id == request.PlayerId); var paymentGetewaySettings = _paymentGatewaySettingsQueries.GetOnePaymentGatewaySettingsByPlayerId(player.Id); if (paymentGetewaySettings == null) { throw new RegoException("PaymentGatewaySettings not found"); } var method = paymentGetewaySettings.OnlinePaymentMethodName; var channel = paymentGetewaySettings.Channel; var paymentUrl = paymentGetewaySettings.EntryPoint; _validator.ValidatePaymentSetting(request.PlayerId, method, request.Amount, player.CurrencyCode); var number = GenerateOrderId(method, channel); var merchantId = GetDepositMerchantId(); var hashKey = GetDepositHashKey(); var depositParams = new OnlineDepositParams(); depositParams.Method = method; depositParams.Channel = channel; depositParams.Amount = request.Amount; depositParams.MerchantId = merchantId; depositParams.OrderId = number; depositParams.Currency = player.CurrencyCode; depositParams.Language = request.CultureCode; depositParams.ReturnUrl = request.ReturnUrl; depositParams.NotifyUrl = request.NotifyUrl; depositParams.Signature = EncryptHelper.GetMD5HashInHexadecimalFormat(depositParams.SignParams + hashKey); var id = Guid.NewGuid(); var brandId = player.BrandId; var now = _paymentQueries.GetBrandDateTimeOffset(brandId); var onlineDepositEntity = new Entities.OnlineDeposit(id, number, request, depositParams, brandId, now); var submitEvent = onlineDepositEntity.Submit(); using (var scope = CustomTransactionScope.GetTransactionScopeAsync()) { if (!string.IsNullOrWhiteSpace(request.BonusCode) || (request.BonusId.HasValue && request.BonusId != Guid.Empty)) { var bonusRedemptionId = await _bonusApiProxy.ApplyForBonusAsync(new DepositBonusApplication { PlayerId = request.PlayerId, BonusId = request.BonusId, Amount = request.Amount, DepositId = onlineDepositEntity.Data.Id, BonusCode = onlineDepositEntity.Data.BonusCode }); onlineDepositEntity.SetBonusRedemption(bonusRedemptionId); } _repository.OnlineDeposits.Add(onlineDepositEntity.Data); _eventBus.Publish(submitEvent); _repository.SaveChanges(); scope.Complete(); } return(new SubmitOnlineDepositRequestResult { DepositId = id, RedirectUrl = new Uri(paymentUrl), RedirectParams = depositParams }); }