You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

979 lines
44 KiB

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>(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<string, _tpPOR, _tpPOR>(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<TFSenderRequest, TFSenderResponse, TFSenderResponse>(tfSender, "api/transaction/sender");
else if (sender.MethodType.ToLower() == "update")
_response = GetRestApiUrl<TFSenderRequest, TFSenderResponse, TFSenderResponse>(tfSender, "api/transaction/senderinfo", "put");
else if (sender.MethodType == "getdetails")
_response = GetRestApiUrl<string, TFSenderResponse, TFSenderResponse>(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<string, _ExRateResponse, _ExRateResponse>(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<TFExRateResponse> data = (List<TFExRateResponse>)_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<string, _ExRateResponse, _ExRateResponse>(null, _url, "get", "Rates");
if (_response.ResponseCode != "0")
_log.ErrorFormat("Error occured on GETEXRATE at transfast api ! Response : ", _response);
else
{
List<TFExRateResponse> data = (List<TFExRateResponse>)_response.Data;
List<ExRateResponse> _exRateResponse = new List<ExRateResponse>();
List<TFExRateResponse> result = new List<TFExRateResponse>();
if (pCurrency == "BDT")
{
List<string> BDTpayers = new List<string>() { "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<TFExRateResponse> data = (List<TFExRateResponse>)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<string, _States, _States>(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<string, _Cities, _Cities>(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<string, _Towns, _Towns>(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<string, _PaymentType, _PaymentType>(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<string, TFSendTxnResponse, TFSendTxnResponse>(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<TFSendTxtnRequest, TFSendTxnResponse, TFSendTxnFailedResponse>(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<TFReleaseTxnRequest, string, TFSendTxnFailedResponse>(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<TFTxnCancelRequest, string, TFSendTxnFailedResponse>(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<TFAmendTxnRequest, string, TFSendTxnFailedResponse>(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<BusinessError> businessErrorData = (List<BusinessError>)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<DataValidationError> validationErrorData = (List<DataValidationError>)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<TFReleseTxnRequest, string>(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<string, _TFBank, _TFBank>(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, List<TFBankBranchResponse>, 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<string, _MasterResults, _MasterResults>(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, ResponseModelForSucess, ResponseModelForFailed>(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<ResponseModelForSucess>(result);
if (getObjectOnly != null)
_tPResponse = GetOnlyRequiredData(_tPResponse, getObjectOnly);
return _tPResponse;
}
else
{
_tPResponse.ResponseCode = "1";
_tPResponse.Data = JsonConvert.DeserializeObject<ResponseModelForFailed>(result);
if (resp.StatusCode.ToString().ToLower() != "notfound")
{
_tPResponse.Msg = "Status Code: " + resp.StatusCode.ToString().Replace("<br/>", "").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 = "<Authentication> <Id>" + systemId + "</Id> <UserName>" + Encrypt(userName) + "</UserName> <Password>" + Encrypt(password) + "</Password> <BranchId>" + Encrypt(branchId) + "</BranchId> </Authentication>";
string _authToken = Base64Encode(authHeader);
return _authToken;
}
//private string GetAuthTokenBank()
//{
// string authHeader = "<Authentication> <Id>" + systemId + "</Id> <UserName>" + Encrypt(userNameBank) + "</UserName> <Password>" + Encrypt(passwordBank) + "</Password> <BranchId>" + Encrypt(branchIdBank) + "</BranchId> </Authentication>";
// 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;
}
}
}