public async Task <Response <InitiatePaymentResponse> > StartNewTransaction(InitiateTransactionCommand request) { var retrieveUser = await _accountService.GetUserById(_authenticatedUser.UserId); if (!retrieveUser.Succeeded || retrieveUser.Data is null) { return new Response <InitiatePaymentResponse> { Succeeded = false, Message = retrieveUser.Message, Errors = retrieveUser.Errors } } ; var transaction = _mapper.Map <Transaction>(request); transaction.UserId = _authenticatedUser.UserId; transaction.Reference = Guid.NewGuid().ToString().Replace("-", string.Empty); transaction.TransactionStatus = Domain.Enums.TransactionStatus.Initiated; await this.AddAsync(transaction); var paymentRequest = new InitiatePaymentRequest { //paystack accepts amount in kobo, please do not change except standards have changed Amount = (transaction.Amount * 100).ToString(), Email = retrieveUser.Data.Email, Reference = transaction.Reference, Callback_Url = $"{_paystackSettings.PaymentCallback}" }; var response = await _paymentService.InitializePaystackPayment(paymentRequest); if (response.status && response.data != null) { transaction.SuccessfullyInitiated = true; transaction.InitiateMessage = response.message; await this.UpdateAsync(transaction); return(new Response <InitiatePaymentResponse> { Data = response.data, Message = response.message, Succeeded = response.status }); } transaction.SuccessfullyInitiated = false; transaction.InitiateMessage = response.message; await this.UpdateAsync(transaction); return(new Response <InitiatePaymentResponse> { Succeeded = response.status, Message = response.message, }); } }
public async Task <IActionResult> StartTransaction(InitiateTransactionCommand command) { return(Ok(await Mediator.Send(command))); }