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.
347 lines
15 KiB
347 lines
15 KiB
using Business.BusinessLogic.Address;
|
|
using Business.BusinessLogic.NotificationApiService;
|
|
using Business.BusinessLogic.SMSApiService;
|
|
using Business.BusinessLogic.TPApiServices.Factory;
|
|
using Common.Models.Address;
|
|
using Common.Models.Bank_Account;
|
|
using Common.Models.DigitalSignature;
|
|
using Common.Models.ExchangeRate;
|
|
using Common.Models.Notification;
|
|
using Common.Models.RequestResponse;
|
|
using Common.Models.SendSMS;
|
|
using Common.Models.SendTransactionMobile;
|
|
using Common.Models.Status;
|
|
using Common.Models.TxnModel;
|
|
using Common.TPService;
|
|
using Common.Utility;
|
|
using log4net;
|
|
using Newtonsoft.Json;
|
|
using Repository.DAO.ThirdParty;
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.Data;
|
|
using System.Linq;
|
|
|
|
namespace Business.BusinessLogic.TPApiServices.TPServices
|
|
{
|
|
public class ThirdPartyServices : ITPApiServices
|
|
{
|
|
private readonly ILog _log = LogManager.GetLogger(typeof(ThirdPartyServices));
|
|
private readonly IThirdPartyRepo _thirdPartyRepo;
|
|
private readonly IApiFactoryServices _apiFactoryServices;
|
|
|
|
public ThirdPartyServices(IThirdPartyRepo thirdPartyRepo, IApiFactoryServices apiFactoryServices)
|
|
{
|
|
_thirdPartyRepo = thirdPartyRepo;
|
|
_apiFactoryServices = apiFactoryServices;
|
|
}
|
|
|
|
public TPResponse GetTPResponse<T>(T model, string MethodName) where T : class
|
|
{
|
|
switch (MethodName)
|
|
{
|
|
case "send":
|
|
return SendTransaction(model as SendTransaction, MethodName);
|
|
|
|
case "sendV2":
|
|
return SendTransactionMobileOrOnline(model as SendTransactionMobile, MethodName);
|
|
|
|
case "exRate":
|
|
return GetExRate(model as ExchangeRate, MethodName);
|
|
|
|
case "status":
|
|
return GetTxnStatus(model as GetStatus, MethodName);
|
|
|
|
case "SMSApi":
|
|
return SendMessage(model as SMSRequestModel, MethodName);
|
|
|
|
case "verify":
|
|
return VerifyAccount(model as AccountValidate, MethodName);
|
|
|
|
case "SendNotificationApi":
|
|
return SendNotification(model as SendNotificationRequest, MethodName);
|
|
case "JWTHelper":
|
|
return JWTHelper(model as JWTRequest, MethodName);
|
|
case "loqate":
|
|
return AddressLookup(model as AddressRequest);
|
|
default:
|
|
return _apiFactoryServices.GetServices(model.GetType().GetProperty("ProviderId").GetValue(model, null).ToString()).GetTPResponse(model, MethodName);
|
|
}
|
|
}
|
|
|
|
private TPResponse SendMessage(SMSRequestModel sMSRequestModel, string methodName)
|
|
{
|
|
ISMSService _sms = new SMSService();
|
|
return _sms.SMSApiMethod(sMSRequestModel);
|
|
}
|
|
|
|
private TPResponse GetTxnStatus(GetStatus gS, string MethodName)
|
|
{
|
|
TPResponse result = _apiFactoryServices.GetServices(gS.ProviderId).GetTPResponse(gS, MethodName);
|
|
return result;
|
|
}
|
|
|
|
private TPResponse GetExRate(ExchangeRate exModel, string MethodName)
|
|
{
|
|
TPResponse response = null;
|
|
_log.Debug("GetExRate Method is calling: ");
|
|
try
|
|
{
|
|
if (exModel.IsExRateCalcByPartner)
|
|
return _apiFactoryServices.GetServices(exModel.ProviderId).GetTPResponse(exModel, MethodName);
|
|
else if (exModel.RequestedBy.ToLower().Equals("core"))
|
|
return _thirdPartyRepo.GetExRateCore(exModel);
|
|
else if (exModel.RequestedBy.ToLower().Equals("online") || exModel.RequestedBy.ToLower().Equals("mobile"))
|
|
{
|
|
return CalculateExRate(exModel);
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
LogicalThreadContext.Properties["exception"] = ex;
|
|
_log.Error("Error Occured On GetExRate Method " + JsonConvert.SerializeObject(ex.Message));
|
|
response = new TPResponse() { Id = null, ResponseCode = "1", Msg = "Error Occured On GetExRate!", Data = null };
|
|
}
|
|
return response;
|
|
}
|
|
|
|
private TPResponse CalculateExRate(ExchangeRate exModel)
|
|
{
|
|
|
|
List<TPResponsev2> tPResponses = new List<TPResponsev2>();
|
|
|
|
DataTable dt = _thirdPartyRepo.GetAPIPartner(exModel);
|
|
|
|
foreach (DataRow dr in dt.Rows)
|
|
{
|
|
if (dr["isRealTime"].ToString().ToLower() == "true" | dr["isRealTime"].ToString().ToLower() == "1")
|
|
{
|
|
exModel.PaymentType = !string.IsNullOrEmpty(exModel.PaymentType) ? exModel.PaymentType : "";
|
|
exModel.ServiceType = !string.IsNullOrEmpty(exModel.ServiceType) ? exModel.ServiceType : "";
|
|
if (exModel.PCountry.Equals("151") && (exModel.PaymentType.Equals("wallet") | exModel.ServiceType.Equals("13")))
|
|
{
|
|
exModel.IsExRateCalcByPartner = false;
|
|
}
|
|
else if (exModel.PCountry.Equals("36"))
|
|
{
|
|
exModel.IsExRateCalcByPartner = false;
|
|
}
|
|
else
|
|
{
|
|
exModel.pCountryCode = dr["COUNTRYCODE"].ToString();
|
|
exModel.SCurrency = (string.IsNullOrEmpty(exModel.SCurrency) ? exModel.CollCurrency : exModel.SCurrency);
|
|
exModel.IsExRateCalcByPartner = true;
|
|
exModel.payerName = dr["PayerDetails"].ToString();
|
|
//exModel.PayoutPartner = dr["agentid"].ToString();
|
|
|
|
TPResponse _resp = _apiFactoryServices.GetServices(dr["agentId"].ToString()).GetTPResponse(exModel, "exRate");
|
|
|
|
ExRateResponse _exrate = (ExRateResponse)_resp.Data;
|
|
exModel.tPExRate = _exrate.exRate;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
exModel.IsExRateCalcByPartner = false;
|
|
}
|
|
exModel.SCExcludedCountries = Common.Utility.GetStatic.ReadWebConfig("SCExcludedCountries", "");
|
|
|
|
var r = (TPResponse)_thirdPartyRepo.GetExRate(exModel);
|
|
if (r.ResponseCode != null && r.ResponseCode.Equals("0"))
|
|
{
|
|
tPResponses.Add(new TPResponsev2() { Data = (ExRateResponse)r.Data, Extra = r.Extra, Extra2 = r.Extra2, ResponseCode = r.ResponseCode });
|
|
}
|
|
else
|
|
tPResponses.Add(new TPResponsev2() { Data = null, ResponseCode = r.ResponseCode, Msg = r.Msg });
|
|
|
|
// tPResponses.Add(();
|
|
}
|
|
TPResponsev2 final;
|
|
if (tPResponses.Any(x => x.ResponseCode.Equals("0")))
|
|
{
|
|
final = tPResponses.Where(x => x.ResponseCode.Equals("0") && double.Parse(x.Data.exRate) == tPResponses.Max(y => double.Parse(y.Data.exRate))).FirstOrDefault();
|
|
}
|
|
else
|
|
{
|
|
final = tPResponses.FirstOrDefault();
|
|
}
|
|
return new TPResponse()
|
|
{ Data = final.Data, ResponseCode = final.ResponseCode, Msg = final.Msg };
|
|
}
|
|
|
|
private TPResponse SendTransactionMobileOrOnline(SendTransactionMobile model, string methodName)
|
|
{
|
|
try
|
|
{
|
|
TPResponse createResponse = _thirdPartyRepo.CreateTransactionFromMobileOROnline(model); /// create txn on jme system database
|
|
if (createResponse.ResponseCode == "0" && createResponse.Extra2.ToLower() == "true")
|
|
{
|
|
|
|
|
|
TPResponse detailResponse = new TPResponse() { };
|
|
SendTransaction txnDetailsFromDb = _thirdPartyRepo.GetTranactionDetails(model.RequestedBy, createResponse.Id, model.SessionId, out detailResponse);
|
|
if (detailResponse.ResponseCode == "0")
|
|
{
|
|
LogicalThreadContext.Properties["ControlNo"] = txnDetailsFromDb.Transaction.JMEControlNo;
|
|
TPResponse partnerResponse = SendTxnToPartner(txnDetailsFromDb, "send");
|
|
if (partnerResponse.ResponseCode == "0")
|
|
{
|
|
_thirdPartyRepo.UpdateTPTxns(partnerResponse.Extra, partnerResponse.Id, "", txnDetailsFromDb.Transaction.JMEControlNo, model.RequestedBy);
|
|
return createResponse;
|
|
}
|
|
else
|
|
{
|
|
LogicalThreadContext.Properties["ControlNo"] = txnDetailsFromDb.Transaction.JMEControlNo;
|
|
LogicalThreadContext.Properties["user_name"] = txnDetailsFromDb.TranId;
|
|
|
|
_log.Info("SendTxnToPartner response : " + JsonConvert.SerializeObject(partnerResponse));
|
|
|
|
_thirdPartyRepo.RevertTPTxns(txnDetailsFromDb.Transaction.JMEControlNo, model.RequestedBy);
|
|
return new TPResponse
|
|
{
|
|
ResponseCode = "1",
|
|
Msg = partnerResponse.Msg ?? "Unable to complete transaction, Partner Error - Contact Support team.",
|
|
Id = null
|
|
};
|
|
}
|
|
}
|
|
else
|
|
return detailResponse;
|
|
}
|
|
return createResponse;
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
LogicalThreadContext.Properties["exception"] = ex;
|
|
_log.Error("OnlineOrMobileSendTransaction | Exception occured: " + ex.ToString());
|
|
return new TPResponse() { Id = null, ResponseCode = "1", Msg = "Error Occured On SendTransactionMobileOrOnline !", Data = null };
|
|
}
|
|
}
|
|
|
|
private TPResponse SendTransaction(SendTransaction model, string MethodName)
|
|
{
|
|
TPResponse response = new TPResponse();
|
|
try
|
|
{
|
|
if (!model.isTxnAlreadyCreated)
|
|
{
|
|
response = _thirdPartyRepo.SendTransaction(model);
|
|
//if (response.ResponseCode == "0")
|
|
//{
|
|
// model = _thirdPartyRepo.GetTxnDetailsByTempTranId(response.Id, out response);
|
|
//}
|
|
}
|
|
else
|
|
{
|
|
response.ResponseCode = "0";
|
|
response.Extra = Convert.ToString(model.TranId);
|
|
response.Id = model.Transaction.JMEControlNo;
|
|
}
|
|
if (response.ResponseCode == "0")
|
|
{
|
|
model.TranId = Convert.ToInt32(response.Extra);
|
|
model.Transaction.JMEControlNo = response.Id;
|
|
if (model.IsRealtime)
|
|
{
|
|
response = SendTxnToPartner(model, MethodName);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
_log.DebugFormat("Error creating transaction in JME system with Response : " + JsonConvert.SerializeObject(response));
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
LogicalThreadContext.Properties["exception"] = ex;
|
|
_log.Error("Error Occured On TransactionSend Method " + JsonConvert.SerializeObject(ex.Message));
|
|
response = new TPResponse() { Id = null, ResponseCode = "1", Msg = "Error Occured On Transaction Send!", Data = null };
|
|
}
|
|
return response;
|
|
}
|
|
|
|
private TPResponse SendTxnToPartner(SendTransaction model, string MethodName)
|
|
{
|
|
TPResponse response = _apiFactoryServices.GetServices(model.ProviderId).GetTPResponse(model, MethodName);
|
|
if (response.ResponseCode == "0")
|
|
{
|
|
model.Transaction.TpRefNo = response.Extra;
|
|
model.Transaction.TpTranId = response.Id;
|
|
_log.Info("Transaction send to API Partner Success with Response : " + JsonConvert.SerializeObject(response));
|
|
|
|
return response;
|
|
//if (model.IsApproveTxn)
|
|
//{
|
|
// TPResponse txnApproveResponse = _thirdPartyRepo.ApproveTransaction(model);
|
|
// if (txnApproveResponse.ResponseCode == "0")
|
|
// {
|
|
// _log.Info("Transaction Approve Response : " + JsonConvert.SerializeObject(txnApproveResponse));
|
|
// return response;
|
|
// }
|
|
// else
|
|
// {
|
|
// _log.Error("Transaction Approve Response : " + JsonConvert.SerializeObject(txnApproveResponse));
|
|
// return txnApproveResponse;
|
|
// }
|
|
//}
|
|
//else
|
|
//{
|
|
// return response;
|
|
//}
|
|
}
|
|
else if (response.ResponseCode == "1")
|
|
{
|
|
_log.Info("Transaction send to API Partner Failed with Response : " + JsonConvert.SerializeObject(response));
|
|
return response;
|
|
//if (!string.IsNullOrEmpty(model.RequestedBy) && !string.IsNullOrWhiteSpace(model.RequestedBy) && model.RequestedBy.ToLower().Equals("mobile"))
|
|
//{
|
|
// TPResponse txnRejectResponse = _thirdPartyRepo.RejectTransaction(model);
|
|
// _log.Info("Transaction Reject Response : " + JsonConvert.SerializeObject(txnRejectResponse));
|
|
// return response;
|
|
//}
|
|
//else
|
|
//{
|
|
// return response;
|
|
//}
|
|
}
|
|
else if (response.ResponseCode == "104")
|
|
{
|
|
_log.Info("Model Validation Failed : " + JsonConvert.SerializeObject(response));
|
|
return response;
|
|
}
|
|
return response;
|
|
}
|
|
private TPResponse VerifyAccount(AccountValidate av, string methodName)
|
|
{
|
|
TPResponse result = _apiFactoryServices.GetServices(av.ProviderId).GetTPResponse(av, methodName);
|
|
return result;
|
|
}
|
|
private TPResponse SendNotification(SendNotificationRequest requestModel, string methodName)
|
|
{
|
|
INotificationService notificationService = new NotificationService();
|
|
return notificationService.NotificationApiMethod(requestModel);
|
|
}
|
|
|
|
private TPResponse AddressLookup(AddressRequest requestModel)
|
|
{
|
|
ILocateBusiness service = new LocateBusiness();
|
|
return service.QueryAddress(requestModel.TownName);
|
|
}
|
|
|
|
private TPResponse JWTHelper(JWTRequest requestModel, string methodName)
|
|
{
|
|
TPResponse result = new TPResponse();
|
|
//TokenRequest tokenRequest = new TokenRequest() { Payload = requestModel.RequestString };
|
|
|
|
|
|
ApiHelper api = new ApiHelper();
|
|
|
|
if (requestModel.Type == Common.Models.Enums.JWTType.ENCRYPT)
|
|
result = api.ThirdPartyApi<JWTRequest, TPResponse>(requestModel, "brac/GetToken", out result);
|
|
else
|
|
result = api.ThirdPartyApi<JWTRequest, TPResponse>(requestModel, "brac/GetToken", out result);
|
|
|
|
return result;
|
|
}
|
|
}
|
|
}
|