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; }); } }
private async void EmvTxCtl_TxCompleted(object sender, EventArgs e) { try { if ((e as TxCompletedEventArgs).EMV_Data.IsPresent()) { TLV data = (e as TxCompletedEventArgs).EMV_Data.Get(); string emvData = TLVasJSON.ToJSON(data); string uid = Formatting.BcdToString(data.Children.Get(EMVTagsEnum.APPLICATION_PRIMARY_ACCOUNT_NUMBER_PAN_5A_KRN.Tag).Value); await RegisterCard(SessionSingleton.Account.AccountNumberId, uid); Device.BeginInvokeOnMainThread(() => { SessionSingleton.Account.Cards.Add(new Card() { CardSerialNumberId = uid, }); lblStatusCard.Text = string.Format("Card {0} linked", uid); UpdateView(CardAdminViewState.CardAddStatus); }); } else { lblStatusCard.Text = "Card not linked"; UpdateView(CardAdminViewState.CardAddStatus); } } catch (Exception ex) { Device.BeginInvokeOnMainThread(() => { UpdateView(CardAdminViewState.CardAddStatus); lblStatusCard.Text = ex.Message; }); } }
private async Task CallPosTransactWebService(string fromAccountNumber, string toAccountNumber, string cardSerialNumberFrom, string cardSerialNumberTo, long?amount, TransactionType transactionType, TLV emvData) { Device.BeginInvokeOnMainThread(() => { gridProgress.IsVisible = true; }); try { Proxies.DCEMVDemoServerClient client = SessionSingleton.GenDCEMVServerApiClient(); using (SessionSingleton.HttpClient) { POSTransaction posTx = new POSTransaction(); posTx.InvItems = ConvertLineItems(basketItems.ToList()); CardTransferTransaction tx = new CardTransferTransaction() { Amount = amount.Value, AccountFrom = fromAccountNumber, AccountTo = toAccountNumber, CardSerialFrom = cardSerialNumberFrom, CardSerialTo = cardSerialNumberTo, CardFromEMVData = TLVasJSON.ToJSON(emvData), }; await client.StoreSalebycardPostAsync(tx.ToJsonString(), posTx.ToJsonString()); } } catch (Exception ex) { throw ex; } finally { Device.BeginInvokeOnMainThread(() => { gridProgress.IsVisible = false; }); } }
private async void Ta_ProcessCompleted(object sender, EventArgs e) { try { int?amount = Validate.AmountToCents(totalAmount.Total); TransactionType transactionType; string fromAccountNumber = ""; string cardSerialNumberFrom = ""; string toAccountNumber = ""; string cardSerialNumberTo = ""; TerminalProcessingOutcome tpo = (e as TerminalProcessingOutcomeEventArgs).TerminalProcessingOutcome; if (tpo == null)//error occurred, error displayed via Ta_ExceptionOccured { return; } if (tpo is EMVTerminalProcessingOutcome) { TLV dataRecord = ((EMVTerminalProcessingOutcome)tpo).DataRecord; TLV discretionaryData = ((EMVTerminalProcessingOutcome)tpo).DiscretionaryData; if (dataRecord != null) //error or decline { SetStatusLabel("Remove card"); if (discretionaryData != null) { dataRecord.Children.AddListToList(discretionaryData.Children); } string emvData = TLVasJSON.ToJSON(dataRecord); byte[] panBCD; TLV _5A = dataRecord.Children.Get(EMVTagsEnum.APPLICATION_PRIMARY_ACCOUNT_NUMBER_PAN_5A_KRN.Tag); if (_5A != null) { panBCD = _5A.Value; } else { TLV _57 = dataRecord.Children.Get(EMVTagsEnum.TRACK_2_EQUIVALENT_DATA_57_KRN.Tag); if (_57 == null) { throw new Exception("No PAN found"); } String panString = Formatting.ByteArrayToHexString(_57.Value); panBCD = Formatting.StringToBcd(panString.Split('D')[0], false); } switch (flowType) { case FlowType.SendMoneyFromCardToApp: toAccountNumber = SessionSingleton.Account.AccountNumberId; cardSerialNumberFrom = Formatting.BcdToString(panBCD); transactionType = TransactionType.SendMoneyFromCardToApp; break; default: throw new Exception("Unknown flow type:" + flowType); } try { await CallPosTransactWebService(fromAccountNumber, toAccountNumber, cardSerialNumberFrom, cardSerialNumberTo, amount, transactionType, emvData); Device.BeginInvokeOnMainThread(() => { lblTransactSummary.Text = "Transaction Completed Succesfully"; UpdateView(ViewState.Step3Summary); }); } catch (Exception ex) { Device.BeginInvokeOnMainThread(() => { lblTransactSummary.Text = "Declined, could not go online."; UpdateView(ViewState.Step3Summary); }); } } else { SetStatusLabel(string.Format("{0}\n{1}", tpo.UserInterfaceRequest.MessageIdentifier, tpo.UserInterfaceRequest.Status)); } } } catch (Exception ex) { Device.BeginInvokeOnMainThread(() => { lblTransactSummary.Text = ex.Message; UpdateView(ViewState.Step3Summary); }); } }