public static bool FraudCheck(FundsTransferRequest request) { string r = RandomGeneratedStrings(request.cract, string.Empty, string.Empty, request.dract, request.trnamt.ToString(), string.Empty, string.Empty, request.trnrefno, request.trans_type); return(r == request.guid); }
private async Task <FundsResponseResult> DigestResponseItemAsync( FundsResponseFile file, FundsResponseFileItem item, FundsTransferRequest fundsTransferRequest, FundsTransferBatchMessage responseBatchMessage, SO statefulObject, State stateAfterRequest) { if (file == null) { throw new ArgumentNullException(nameof(file)); } if (item == null) { throw new ArgumentNullException(nameof(item)); } if (fundsTransferRequest == null) { throw new ArgumentNullException(nameof(fundsTransferRequest)); } var line = new FundsResponseLine(file, item, responseBatchMessage.ID); return(await DigestResponseLineAsync(fundsTransferRequest, line, statefulObject, stateAfterRequest)); }
public FundsTransferRequest GetFundsTransferRequest() { var fundsTransfer = new FundsTransferRequest(); SetBaseHeaders(fundsTransfer); SetBaseFields(fundsTransfer); SetBaseUri(fundsTransfer); return(fundsTransfer); }
public static TransLog GetTransLog(FundsTransferRequest request) { return(new TransLog() { creditaccount = request.cract, debitaccount = request.dract, debit_branch = request.branch_code, post_amt = request.trnamt.ToString(), refno = request.trnrefno }); }
public IActionResult Donate(long merchant, long amount, string cardHolder, string cardNumber, string cardExpiry, string cardCvc, string message, string currency) { var expiry = DateTime.Parse(cardExpiry); var request = new FundsTransferRequest { MerchantId = merchant, Amount = amount, CardNumber = cardNumber, CardExpiryDate = $"{expiry.Year}-{expiry.Month}", Currency = currency, LocalTransactionDateTime = DateTimeOffset.Now }; var result = FundsTransferService.TransferFunds(request); return(Donate(result)); }
public async Task TransferMoneyToBankAccount(string amount, string productCode, string accountNumber, string phoneNumber) { var estelClient = new EstelServicesClient(); Logger.Info("amount to transfer: " + amount); var fundsTransferRequest = new FundsTransferRequest(); fundsTransferRequest.amount = amount; fundsTransferRequest.mpin = "7F1359753577B274D717DC2E41BA1E51"; fundsTransferRequest.agentCode = "APEX_PINRDM"; fundsTransferRequest.destination = accountNumber; fundsTransferRequest.mobilenumber = phoneNumber; fundsTransferRequest.productCode = productCode; var fundsTransferResponse = (await estelClient.getFundsTransferAsync(fundsTransferRequest)).Body.getFundsTransferReturn; switch (fundsTransferResponse.resultcode) { case "0": Logger.Info("destination: " + fundsTransferResponse.destination); Logger.Info("bank code: " + fundsTransferResponse.productcode); Logger.Info("reason: " + fundsTransferResponse.reason); Logger.Info("result code: " + fundsTransferResponse.resultcode); Logger.Info("description: " + fundsTransferResponse.resultdescription); break; default: Logger.Info("destination: " + fundsTransferResponse.destination); Logger.Info("bank code: " + fundsTransferResponse.productcode); Logger.Info("reason: " + fundsTransferResponse.reason); Logger.Info("result code: " + fundsTransferResponse.resultcode); Logger.Info("description: " + fundsTransferResponse.resultdescription); throw new MoneyTransferException("Error completing request"); } }
private async Task <FundsResponseResult> DigestResponseLineAsync( FundsTransferRequest fundsTransferRequest, FundsResponseLine line, SO statefulObject, State stateAfterRequest) { if (fundsTransferRequest == null) { throw new ArgumentNullException(nameof(fundsTransferRequest)); } if (line == null) { throw new ArgumentNullException(nameof(line)); } if (statefulObject == null || stateAfterRequest == null) { return(await DigestResponseLineAsync(fundsTransferRequest, line)); } var eventType = GetEventTypeFromResponseLine(line); var previousEvent = TryGetExistingDigestedFundsTransferEvent(fundsTransferRequest, eventType, line.ResponseCode); if (previousEvent != null) { return(new FundsResponseResult { Event = previousEvent, Line = line, IsAlreadyDigested = true }); } var actionArguments = new Dictionary <string, object> { [StandardArgumentKeys.BillingItem] = line }; try { var fundsResponseResult = new FundsResponseResult { Line = line }; // Attempt to get the next path to be executed. Any exception will be recorded in a funds transfer event with ExceptionData. string statePathCodeName = TrySpecifyNextStatePath(statefulObject, stateAfterRequest, line); if (statePathCodeName != null) // Should a path be executed? { var statePath = await statePathsByCodeNameCache.Get(statePathCodeName); using (var transaction = this.DomainContainer.BeginTransaction()) { var transition = await ExecuteStatePathAsync( statefulObject, statePath, actionArguments); fundsResponseResult.Event = transition.FundsTransferEvent; R remittance = null; if (transition.FundsTransferEventID.HasValue) { remittance = await this.DomainContainer.Remittances.SingleOrDefaultAsync(r => r.FundsTransferEventID == transition.FundsTransferEventID); } if (transition.FundsTransferEvent != null) { await OnResponseLineDigestionSuccessAsync(line, transition.FundsTransferEvent, remittance); } await transaction.CommitAsync(); } } else // If no path is specified, record the event directly. { using (var accountingSession = CreateAccountingSession()) using (GetElevatedAccessScope()) using (var transaction = this.DomainContainer.BeginTransaction()) { var directActionResult = await accountingSession.AddFundsTransferEventAsync( fundsTransferRequest, line.Time, eventType, j => AppendResponseJournalAsync(j, fundsTransferRequest, line, eventType, null), line.BatchMessageID, line.ResponseCode, line.TraceCode, line.Comments); fundsResponseResult.Event = directActionResult.FundsTransferEvent; var remittance = TryGetTransferRemittance(directActionResult); await OnResponseLineDigestionSuccessAsync(line, directActionResult.FundsTransferEvent, remittance); await transaction.CommitAsync(); } } return(fundsResponseResult); } catch (Exception exception) { this.DomainContainer.ChangeTracker.UndoChanges(); // Undo attempted entities. return(await RecordDigestionExceptionEventAsync(fundsTransferRequest, line, exception, GetEventTypeFromResponseLine(line))); } }
public async Task <IActionResult> transfer([FromBody] FundsTransferRequest request) { FundsTransferResponse resp = new FundsTransferResponse(); AccountEnquiryResponse aresp = new AccountEnquiryResponse(); try { if (!ModelState.IsValid) { return(BadRequest(Commons.Helpers.Utility.GetResponse(ModelState))); } //request.trnrefno = $"{request.branch_code}{request.product}{request.l_acs_ccy}" + // $"{Commons.Helpers.Utility.RandomString(6)}"; request.trans_type = 1; if (request.is_own_account && !await _orclRepo.IsOwnAccount(request)) { return(StatusCode((int)HttpStatusCode.BadRequest, Commons.Helpers.Utility.GetResponse(Constant.ACCOUNT_NOT_LINKED, HttpStatusCode.BadRequest))); } if (!string.IsNullOrEmpty(request.cract) && request.cract.Length != 9) { aresp = await _orclRepo.GetAccountEnquiryByAccountNumber(new AccountEnquiryRequest() { accountNumber = request.cract }); if (aresp?.ac_stat_no_cr?.ToUpper().Trim() != "N") { return(StatusCode((int)HttpStatusCode.BadRequest, Commons.Helpers.Utility.GetResponse(Constant.STAT_NO_CR, HttpStatusCode.BadRequest))); } } if (!string.IsNullOrEmpty(request.dract) && request.dract.Length != 9) { aresp = await _orclRepo.GetAccountEnquiryByAccountNumber(new AccountEnquiryRequest() { accountNumber = request.dract }); if (aresp?.ac_stat_no_dr?.ToUpper().Trim() != "N") { return(StatusCode((int)HttpStatusCode.BadRequest, Commons.Helpers.Utility.GetResponse(Constant.STAT_NO_DR, HttpStatusCode.BadRequest))); } if (aresp?.ac_stat_dormant?.ToUpper().Trim() != "N") { return(StatusCode((int)HttpStatusCode.BadRequest, Commons.Helpers.Utility.GetResponse(Constant.STAT_DORMANT, HttpStatusCode.BadRequest))); } } resp = await _orclRepo.ExecuteTransaction(request); if (resp.status?.ToUpper().Trim() == "Y") { resp.id = request.trnrefno; resp.trnrefno = request.trnrefno; } } catch (Exception ex) { _logger.LogError($"{request.cract} : {request.dract}:- {ex.ToString()}"); return(StatusCode((int)HttpStatusCode.InternalServerError, Commons.Helpers.Utility.GetResponse(ex))); } return(CreatedAtAction("transfer", resp)); }
/// <summary> /// Decides the state path to execute on a stateful object /// when a <see cref="FundsResponseLine"/> arrives for it. /// Returns null to indicate that no path should be executed and the that the line should /// be consumed directly. Throws an exception to abort normal digestion of the line /// and to record a transfer event with <see cref="FundsTransferEvent.ExceptionData"/> set instead. /// </summary> /// <param name="statefulObject">The stateful object for which to decide the state path.</param> /// <param name="stateAfterFundsTransferRequest">The state of the <paramref name="statefulObject"/> right after the funds transfer request.</param> /// <param name="fundsResponseLine">The batch line arriving for the stateful object.</param> /// <param name="fundsTransferRequest">The funds transfer request being handled.</param> /// <returns>Returns the code name of the path to execute or null to execute none.</returns> /// <exception cref="Exception"> /// Thrown to record a funds transfer event with its <see cref="FundsTransferEvent.ExceptionData"/> /// containing the thrown exception. /// </exception> protected abstract string TrySpecifyNextStatePath( SO statefulObject, State stateAfterFundsTransferRequest, FundsResponseLine fundsResponseLine, FundsTransferRequest fundsTransferRequest);