Example #1
0
        public async Task <ActionResult <PaymentRequestResponse> > SendRequest(SendPaymentRequest request)
        {
            if (request.Amount <= 0)
            {
                return(BadRequest("Amount must be positive."));
            }

            if ((request.WithReceipts || request.WithStatement) && request.Transactions is null)
            {
                return(BadRequest("No transactions provided."));
            }

            if (request.Recipients.Length == 0)
            {
                return(BadRequest("No recipients provided."));
            }

            if (request.Recipients.Any(email => !IsValidEmail(email)))
            {
                return(BadRequest("One or more of the provided e-mail addresses is invalid."));
            }

            var bunqTab = CreatePaymentRequest(
                request.Amount,
                request.Currency,
                request.Description);

            var username   = User.Claims.First(c => c.Type == TokenService.UsernameClaim).Value;
            var isMailSent = await SendPaymentRequest(username, request, bunqTab.BunqmeTabShareUrl);

            return(new PaymentRequestResponse(bunqTab.BunqmeTabShareUrl, isMailSent));
        }
Example #2
0
        private async Task <bool> SendPaymentRequest(string sender, SendPaymentRequest paymentRequest, string requestUrl)
        {
            var body = new StringBuilder();

            body.AppendLine("Hello!");
            body.AppendLine($"{sender} requests you to pay {paymentRequest.Currency} {paymentRequest.Amount}.");
            if (!string.IsNullOrEmpty(paymentRequest.Description))
            {
                body.AppendLine();
                body.AppendLine("Description:");
                body.AppendLine(paymentRequest.Description);
            }
            body.AppendLine();
            body.AppendLine($"Pay here: {requestUrl}");

            var email = new MailBuilder(this.mailConfig)
                        .WithBody(body.ToString())
                        .WithSubject($"New payment request from {sender}")
                        .AddRecipients(sender)
                        .AddBccRecipients(paymentRequest.Recipients);

            if (paymentRequest.WithStatement)
            {
                using var file = new MemoryStream();

                using (var fileWriter = new StreamWriter(file))
                    using (var csvHelper = new CsvWriter(fileWriter, CultureInfo.InvariantCulture))
                    {
                        csvHelper.WriteHeader(typeof(Data.Transaction));
                        csvHelper.Flush();
                        fileWriter.WriteLine();
                        csvHelper.WriteRecords(paymentRequest.Transactions.OrderByDescending(t => t.CreatedOn));
                    }

                var fileBytes = file.ToArray();
                email.WithAttachment("payments.csv", "text/csv", Convert.ToBase64String(fileBytes));
            }

            return(await this.emailService.SendMail(email.Build()));
        }
Example #3
0
 public PaymentResult SendPaymentPost(SendPaymentRequest sendPaymentRequest)
 {
     return(SendPayment(sendPaymentRequest.OrderId, sendPaymentRequest.PhoneNumber));
 }