public Iso8583Message ProcessTransaction(Iso8583Message message, ListenerPeer listener) { if (message != null) { if (!message.IsReversalOrChargeBack()) { message = CheckIfFeeApplies(message); var fee = ExtractFee(message); var trxType = ExtractTransactionType(message); var accountNumber = ExtractAccountNumber(message); var amount = ExtractAmount(message); var STAN = ExtractSTAN(message); var RRN = ExtractRRN(message); if (trxType.ToString().Equals(Codes.WITHDRAWAL) || trxType.ToString().Equals(Codes.PAYMENT)) { if (accountNumber != null && amount != null) { if (trxType.ToString().Equals(Codes.PAYMENT)) { } var responseCode = CBA.PerformDoubleEntry("Debit", accountNumber, (amount + fee), CheckIfRemote(message)); message = SetResponseMessage(message, responseCode); message = SendResponseMessage(listener, message); if (!message.Fields[39].Value.ToString().Equals(Codes.APPROVED)) { Debug.WriteLine("Transaction Incomplete ..."); } else { new TransactionLogger().LogTransaction(message, "Debit", "Request"); Debug.WriteLine("Transaction Complete ..."); } } } else if (trxType.ToString().Equals(Codes.BALANCE_ENQUIRY)) { var amountEnquired = CBA.BalanceEnquiry(accountNumber); if (amountEnquired != null) { message.Fields.Add(54, amountEnquired); message.Fields.Add(4, "0000000000"); SetResponseMessage(message, Codes.APPROVED); message = SendResponseMessage(listener, message); new TransactionLogger().LogTransaction(message, null, "Balance Enquiry"); } } return(message); } if (message.IsReversalOrChargeBack()) { message = PerformReversal(message, listener); } } return(message); }
public void IsReversalOrChargeBack() { Iso8583Message message = new Iso8583Message(); message.MessageTypeIdentifier = 1110; Assert.IsFalse(message.IsReversalOrChargeBack()); message.MessageTypeIdentifier = 1210; Assert.IsFalse(message.IsReversalOrChargeBack()); message.MessageTypeIdentifier = 1310; Assert.IsFalse(message.IsReversalOrChargeBack()); message.MessageTypeIdentifier = 1410; Assert.IsTrue(message.IsReversalOrChargeBack()); message.MessageTypeIdentifier = 1510; Assert.IsFalse(message.IsReversalOrChargeBack()); message.MessageTypeIdentifier = 1610; Assert.IsFalse(message.IsReversalOrChargeBack()); message.MessageTypeIdentifier = 1710; Assert.IsFalse(message.IsReversalOrChargeBack()); message.MessageTypeIdentifier = 1810; Assert.IsFalse(message.IsReversalOrChargeBack()); }
private void ListenerPeerReceive(object sender, ReceiveEventArgs e) { ListenerPeer listenerPeer = sender as ListenerPeer; Iso8583Message message = e.Message as Iso8583Message; if (message == null) { return; } //logger.Log("Receiving Message >>>>"); Processor processor = new Processor(); Iso8583Message response; try { processor.LogTransaction(message); if (message.IsReversalOrChargeBack()) { response = processor.Process(message); } else { response = processor.Process(message); } processor.LogTransaction(response); //logger.Log("Sending Response >>>>"); } catch (Exception ex) { message.Fields.Add(39, "06"); message.SetResponseMessageTypeIdentifier(); processor.LogTransaction(message); response = message; //processor.LogTransaction(response); //logger.Log("Error, Something went wrong somewhere"); } listenerPeer.Send(response); listenerPeer.Close(); listenerPeer.Dispose(); }