using System; using System.Net; using BankOfCeylon.BOCServiceReference; using BankOfCeylon.Model; using Common.Models.Bank_Account; using Common.Models.RequestResponse; using Common.Models.Status; using Common.Models.TxnModel; using Common.TPService; using Common.Utility; using log4net; namespace BankOfCeylon.BankOfCeylonAPIService { public class BankOfCeylonAPI : ITPApiServices { private readonly ILog _log = LogManager.GetLogger(typeof(BankOfCeylonAPI)); ServiceComClient _service = new ServiceComClient(); string UserName = GetStatic.ReadWebConfig("boc_username", ""); string Password = GetStatic.ReadWebConfig("boc_password", ""); string BankAccLKR = GetStatic.ReadWebConfig("boc_account_no_lkr", ""); string BankAccUSD = GetStatic.ReadWebConfig("boc_account_no_usd", ""); string ChargingType = GetStatic.ReadWebConfig("boc_chargin_type", ""); string SMSAlertReceiver = GetStatic.ReadWebConfig("boc_sms_alert", ""); public BankOfCeylonAPI() { _service.ClientCredentials.UserName.UserName = UserName; _service.ClientCredentials.UserName.Password = Password; ServicePointManager.SecurityProtocol = (SecurityProtocolType)768 | (SecurityProtocolType)3072 | (SecurityProtocolType)192 | (SecurityProtocolType)48; ServicePointManager.ServerCertificateValidationCallback += (sender, cert, chain, sslPolicyErrors) => true; } public TPResponse GetTPResponse(T model, string MethodName) where T : class { switch (MethodName) { case "send": return SendTransaction(model as SendTransaction); case "verify": return AccountValidation(model as AccountValidate); case "status": return GetTxnStatus(model as GetStatus); default: return new TPResponse() { ResponseCode = "1", Msg = "Method Name Not Found !" }; } } private TPResponse SendTransaction(SendTransaction sendTransaction) { SendMoneyModel requestTxn = SendModelMap(sendTransaction); TPResponse _response = new CustomModelValidaton().IsModelValid(requestTxn); if (_response == null) { _response = new TPResponse(); string reqJson = GetStatic.ObjectToJson(requestTxn); _log.Info("SendTransaction | REQUEST :" + GetStatic.ObjectToJson(requestTxn)); remittanceRespons response = _service.SendRem(requestTxn.CUSPIN, requestTxn.SENDERACCOUNTNO, requestTxn.CURRENCY, requestTxn.REMITTENCETYPE , requestTxn.SENDERNAME, requestTxn.BENEFICIARYNAME, requestTxn.BENEFICIARYADD, requestTxn.BENEFICIARYPHONE , requestTxn.BENEFICIARYID, requestTxn.BANKACCTNO, requestTxn.BANKNAME, requestTxn.BANKADDRESS, requestTxn.SENDERPHONE , requestTxn.SENDRESINFO, requestTxn.TRANSACTIONREF, requestTxn.SMSALERT, requestTxn.AMOUNT, requestTxn.CHARGE); string resJson = GetStatic.ObjectToJson(response); _log.Info("SendTransaction | RESPONSE :" + GetStatic.ObjectToJson(response)); _response.ResponseCode = response.responseCode == "456" ? "0" : "1"; _response.Msg = response.msg; //_response.Extra = response.response; _response.Data = response; } else { _log.Info("SendTransaction | MODEL VALIDATION FAILED :" + GetStatic.ObjectToJson(requestTxn)); } return _response; } private TPResponse GetTxnStatus(GetStatus getStatus) { TPResponse _response = new CustomModelValidaton().IsModelValid(getStatus); if (_response == null) { _response = new TPResponse(); _log.Info("GetTxnStatus | REQUEST :" + GetStatic.ObjectToJson(getStatus)); remittanceRespons response = _service.StatusRem(getStatus.ControlNo); _log.Info("GetTxnStatus | RESPONSE :" + GetStatic.ObjectToJson(response)); string paidStatus = "UNPAID"; if (response.response.responseStatusCode == "514") paidStatus = "PAID"; if (response.response.responseStatusCode == "515") paidStatus = "PAID"; if (response.response.responseStatusCode == "516") paidStatus = "PAID"; if (response.response.responseStatusCode == "615") paidStatus = "PAID"; _response.ResponseCode = paidStatus == "PAID" ? "0" : "1"; _response.Msg = response.response.resposnseStatusMsg; _response.Extra = paidStatus; _response.Extra2 = response.response.responseStatusCode; _response.Data = response.response; if (!_response.ResponseCode.Equals("0")) { _response.ResponseCode = "1"; } } else { _log.Info("GetTxnStatus | MODEL VALIDATION FAILED :" + GetStatic.ObjectToJson(getStatus).ToString()); } return _response; } private SendMoneyModel SendModelMap(SendTransaction sendTransaction) { return new SendMoneyModel { CUSPIN = sendTransaction.Transaction.JMEControlNo, SENDERACCOUNTNO = sendTransaction.Transaction.PCurr.ToLower() == "lkr" ? BankAccLKR : BankAccUSD, CURRENCY = sendTransaction.Transaction.PCurr, REMITTENCETYPE = sendTransaction.Transaction.PaymentType, SENDERNAME = sendTransaction.Sender.SFullName, BENEFICIARYNAME = sendTransaction.Receiver.RFullName, BENEFICIARYADD = sendTransaction.Receiver.RAdd1, BENEFICIARYPHONE = sendTransaction.Receiver.RMobile, BENEFICIARYID = sendTransaction.Receiver.RIdNo, BANKACCTNO = sendTransaction.Receiver.RAccountNo, BANKNAME = sendTransaction.Agent.PBankId, BANKADDRESS = sendTransaction.Receiver.RLocation, SENDERPHONE = sendTransaction.Sender.SMobile, SENDRESINFO = sendTransaction.Transaction.PayoutMsg, TRANSACTIONREF = sendTransaction.TranId.ToString(), SMSALERT = SMSAlertReceiver, AMOUNT = Convert.ToDouble(sendTransaction.Transaction.PAmt), CHARGE = ChargingType }; } private TPResponse AccountValidation(AccountValidate accountValidate) { TPResponse response = new TPResponse(); response.SetResponse("1", "Invalid Account", null); verifyAccResponse res = _service.VerifyAccount(accountValidate.AccountNumber); if (res.verifyCode == "028") { response.ResponseCode = "0"; response.Msg = res.verifyMsg; } return response; } } }