Example #1
0
        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();
        }