using Common.Models; using Common.Models.Address; using Common.Models.Bank; using Common.Models.ExchangeRate; using Common.Models.Payer; using Common.Models.RequestResponse; using Common.Models.Sender; using Common.Models.Status; using Common.Models.TxnAmendModel; using Common.Models.TxnModel; using Common.TPService; using Common.Utility; using log4net; using Newtonsoft.Json; using System; using System.Collections.Generic; using System.Linq; using System.Net.Http; using System.Net.Http.Headers; using System.Reflection; using System.Security.Cryptography; using System.Text; using Transfast.Model.Address.City; using Transfast.Model.Address.State; using Transfast.Model.Address.Town; using Transfast.Model.Bank; using Transfast.Model.BankBranch; using Transfast.Model.Compliance; using Transfast.Model.ExRate; using Transfast.Model.Payers; using Transfast.Model.PaymenType; using Transfast.Model.Receiver; using Transfast.Model.Sender; using Transfast.Model.SendTxn; using Transfast.Model.SendTxn.TxnCancel; using Transfast.Model.TransactionInfo; namespace Transfast.ApiServices { public class TFAPI : ITPApiServices { private readonly ILog _log = LogManager.GetLogger(typeof(TFAPI)); private readonly string userName; private readonly string password; private readonly string branchId; private readonly string publicKey; private readonly string ft_base_url; private readonly string systemId; //private readonly string branchIdBank; //private readonly string partnerId; //private readonly string userNameBank; //private readonly string passwordBank; public TFAPI() { userName = GetStatic.ReadWebConfig("transfast_userName", ""); password = GetStatic.ReadWebConfig("transfast_password", ""); branchId = GetStatic.ReadWebConfig("transfast_branchId", ""); publicKey = GetStatic.ReadWebConfig("transfast_publicKey", ""); ft_base_url = GetStatic.ReadWebConfig("transfast_baseUrl", ""); systemId = GetStatic.ReadWebConfig("transfast_systemId", ""); //partnerId = GetStatic.ReadWebConfig("transfast_branchMapCode", ""); //branchIdBank = GetStatic.ReadWebConfig("transfast_branchId_bank", ""); //userNameBank = GetStatic.ReadWebConfig("transfast_userName_bank", ""); //passwordBank = GetStatic.ReadWebConfig("transfast_password_bank", ""); } public TPResponse GetTPResponse(T model, string MethodName) where T : class { switch (MethodName) { case "send": return SendTransaction(model as SendTransaction); case "release": return ReleseTrasaction(model as TFReleaseTxnRequest); case "status": return GetTransactionByPIN(model as GetStatus); case "exRate": return GetExRate(model as ExchangeRate); case "address": return GetAddress(model as AddressRequest); case "bankList": return GetBankList(model as BankRequest); case "cancelSend": return CancelTransaction(model as CancelTxn); case "senderinfo": return TFSenderInformation(model as SenderRequest); case "staticData": return GetStaticData(model as StaticData); case "payer": return PayersInformation(model as PayerRequest); case "amendment": return AmendTransaction(model as AmendTransaction); default: return new TPResponse() { ResponseCode = "1", Msg = "Method Name Not Found !" }; } } public TPResponse GetStaticData(StaticData data) { string url = ""; string method = ""; if (data.Type == "POR") { url = "api/catalogs/remittancepurposes?countryisocode=" + data.CountryIsoCode; method = "get"; } TPResponse response = GetRestApiUrl(null, url, method, "RemittancePurposes"); return response; } private TPResponse TFSenderInformation(SenderRequest sender) { TFSenderRequest tfSender = ConvertSenderToTFSender(sender); TPResponse _response = new CustomModelValidaton().IsModelValid(tfSender); if (_response == null) { _response = new TPResponse(); if (sender.MethodType.ToLower() == "create") _response = GetRestApiUrl(tfSender, "api/transaction/sender"); else if (sender.MethodType.ToLower() == "update") _response = GetRestApiUrl(tfSender, "api/transaction/senderinfo", "put"); else if (sender.MethodType == "getdetails") _response = GetRestApiUrl(null, "api/transaction/senderbyid?SenderId=" + tfSender.SenderId, "get"); if (_response.ResponseCode != "0") _log.ErrorFormat("Error occured on TFSenderInformation at transfast api ! Response : ", _response); else { _log.ErrorFormat("TFSenderInformation success at transfast api ! Response : ", _response); } } return _response; } private TPResponse GetExRate(ExchangeRate eR) { TFExRateRequest tfExRate = ConvertExchangeRateModelToTFExRateRequest(eR); TPResponse _response = new CustomModelValidaton().IsModelValid(tfExRate); if (!string.IsNullOrEmpty(eR.ProcessFor)) { if (eR.ProcessFor.ToLower() == "all") return ExRateForAllPayers(tfExRate, eR.PCurrency); } if (_response == null) { _response = new TPResponse(); string _url = "api/rates/countryrates?receivecountryisocode=" + tfExRate.ReceiveCountryIsoCode + "&sourcecurrencyisocode=" + tfExRate.SourceCurrencyIsoCode; _response = GetRestApiUrl(null, _url, "get", "Rates"); var Respp = JsonConvert.SerializeObject(_response); if (!string.IsNullOrEmpty(eR.RequestedBy)) { _log.Info("RequestedBy" + "| " + eR.RequestedBy); if (eR.RequestedBy == "scheduler" && string.IsNullOrEmpty(eR.PaymentType)) { return GetExRateForScheduler(_response, eR.PCurrency); } if (eR.RequestedBy == "online" && eR.UserName == "onlinedefault" && eR.PCountryName.ToLower() == "india" && eR.PaymentType.ToUpper() == "CASH PAYMENT") { eR.payerName = "TRANSFAST CASH PICKUP|ID02"; } if (eR.RequestedBy == "online" && eR.UserName == "onlinedefault" && eR.PCountryName.ToLower() == "bangladesh" && eR.PaymentType.ToUpper() == "CASH PAYMENT") { eR.payerName = "TRANSFAST CASH PICKUP ANYWHERE|BA99"; } if (eR.RequestedBy == "online" && eR.UserName == "onlinedefault" && eR.PCountryName.ToLower() == "bangladesh" && eR.PaymentType.ToUpper() == "BANK DEPOSIT") { eR.payerName = "TRANSFAST BANK DEPOSIT|BA98"; } } if (eR.PCountryName.ToLower() == "bangladesh" && eR.PaymentType.ToUpper() == "CASH PAYMENT") { eR.payerName = "TRANSFAST CASH PICKUP ANYWHERE|BA99"; } if (eR.PCountryName.ToLower() == "bangladesh" && eR.PaymentType.ToUpper() == "BANK DEPOSIT") { eR.payerName = "TRANSFAST BANK DEPOSIT|BA98"; } _log.Info("payerName" + "| " + eR.payerName); if (_response.ResponseCode != "0") _log.ErrorFormat("Error occured on GETEXRATE at transfast api ! Response : ", _response); else { List data = (List)_response.Data; data = data.Where(whr => whr.ReceiveCurrencyIsoCode == eR.PCurrency).ToList(); string payer = string.IsNullOrEmpty(eR.payerName) ? "" : eR.payerName.Split('|')[1].ToString().TrimStart().TrimEnd().ToUpper(); _log.Info("payer" + "| " + payer); TFExRateResponse AgentFilterData = data.FirstOrDefault(x => x.ReceiveCurrencyIsoCode == eR.PCurrency && x.PayerId.ToUpper() == payer); _log.Info("AgentFilterData" + "| " + JsonConvert.SerializeObject(AgentFilterData)); if (AgentFilterData != null) { ExRateResponse exRate = new ExRateResponse() { bankName = AgentFilterData.PayerName, exRate = AgentFilterData.StartRate.ToString(), tpExRate = AgentFilterData.EndRate.ToString(), AgentRefId = AgentFilterData.PayerId, tpPCurr = AgentFilterData.ReceiveCurrencyIsoCode }; _response.Data = exRate; } else { TFExRateResponse firstData = new TFExRateResponse(); if (string.IsNullOrEmpty(eR.PaymentType)) { firstData = data.FirstOrDefault(x => x.ReceiveCurrencyIsoCode == eR.PCurrency); if (firstData != null) { ExRateResponse exRate = new ExRateResponse() { bankName = firstData.PayerName, exRate = firstData.StartRate.ToString(), tpExRate = firstData.EndRate.ToString(), AgentRefId = firstData.PayerId, tpPCurr = firstData.ReceiveCurrencyIsoCode }; _response.Data = exRate; } } else { if (eR.PaymentType.ToUpper() == "CASH PAYMENT") firstData = data.FirstOrDefault(x => x.ReceiveCurrencyIsoCode == eR.PCurrency && (x.ModeOfPaymentName == eR.PaymentType || x.ModeOfPaymentName.ToUpper() == "CASH PICK UP")); else firstData = data.FirstOrDefault(x => x.ReceiveCurrencyIsoCode == eR.PCurrency && x.ModeOfPaymentName == eR.PaymentType); if (firstData != null) { ExRateResponse exRate = new ExRateResponse() { bankName = firstData.PayerName, exRate = firstData.StartRate.ToString(), tpExRate = firstData.EndRate.ToString(), AgentRefId = firstData.PayerId, tpPCurr = firstData.ReceiveCurrencyIsoCode }; _response.Data = exRate; } else { TFExRateResponse firstData1 = data.FirstOrDefault(x => x.ReceiveCurrencyIsoCode == eR.PCurrency); if (firstData1 != null) { ExRateResponse exRate = new ExRateResponse() { bankName = firstData1.PayerName, exRate = firstData1.StartRate.ToString(), tpExRate = firstData1.EndRate.ToString(), AgentRefId = firstData1.PayerId, tpPCurr = firstData1.ReceiveCurrencyIsoCode }; _response.Data = exRate; } } } } } } return _response; } private TPResponse ExRateForAllPayers(TFExRateRequest tfExRate, string pCurrency) { TPResponse _response = new CustomModelValidaton().IsModelValid(tfExRate); if (_response == null) { _response = new TPResponse(); string _url = "api/rates/countryrates?receivecountryisocode=" + tfExRate.ReceiveCountryIsoCode + "&sourcecurrencyisocode=" + tfExRate.SourceCurrencyIsoCode; _response = GetRestApiUrl(null, _url, "get", "Rates"); if (_response.ResponseCode != "0") _log.ErrorFormat("Error occured on GETEXRATE at transfast api ! Response : ", _response); else { List data = (List)_response.Data; List _exRateResponse = new List(); List result = new List(); if (pCurrency == "BDT") { List BDTpayers = new List() { "BA99", "BA98" }; result = data.Where(whr => whr.ReceiveCurrencyIsoCode == pCurrency && BDTpayers.Contains(whr.PayerId)).ToList(); } foreach (var item in result) { ExRateResponse exRate = new ExRateResponse() { bankName = item.PayerName, exRate = item.StartRate.ToString(), tpExRate = item.EndRate.ToString(), AgentRefId = item.PayerId, tpPCurr = item.ReceiveCurrencyIsoCode, ModeOfPaymentName = item.ModeOfPaymentName }; _exRateResponse.Add(exRate); } _response.Data = _exRateResponse; } } return _response; } private TPResponse GetExRateForScheduler(TPResponse response, string PCurrency) { TPResponse _response = new TPResponse(); List data = (List)response.Data; TFExRateResponse firstData1 = data.FirstOrDefault(x => x.ReceiveCurrencyIsoCode == PCurrency); if (firstData1 != null) { ExRateResponse exRate = new ExRateResponse() { bankName = firstData1.PayerName, exRate = firstData1.StartRate.ToString(), tpExRate = firstData1.EndRate.ToString(), AgentRefId = firstData1.PayerId, tpPCurr = firstData1.ReceiveCurrencyIsoCode }; _response.Data = exRate; } return _response; } private TPResponse GetState(string countryIso) { TPResponse _response = new TPResponse(); _response = GetRestApiUrl(null, "api/catalogs/states?countryisocode=" + countryIso, "get", "States"); if (_response.ResponseCode != "0") _log.ErrorFormat("Error occured on GetState at transfast api ! Response : ", _response); else { _log.ErrorFormat("GetState success at transfast api ! Response : ", _response); } return _response; } private TPResponse GetAddress(AddressRequest tF) { switch (tF.MethodType) { case "city": return GetCities(tF); case "state": return GetState(tF.CountryIsoCode); case "town": return GetTown(tF); case "paymentType": return GetPaymentMode(tF); default: return new TPResponse() { ResponseCode = "1", Msg = "Address Type Not Found !" }; } } private TPResponse GetCities(AddressRequest tF) { TPResponse _response = new TPResponse(); _response = GetRestApiUrl(null, "api/catalogs/cities?countryisocode=" + tF.CountryIsoCode + "&stateid=" + tF.StateId, "get", "Cities"); if (_response.ResponseCode != "0") _log.ErrorFormat("Error occured on GETCITIES at transfast api ! Response : ", _response); else _log.ErrorFormat("GETCITIES success at transfast api ! Response : ", _response); return _response; } private TPResponse GetTown(AddressRequest tF) { TPResponse _response = new TPResponse(); _response = GetRestApiUrl(null, "api/catalogs/towns?countryisocode=" + tF.CountryIsoCode + "&stateid=" + tF.StateId + "&cityId=" + tF.CityId, "get", "Towns"); if (_response.ResponseCode != "0") _log.ErrorFormat("Error occured on GETTOWN at transfast api ! Response : ", _response); else _log.ErrorFormat("GETTOWN success at transfast api ! Response : ", _response); return _response; } private TPResponse GetPaymentMode(AddressRequest tF) { TPResponse _response = new TPResponse(); _response = GetRestApiUrl(null, "api/catalogs/paymentmodes?countryisocode=" + tF.CountryIsoCode + "&cityId=" + tF.CityId, "get", "PaymentModes"); if (_response.ResponseCode != "0") _log.ErrorFormat("Error occured on GETPAYMENTMODE at transfast api ! Response : ", _response); else _log.ErrorFormat("GETPAYMENTMODE success at transfast api ! Response : ", _response); return _response; } private TPResponse GetTransactionByPIN(GetStatus getStatus) { string getTranUrl = "ByReferenceNo?ReferenceNumber=" + getStatus.ControlNo; if (!string.IsNullOrEmpty(getStatus.PartnerPinNo) && !string.IsNullOrWhiteSpace(getStatus.PartnerPinNo)) getTranUrl = "bytfpin?TfPin=" + getStatus.PartnerPinNo; TPResponse _rsponse = GetRestApiUrl(null, "api/transaction/" + getTranUrl, "get"); if (_rsponse.ResponseCode != "0") _log.ErrorFormat("Error occured on GETTRANSACTIONBYPIN at transfast api ! Response : ", _rsponse); else _log.ErrorFormat("GETTRANSACTIONBYPIN success at transfast api ! Response : ", _rsponse); return _rsponse; } private TPResponse SendTransaction(SendTransaction sT) { var tfSendModel = ConvertSendTransactionModelToTFSendTxtnRequest(sT); TPResponse _response = new CustomModelValidaton().IsModelValid(tfSendModel); _log.DebugFormat(GetStatic.ConvertToJson(tfSendModel)); if (_response == null) { _response = GetRestApiUrl(tfSendModel, "api/transaction/invoice"); if (_response.ResponseCode == "0") { PropertyInfo tfPin = _response.Data.GetType().GetProperty("TfPin"); string tfPinValue = (string)tfPin.GetValue(_response.Data, null); PropertyInfo TransactionInfo = _response.Data.GetType().GetProperty("TransactionInfo"); object trasactionData = TransactionInfo.GetValue(_response.Data, null); PropertyInfo refNo = trasactionData.GetType().GetProperty("ReferenceNumber"); _response.Extra = tfPinValue; _response.Id = (string)refNo.GetValue(trasactionData, null); _response.Msg = "Transaction Send Successfully For Transfast With Control No = " + sT.Transaction.JMEControlNo + " And Response Control No = " + tfPinValue; } } return _response; } private TPResponse ReleseTrasaction(TFReleaseTxnRequest tfPINNo) { return GetRestApiUrl(tfPINNo, "api/transaction/release", "put"); } private TPResponse CancelTransaction(CancelTxn txn) { TFTxnCancelRequest tfSendModel = ConvertToTFTxnCancelRequest(txn); TPResponse _response = new CustomModelValidaton().IsModelValid(tfSendModel); if (_response == null) { _response = new TPResponse(); _response = GetRestApiUrl(tfSendModel, "api/transaction/cancel", "put"); if (_response.ResponseCode != "0") _log.ErrorFormat("Error occured on CancelTransaction at transfast api ! Response : ", _response); else _log.ErrorFormat("CancelTransaction process success at transfast api ! Response : ", _response); } return _response; } private TPResponse AmendTransaction(AmendTransaction aTxn) { var tfAmendModel = ConvertAmendTransactionModelToTFAmendTxtnRequest(aTxn); TPResponse _response = new CustomModelValidaton().IsModelValid(tfAmendModel); _log.DebugFormat(GetStatic.ConvertToJson(tfAmendModel)); if (_response == null) { _response = GetRestApiUrl(tfAmendModel, "api/transaction/invoice", "put"); if (_response.ResponseCode != "0") { if (_response.Msg.Split(':')[1].ToString().ToLower() != "notfound") { PropertyInfo businessError = _response.Data.GetType().GetProperty("BusinessErrors"); List businessErrorData = (List)businessError.GetValue(_response.Data, null); string msg = ""; if (businessErrorData.Count > 0) { foreach (BusinessError item in businessErrorData) { msg += item.Message + " "; } } PropertyInfo validationError = _response.Data.GetType().GetProperty("DataValidationErrors"); List validationErrorData = (List)validationError.GetValue(_response.Data, null); if (validationErrorData.Count > 0) { foreach (DataValidationError item in validationErrorData) { msg += item.Message + " "; } } _response.Msg += msg; } _log.ErrorFormat("Error occured on AMENDTRANSACTION at transfast api ! Response : ", _response); } else { _response.Extra = aTxn.TfPinno; _response.Id = aTxn.TfPinno; _response.Msg = "Transaction Amended Successfully For Transfast With Control No = " + aTxn.TfPinno; //_response = GetRestApiUrl(new TFReleseTxnRequest() { TfPin = (string)tfPin.GetValue(_response.Data, null) }, "api/transaction/release", "put"); _log.ErrorFormat("AMENDTRANSACTION process success at transfast api ! Response : ", _response); } } return _response; } private TPResponse GetBankList(BankRequest bank) { if (bank.IsBranch) { return GetBankBranchList(bank); } var tfBank = ConvetToTFBankRequest(bank); TPResponse _response = new CustomModelValidaton().IsModelValid(tfBank); if (_response == null) { _response = new TPResponse(); _response = GetRestApiUrl(null, "api/catalogs/banks?countryisocode=" + tfBank.CountryIsoCode, "get", "Banks"); if (_response.ResponseCode != "0") _log.ErrorFormat("Error occured on GetBankList at transfast api ! Response : ", _response); else _log.ErrorFormat("GetBankList process success at transfast api ! Response : ", _response); } return _response; } private TPResponse GetBankBranchList(BankRequest bank) { TFBankBranchRequest tfBank = ConvetToTFBankBranchRequest(bank); TPResponse _response = new CustomModelValidaton().IsModelValid(tfBank); if (_response == null) { _response = new TPResponse(); _response = GetRestApiUrl, string>(null, "api/catalogs/BankBranch?BankId=" + tfBank.BankId + "&CityID=" + tfBank.CityId, "get"); if (_response.ResponseCode != "0") _log.ErrorFormat("Error occured on GetBankBranchList at transfast api ! Response : ", _response); else _log.ErrorFormat("GetBankBranchList process success at transfast api ! Response : ", _response); } return _response; } private TPResponse PayersInformation(PayerRequest pR) { TFPayersRequest tf = ConvertToTFPayersRequest(pR); TPResponse _response = new CustomModelValidaton().IsModelValid(tf); if (_response == null) { _response = new TPResponse(); var url = "api/catalogs/payers?countryisocode=" + tf.CountryIsoCode + "&cityid=" + tf.CityId + "&paymentmodeid=" + tf.PaymentModeId + "&sourcecurrencyisocode=" + tf.SourceCurrencyIsoCode + "&receivecurrencyisocode=" + tf.ReceiveCurrencyIsoCode + "&BankID=" + tf.BankId; _response = GetRestApiUrl(null, url, "get", "MasterPayerResults"); if (_response.ResponseCode != "0") _log.ErrorFormat("Error occured on PayersInformation at transfast api ! Response : ", _response); else _log.ErrorFormat("PayersInformation process success at transfast api ! Response : ", _response); } return _response; } private TPResponse GetRestApiUrl(RequestModel model, string api_url, string MethodType = "post", string getObjectOnly = null) { TPResponse _tPResponse = new TPResponse() { ResponseCode = "0" }; using (HttpClient httpClient = new HttpClient()) { try { _log.Info($"{api_url}|REQUEST : {JsonConvert.SerializeObject(model).ToString()}"); httpClient.BaseAddress = new Uri(ft_base_url); string tokenNo = GetAuthToken(); httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); short timeOut = Convert.ToInt16(GetStatic.ReadWebConfig("transfast_apiTimeOutInSecond", "100")); httpClient.Timeout = new TimeSpan(0, 0, timeOut); httpClient.DefaultRequestHeaders.TryAddWithoutValidation("Authorization", tokenNo); HttpResponseMessage resp = new HttpResponseMessage(); if (MethodType.ToLower().Equals("get")) { resp = httpClient.GetAsync(api_url).Result; } if (MethodType.ToLower().Equals("put")) { StringContent jbdContent = new StringContent(JsonConvert.SerializeObject(model).ToString(), Encoding.UTF8, "application/json"); resp = httpClient.PutAsync(api_url, jbdContent).Result; } if (MethodType.ToLower().Equals("post")) { string jsonData = JsonConvert.SerializeObject(model).ToString(); StringContent jbdContent = new StringContent(jsonData, Encoding.UTF8, "application/json"); resp = httpClient.PostAsync(api_url, jbdContent).Result; } string result = resp.Content.ReadAsStringAsync().Result; _log.Info($"{api_url}|RESPONSE : {result}"); if (resp.IsSuccessStatusCode) { _tPResponse.ResponseCode = "0"; _tPResponse.Data = JsonConvert.DeserializeObject(result); if (getObjectOnly != null) _tPResponse = GetOnlyRequiredData(_tPResponse, getObjectOnly); return _tPResponse; } else { _tPResponse.ResponseCode = "1"; _tPResponse.Data = JsonConvert.DeserializeObject(result); if (resp.StatusCode.ToString().ToLower() != "notfound") { _tPResponse.Msg = "Status Code: " + resp.StatusCode.ToString().Replace("
", "").Replace(Environment.NewLine, "") + " " + GetResponseMessage(_tPResponse.Data as TFSendTxnFailedResponse); } else { _tPResponse.Msg = "Status Code:" + resp.StatusCode.ToString(); } if (getObjectOnly != null) _tPResponse = GetOnlyRequiredData(_tPResponse, getObjectOnly); return _tPResponse; } } catch (HttpRequestException ex) { _tPResponse.ResponseCode = "999"; _tPResponse.Msg = ex.Message; _tPResponse.Data = ex.Data; } }; return _tPResponse; } private string GetResponseMessage(TFSendTxnFailedResponse data) { string msg = ""; if (data.BusinessErrors != null) { if (data.BusinessErrors.Count > 0) msg += "Business Error: "; foreach (BusinessError item in data.BusinessErrors) { msg += item.ErrorCode + " ; " + item.Message + Environment.NewLine; } } if (data.DataValidationErrors != null) { if (data.BusinessErrors.Count > 0) msg += "Validation Error: "; foreach (DataValidationError item in data.DataValidationErrors) { msg += item.ErrorCode + " ; " + item.Message + Environment.NewLine; } } if (!string.IsNullOrEmpty(data.Message)) msg += "Error Msg: " + data.ErrorCode + data.Message; return msg; } #region Model Convert private TFSenderRequest ConvertSenderToTFSender(SenderRequest sR) { return new TFSenderRequest() { Address = sR.Address, AddressOtherLanguage = sR.AddressOtherLanguage, CityId = sR.RCityCode, CountryIsoCode = sR.CountryIsoCode, DateOfBirth = sR.DateOfBirth, Email = sR.Email, IdExpiryDate = sR.IdExpiryDate, IdNumber = sR.IdNumber, IsIndividual = sR.IsIndividual, //LoyaltyCardNumber = sR.LoyaltyCardNumber, Name = sR.Name, NameOtherLanguage = sR.NameOtherLanguage, NationalityIsoCode = sR.NationalityIsoCode, PhoneHome = sR.PhoneHome, PhoneMobile = sR.PhoneMobile, PhoneWork = sR.PhoneWork, SenderId = sR.SenderId, StateId = sR.StateId, TypeOfId = sR.TypeOfId, ZipCode = sR.ZipCode }; } private TFSendTxtnRequest ConvertSendTransactionModelToTFSendTxtnRequest(SendTransaction sT) { return new TFSendTxtnRequest() { //TfPin = sT.Transaction.JMEControlNo, Sender = new TFSenderRequest() { SenderId = 0, LoyaltyCardNumber = "", Name = sT.Sender.SFullName, NameOtherLanguage = sT.Sender.SFullName, Address = sT.Sender.SAddress, AddressOtherLanguage = sT.Sender.SAddress, PhoneMobile = sT.Sender.SMobile, PhoneHome = sT.Sender.STel, PhoneWork = "", ZipCode = sT.Sender.SZipCode, CityId = sT.Sender.SCityId, StateId = sT.Sender.SState, CountryIsoCode = sT.Sender.SCountryName, TypeOfId = sT.Sender.SIdType, IdNumber = sT.Sender.SIdNo, IdExpiryDate = sT.Sender.SIdExpiryDate, NationalityIsoCode = sT.Sender.SNativeCountry, DateOfBirth = sT.Sender.SBirthDate, Email = sT.Sender.SEmail, IsIndividual = sT.Sender.IsIndividual }, Receiver = new ReceiverRequest() { FirstName = sT.Receiver.RFirstName, FirstNameOtherLanguage = sT.Receiver.RFirstName, SecondName = sT.Receiver.RMiddleName, SecondNameOtherLanguage = sT.Receiver.RMiddleName, LastName = sT.Receiver.RLastName, LastNameOtherLanguage = sT.Receiver.RLastName, SecondLastName = "", SecondLastNameOtherLanguage = "", FullNameOtherLanguage = sT.Receiver.RFullName, FullName = sT.Receiver.RFullName, CompleteAddress = sT.Receiver.RAdd1, CompleteAddressOtherLanguage = sT.Receiver.RAdd1, StateId = sT.Receiver.RStateId, CityId = sT.Receiver.RCity, TownId = sT.Receiver.RLocation, CountryIsoCode = sT.Receiver.RCountry, MobilePhone = sT.Receiver.RMobile, HomePhone = sT.Receiver.RTel, WorkPhone = "", ZipCode = "", DateOfBirth = sT.Receiver.RDob, NationalityIsoCode = sT.Receiver.RNativeCountry, IsIndividual = true, Email = sT.Receiver.REmail, Cpf = "", ReceiverTypeOfId = sT.Receiver.RIdType, ReceiverIdNumber = sT.Receiver.RIdNo, Notes = "", NotesOtherLanguage = "" }, TransactionInfo = new TransactionInfoRequest() { PaymentModeId = sT.Transaction.PaymentType, ReceiveCurrencyIsoCode = sT.Transaction.PCurr, BankId = sT.Agent.PBankId, Account = sT.Receiver.RAccountNo, AccountTypeId = "", BankBranchId = sT.Agent.PBankBranchId, PayingBranchId = sT.Agent.PBranchId, PayerId = sT.Receiver.RLocationName, PurposeOfRemittanceId = sT.Transaction.PurposeOfRemittanceName, SourceCurrencyIsoCode = sT.Transaction.CollCurr, Rate = sT.Transaction.Rate, TotalSentAmount = sT.Transaction.TAmt, SentAmount = 0, ServiceFee = sT.Transaction.ServiceCharge, USDServiceFee = sT.Transaction.SettlementDollarRate, ReceiveAmount = sT.Transaction.PAmt, CashAmount = sT.Transaction.CAmt, Payout = 0, FormOfPaymentId = sT.Sender.FormOfPaymentId, ReferenceNumber = sT.Transaction.JMEControlNo, SourceOfFundsID = Convert.ToInt32(sT.Sender.SourceOfFund), FeeProduct = "" }, Compliance = new ComplianceRequest() { CountryIssueIsoCode = sT.Receiver.RCountry, ReceiverDateOfBirth = sT.Sender.SBirthDate, ReceiverFullName = sT.Receiver.RFullName, ReceiverRelationship = sT.Receiver.RelWithSenderName, SenderEmployerAddress = sT.Sender.SAddress, SenderEmployerName = sT.Sender.SFullName, SenderEmployerPhone = sT.Sender.SMobile, SenderOccupation = sT.Sender.SOccuptionName, SourceOfFunds = sT.Sender.SourceOfFund, Ssn = sT.Transaction.TpRefNo, StateIssueId = sT.Sender.SState }, }; } private TFAmendTxnRequest ConvertAmendTransactionModelToTFAmendTxtnRequest(AmendTransaction aT) { return new TFAmendTxnRequest() { TfPin = aT.TfPinno, AmendedSender = new TFAmendSenderRequest() { Address = aT.AmendSender.SAddress, PhoneMobile = aT.AmendSender.SMobile, PhoneHome = aT.AmendSender.STel, PhoneWork = "", CityId = aT.AmendSender.SCityId, StateId = aT.AmendSender.SState, CountryIsoCode = aT.AmendSender.SCountryName, ZipCode = aT.AmendSender.SZipCode, IsIndividual = aT.AmendSender.IsIndividual, Email = aT.AmendSender.SEmail, TypeOfId = aT.AmendSender.SIdType, IdNumber = aT.AmendSender.SIdNo, IdExpiryDate = aT.AmendSender.SIdExpiryDate, NationalityIsoCode = aT.AmendSender.SNativeCountry, SenderOccupations = aT.AmendSender.SOccuptionId, DateOfBirth = aT.AmendSender.SBirthDate, }, AmendedReceiver = new ReceiverAmendRequest() { CompleteAddress = aT.AmendReceiver.RAdd1, CompleteAddressOtherLanguage = aT.AmendReceiver.RAdd1, MobilePhone = aT.AmendReceiver.RMobile, WorkPhone = "", HomePhone = aT.AmendReceiver.RTel, Email = aT.AmendReceiver.REmail, ReceiverTypeOfId = aT.AmendReceiver.RIdType, ReceiverIdNumber = aT.AmendReceiver.RIdNo, FirstName = aT.AmendReceiver.RFirstName, LastName = aT.AmendReceiver.RLastName, SecondLastName = "", Notes = "", NotesOtherLanguage = "" }, AmendedTransactionInfo = new TransactionInfoAmendRequest() { Account = aT.AmendReceiver.RAccountNo, BankBranchId = aT.AmendAgent.PBankBranchId, BankRoutingNumber = aT.AmendAgent.PBankId }, }; } private TFExRateRequest ConvertExchangeRateModelToTFExRateRequest(ExchangeRate sT) { return new TFExRateRequest() { FeeProduct = "", ReceiveCountryIsoCode = sT.pCountryCode, SourceCurrencyIsoCode = sT.SCurrency }; } private TFBankRequest ConvetToTFBankRequest(BankRequest bank) { return new TFBankRequest() { BankName = bank.BankName, CountryIsoCode = bank.CountryCode, PageSize = bank.PageSize, RoutingNumber = bank.RoutingNumber, StartIndex = bank.StartIndex, Swiftcode = bank.Swiftcode }; } private TFBankBranchRequest ConvetToTFBankBranchRequest(BankRequest bank) { return new TFBankBranchRequest() { BankId = bank.BankName, CityId = bank.CityId, StateId = bank.StateId }; } private TFTxnCancelRequest ConvertToTFTxnCancelRequest(CancelTxn txn) { return new TFTxnCancelRequest() { TfPin = txn.PartnerPinNo, ReasonId = txn.CancelReason }; } private TFPayersRequest ConvertToTFPayersRequest(PayerRequest tF) { return new TFPayersRequest() { BankId = tF.BankId, CityId = tF.CityId, CountryIsoCode = tF.CountryIsoCode, FeeProduct = tF.FeeProduct, PaymentModeId = tF.PaymentModeId, ReceiveCurrencyIsoCode = tF.ReceiveCurrencyIsoCode, SourceCurrencyIsoCode = tF.SourceCurrencyIsoCode, }; } #endregion Model Convert private string GetAuthToken() { string authHeader = " " + systemId + " " + Encrypt(userName) + " " + Encrypt(password) + " " + Encrypt(branchId) + " "; string _authToken = Base64Encode(authHeader); return _authToken; } //private string GetAuthTokenBank() //{ // string authHeader = " " + systemId + " " + Encrypt(userNameBank) + " " + Encrypt(passwordBank) + " " + Encrypt(branchIdBank) + " "; // string _authToken = Base64Encode(authHeader); // return _authToken; //} private static string Base64Encode(string plainText) { byte[] plainTextBytes = Encoding.UTF8.GetBytes(plainText); return Convert.ToBase64String(plainTextBytes); } private string Encrypt(string data) { using (RSACryptoServiceProvider RSA = new RSACryptoServiceProvider()) { RSA.FromXmlString(publicKey); byte[] dataToEncrypt = Encoding.UTF8.GetBytes(data); byte[] encryptedByteArray = RSA.Encrypt(dataToEncrypt, false).ToArray(); return Convert.ToBase64String(encryptedByteArray); } } private TPResponse GetOnlyRequiredData(TPResponse response, string objectName) { if (response.Data != null) { PropertyInfo fieldName = response.Data.GetType().GetProperty(objectName); object values = fieldName.GetValue(response.Data, null); response.Data = values; } return response; } } }