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
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;
|
|
}
|
|
}
|
|
}
|