public async Task <ActionResult> OkPage() { _log.Info($"Ok page ({Request.QueryString.ToString()})"); await _rawLogRepository.RegisterEventAsync(RawLogEvent.Create("Ok page", Request.QueryString.ToString())); return(View()); }
public async Task <ActionResult> Webhook() { _log.Info("Webhook"); try { WebhookEvent webhookEvent; using (var reader = new StreamReader(Request.Body)) { var body = await reader.ReadToEndAsync(); var data = _encryptionService.Decrypt(body); webhookEvent = JsonConvert.DeserializeObject <WebhookEvent>(data); if (webhookEvent?.OriginalTxnStatus == TransactionStatus.Pending) { _log.Info("Skip webhook event with pending status"); return(Ok()); } } if (webhookEvent != null) { string data = webhookEvent.ToJson(); _log.Info($"Webhook data {webhookEvent.TxnReference}", context: data); await _rawLogRepository.RegisterEventAsync(RawLogEvent.Create(nameof(Webhook), data)); _cqrsEngine.SendCommand(new CashInCommand { TransactionId = webhookEvent.TxnReference, Request = data }, Link4PayBoundedContext.Name, Link4PayBoundedContext.Name); } } catch (Exception ex) { _log.Error(ex); return(Ok()); } return(Ok()); }
public override async Task <PaymentUrlResponse> GetPaymentUrl(PaymentUrlRequest request, ServerCallContext context) { try { string errorMessage = string.Empty; ErrorDetails.Types.ErrorType?errorType = null; if (_supportedCurrencies.Any() && !_supportedCurrencies.Contains(request.Transaction.AssetId)) { errorMessage = $"Asset {request.Transaction.AssetId} is not supported"; errorType = ErrorDetails.Types.ErrorType.CurrencyNotSupported; } if (_supportedCountries.Any() && !string.IsNullOrEmpty(request.Details.CountryIso3) && !_supportedCountries.Contains(request.Details.CountryIso3)) { errorMessage = $"Country {request.Details.CountryIso3} is not supported"; errorType = ErrorDetails.Types.ErrorType.CountryNotSupported; } if (errorType != null) { _log.Warning(errorMessage); return(new PaymentUrlResponse { Error = new ErrorDetails { ErrorType = errorType.Value, Message = errorMessage } }); } var bankCardsFees = await _feeCalculatorClient.GetBankCardFees(); var feeAmount = Math.Round(request.Transaction.Amount * bankCardsFees.Percentage, 15); var totalAmount = (decimal)request.Transaction.Amount + (decimal)feeAmount; var url = await _link4PayApiService.GetPaymentUrlAsync(new CardPaymentRequest { Merchant = new MerchantInfo { CustomerId = request.Transaction.ExternalClientId, MerchantId = _link4PaySettings.ClientId }, Transaction = new TransactionInfo { TxnAmount = totalAmount.ToString("F2"), CurrencyCode = request.Transaction.AssetId, TxnReference = request.Transaction.TransactionId, Payout = false }, Customer = new CustomerInfo { BillingAddress = new AddressInfo { FirstName = request.Details?.FirstName, LastName = request.Details?.LastName, EmailId = request.Details?.Email, MobileNo = request.Details?.Phone } }, Url = new UrlInfo { SuccessUrl = $"{(string.IsNullOrEmpty(request.Urls?.OkUrl?.Trim()) ? _successUrl : request.Urls?.OkUrl)}?v=1", FailUrl = string.IsNullOrEmpty(request.Urls?.FailUrl?.Trim()) ? _failUrl : request.Urls?.FailUrl, CancelUrl = string.IsNullOrEmpty(request.Urls?.CancelUrl?.Trim()) ? _cancelUrl : request.Urls?.CancelUrl } }); if (string.IsNullOrEmpty(url)) { return(new PaymentUrlResponse { Error = new ErrorDetails { ErrorType = ErrorDetails.Types.ErrorType.Unknown, Message = "Error getting the payment url" } }); } await _rawLogRepository.RegisterEventAsync( RawLogEvent.Create("Payment Url has been created", request.ToJson()), request.Transaction.ClientId); var info = OtherPaymentInfo.Create( firstName: request.Details.FirstName, lastName: request.Details.LastName, city: string.Empty, zip: string.Empty, address: string.Empty, country: request.Details.CountryIso3, email: request.Details.Email, contactPhone: request.Details.Phone, dateOfBirth: string.Empty) .ToJson(); var pt = PaymentTransaction.Create( request.Transaction.TransactionId, CashInPaymentSystem.Link4Pay, request.Transaction.ClientId, request.Transaction.Amount, feeAmount, request.Transaction.AssetId, null, request.Transaction.AssetId, info ); await Task.WhenAll( _paymentTransactionsRepository.CreateAsync(pt), _paymentTransactionEventsLog.WriteAsync(PaymentTransactionLogEvent.Create(request.Transaction.TransactionId, "", "Registered", request.Transaction.ClientId)), _paymentTransactionEventsLog.WriteAsync(PaymentTransactionLogEvent.Create(request.Transaction.TransactionId, url, "Payment Url has created", request.Transaction.ClientId)) ); return(new PaymentUrlResponse { PaymentUrl = url, OkUrl = $"{(string.IsNullOrEmpty(request.Urls?.OkUrl?.Trim()) ? _successUrl : request.Urls?.OkUrl)}?v=1", FailUrl = string.IsNullOrEmpty(request.Urls?.FailUrl?.Trim()) ? _failUrl : request.Urls?.FailUrl, CancelUrl = string.IsNullOrEmpty(request.Urls?.CancelUrl?.Trim()) ? _cancelUrl : request.Urls?.CancelUrl }); } catch (Exception ex) { _log.Error(ex); return(new PaymentUrlResponse { Error = new ErrorDetails { ErrorType = ErrorDetails.Types.ErrorType.Unknown, Message = "Error getting the payment url" } }); } }