private async Task CallTopUpWebService(string toAccountNumber, long?amount, string cvv, TLV emvData) { Device.BeginInvokeOnMainThread(() => { gridProgress.IsVisible = true; }); try { Proxies.DCEMVDemoServerClient client = SessionSingleton.GenDCEMVServerApiClient(); using (SessionSingleton.HttpClient) { CCTopUpTransaction tx = new CCTopUpTransaction() { Amount = amount.Value, CVV = cvv, EMV_Data = TLVasJSON.ToJSON(emvData), }; await client.TransactionTopupPostAsync(tx.ToJsonString()); } } catch (Exception ex) { throw ex; } finally { Device.BeginInvokeOnMainThread(() => { gridProgress.IsVisible = false; }); } }
public void TopUp(string json) { CCTopUpTransaction tx = CCTopUpTransaction.FromJsonString(json); if (tx.Amount == 0) { throw new ValidationException("Invalid Amount"); } if (string.IsNullOrEmpty(tx.CVV)) { throw new ValidationException("Invalid CVV"); } CCTopUpTransactionPM tpm = new CCTopUpTransactionPM() { Amount = tx.Amount, CVV = tx.CVV, EMV_Data = tx.EMV_Data }; TLV EMV_Data = TLVasJSON.FromJSON(tpm.EMV_Data); //TODO: only accept transactions from EMV cards, not DC EMV cards //TODO: reject contact transactions, with ARQC, contact would have already been online via //AuthTransactionToIssuer //contactless online //if (((EMV_Data.Children.Get(EMVTagsEnum.CRYPTOGRAM_INFORMATION_DATA_9F27_KRN.Tag).Value[0] & 0xC0) >> 6) == (byte)ACTypeEnum.ARQC) //{ // try // { // ApproverResponse onlineResponse = GoOnline( // new ApproverRequest() // { // EMV_Data = EMV_Data, // }); // if (!onlineResponse.IsApproved) // { // throw new ValidationException("Contactless Online Auth Declined"); // } // } // catch (Exception ex) // { // throw new ValidationException("Contactless Online Auth Declined, Unable to go online:" + ex.Message); // } //} bool isAccepted = AdviseTransactionToIssuer(); if (!isAccepted) { throw new ValidationException("Advice Message not accepted"); } _transactionRepository.AddTopUpTransaction(tpm, GetCurrentUserId()); }
public Account GetAccountTransactions() { AccountPM account = accountsRepository.GetTransactionsForUser(GetCurrentUserId()); Account accountDetails = new Account() { AccountNumberId = account.AccountNumberId, AccountState = account.AccountState, CustomerType = account.CustomerType, FirstName = account.FirstName, LastName = account.LastName, BusinessName = account.BusinessName, CompanyRegNumber = account.CompanyRegNumber, TaxNumber = account.TaxNumber, Balance = account.Balance, }; account.TransactionsFrom.ForEach(x => { CardTransferTransaction tx = new CardTransferTransaction() { AccountFrom = x.AccountNumberIdFromRef, //AccountTo = x.AccountNumberIdToRef, Amount = x.Amount, TransactionType = x.TransactionType, DateTime = x.TransactionDateTime, TransactionId = x.TransactionId, }; accountDetails.TransferFromTransactions.Add(tx); }); account.TransactionsTo.ForEach(x => { CardTransferTransaction tx = new CardTransferTransaction() { //AccountFrom = x.AccountNumberIdFromRef, AccountTo = x.AccountNumberIdToRef, Amount = x.Amount, TransactionType = x.TransactionType, DateTime = x.TransactionDateTime, TransactionId = x.TransactionId, }; accountDetails.TransferToTransactions.Add(tx); }); account.POSTransactionsTo.ForEach(x => { POSTransaction tx = new POSTransaction() { AccountNumberId = x.AccountNumberIdToRef, TransactionDateTime = x.TransactionDateTime, TransactionId = x.TransactionIdRef, POSTransactionId = x.POSTransactionId, }; accountDetails.POSTransactions.Add(tx); }); account.CCTopUpTransactions.ForEach(x => { CCTopUpTransaction tx = new CCTopUpTransaction() { AccountNumberId = x.AccountNumberIdToRef, Amount = x.Amount, DateTime = x.TransactionDateTime, }; accountDetails.TopUpTransactions.Add(tx); }); return(accountDetails); }