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.
 
 

1029 lines
41 KiB

using BracBank.Model;
using Common.Models;
using Common.Models.Agent;
using Common.Models.Bank;
using Common.Models.Bank_Account;
using Common.Models.DigitalSignature;
using Common.Models.RequestResponse;
using Common.Models.Status;
using Common.Models.TxnModel;
using Common.TPService;
using Common.Utility;
using log4net;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using Repository.DAO.ThirdParty;
using RestSharp;
using System;
using System.Net;
using System.Text;
using System.Linq;
namespace BracBank.BracBankApiService
{
public class BracBankAPI : ITPApiServices
{
private readonly ILog _log = LogManager.GetLogger(typeof(BracBankAPI));
// ServiceComClient _service = new ServiceComClient();
ApiHelper apiHelper { get; set; }
protected string baseUrl { get; set; }
protected string username { get; set; }
protected string password { get; set; }
public BracBankAPI()
{
baseUrl = GetStatic.ReadWebConfig("brac_base_url", "");
username = GetStatic.ReadWebConfig("brac_Username", "");
password = GetStatic.ReadWebConfig("brac_Password", "");
apiHelper = new ApiHelper();
}
private const string GET_TOKEN = "/oauth/Token";
private const string ACCOUNT_VERIFY = "/NonTransaction/getAccountName";
private const string WALLET_VERIFY = "/NonTransaction/getWalletValidation";
private const string POST_TRANSACTION = "/Transaction/postTransaction";
private const string GET_CODES = "/NonTransaction/getCodes";
private const string GET_MAPPING_CODES = "/NonTransaction/getMappingCodes";
private const string GET_ACCOUNTBALANCE = "/NonTransaction/getAccountBalance";
private const string TRANSACTION_CANCEL = "/Transaction/postTransactionCancel";
private const string TRANSACTION_STATUS = "/Transaction/getTransactionStatus";
public TPResponse GetTPResponse<T>(T model, string MethodName) where T : class
{
switch (MethodName)
{
case "send":
return SendTransaction(model as SendTransaction);
case "verify":
return AccountValidation(model as AccountValidate);
case "status":
return GetTxnStatus(model as GetStatus);
case "bankList":
return GetBankList(model as BankRequest);
case "agentList":
return GetAgentList(model as AgentRequest);
case "staticData":
return GetAccountBalance(model as StaticData);
case "cancelSend":
return CancelTxn(model as CancelTxn);
default:
return new TPResponse() { ResponseCode = "1", Msg = "Method Name Not Found !" };
}
}
private TokenResponse GetToken()
{
TokenResponse tokenResponse = new TokenResponse();
try
{
var client = new RestClient(baseUrl);
var authorizeHeader = "Basic " + Base64Encode($"{ username}:{password}");
var request = new RestRequest(GET_TOKEN, Method.POST);
request.AddHeader("Content-Type", "application/json");
if (!string.IsNullOrEmpty(authorizeHeader))
request.AddHeader("Authorization", authorizeHeader);
request.RequestFormat = DataFormat.Json;
tokenResponse = client.Execute<TokenResponse>(request).Data;
}
catch (Exception ex)
{
tokenResponse.Success = false;
tokenResponse.StatusDescription = ex.ToString();
}
return tokenResponse;
}
private TPResponse AccountValidation(AccountValidate accountValidate)
{
TPResponse _response = new TPResponse() { Id = "1" };
try
{
var client = new RestClient(baseUrl);
var requestJson = string.Empty;
var method = string.Empty;
if (accountValidate.PaymentMode == "AC")
{
method = ACCOUNT_VERIFY;
BracValidationRequest accountVerifyRequest = new BracValidationRequest { AccountNumber = accountValidate.AccountNumber };
requestJson = JsonConvert.SerializeObject(accountVerifyRequest);
_log.Info($"{method}|REQUEST : {requestJson}");
_response = apiHelper.ThirdPartyApi<JWTRequest, TPResponse>(new JWTRequest() { RequestString = requestJson }, "brac/GetJwtToken", out _response);
}
else
{
method = WALLET_VERIFY;
WalletValidationRequest accountVerifyRequest = new WalletValidationRequest
{
WalletNo = accountValidate.AccountNumber,
WalletName = accountValidate.ReceiverName,
WalletPartner = !string.IsNullOrEmpty(accountValidate.BankCode) ? 1 : Convert.ToInt32(accountValidate.BankCode)
};
requestJson = JsonConvert.SerializeObject(accountVerifyRequest, Formatting.None);
_log.Info($"{method}|REQUEST : {requestJson}");
_response = apiHelper.ThirdPartyApi<JWTRequest, TPResponse>(new JWTRequest() { RequestString = requestJson }, "brac/GetJwtToken", out _response);
}
if (_response == null)
{
if (_response == null)
_response = new TPResponse();
_response.Id = "1";
_response.Msg = "brac/GetJwtToken is null";
return _response;
}
else if (!_response.ResponseCode.Equals("0"))
{
return _response;
}
var bearerToken = GetTokenFromDB(accountValidate.UserName);
var result = client.Execute<string>(BuildRequest<string>(method, _response.Id, bearerToken.Token));
_log.Info($"{method}|RESPONSE : {result.Content}");
if (result.StatusCode == HttpStatusCode.OK)
{
var res = result.Content;
_response = apiHelper.ThirdPartyApi<JWTRequest, TPResponse>(new JWTRequest() { RequestString = res }, "brac/GetPayLoad", out _response);
_log.Info($"{method}|RESPONSE : {JsonConvert.SerializeObject(_response)}");
if (_response.ResponseCode.Equals("0"))
{
var bracResponse = JObject.Parse(_response.Data.ToString());
_response.Msg = bracResponse["StatusDescription"].ToString();
//_response.Extra = _response.Data.ToString();
_response.Id = bracResponse["StatusCode"].ToString();
if (bracResponse["Success"] != null && (bracResponse["Success"].ToString().ToLower().Equals("true")))
{
_response.ResponseCode = "0";
if (accountValidate.PaymentMode == "AC")
{
var data = JsonConvert.DeserializeObject<AccountValidationReponse>(_response.Data.ToString());
_response.Extra = data.Data.AccountNumber;
_response.Extra2 = data.Data.AccountName;
_response.Data = _response.Data.ToString();
}
else
{
var data = JsonConvert.DeserializeObject<WalletValidationReponse>(_response.Data.ToString());
_response.Extra = data.Data.WalletNo;
_response.Extra2 = data.Data.WalletName;
_response.Data = _response.Data.ToString();
}
}
else
{
_response.ResponseCode = "1";
if (accountValidate.PaymentMode == "AC")
{
var data = JsonConvert.DeserializeObject<AccountValidationReponse>(_response.Data.ToString());
_response.Extra = data.Data.AccountNumber;
_response.Extra2 = data.Data.AccountName;
_response.Msg = data.StatusDescription;
_response.Data = _response.Data;
}
else
{
var data1 = JsonConvert.DeserializeObject<WalletValidationReponse>(_response.Data.ToString());
_response.Extra = data1.Data.WalletNo;
_response.Extra2 = data1.Data.WalletName;
_response.Data = _response.Data;
_response.Msg = data1.StatusDescription;
}
}
}
else
{
if (_response == null)
{
_response = new TPResponse();
}
_response.ResponseCode = "1";
_response.Msg = "brac/GetPayLoad is null";
}
}
else
{
if (result.StatusCode.Equals("403"))
{
var tokenResponse = GetTokenFromDB(username, true);
ThirdPartyRepo thirdPartyRepo = new ThirdPartyRepo();
var result2 = thirdPartyRepo.UpdateToken(accountValidate.UserName, tokenResponse); // update after expiried
}
_response.ResponseCode = "1";
_response.Msg = string.IsNullOrEmpty(result.Content) ? result.ErrorMessage ?? result.StatusDescription : result.Content;
}
}
catch (Exception ex)
{
if (_response == null)
_response = new TPResponse();
_response.ResponseCode = "999";
_response.Msg = ex.ToString();
}
return _response;
}
private TPResponse SendTransaction(SendTransaction sendTransaction)
{
TPResponse _response = new TPResponse() { Id = "1" };
try
{
var client = new RestClient(baseUrl);
var requestJson = string.Empty;
BracPostTransactionRequest requestTxn = SendModelMap(sendTransaction);
requestJson = JsonConvert.SerializeObject(requestTxn, Formatting.None);
_log.Info($"{POST_TRANSACTION}|REQUEST : {requestJson}");
_response = apiHelper.ThirdPartyApi<JWTRequest, TPResponse>(new JWTRequest() { RequestString = requestJson }, "brac/GetJwtToken", out _response);
var bearerToken = GetTokenFromDB(sendTransaction.UserName);
var result = client.Execute<string>(BuildRequest<string>(POST_TRANSACTION, _response.Id, bearerToken.Token));
// _log.Info($"{POST_TRANSACTION}|RESPONSE : {result.Content}");
if (result.StatusCode == System.Net.HttpStatusCode.OK)
{
var res = result.Content;
_response = apiHelper.ThirdPartyApi<JWTRequest, TPResponse>(new JWTRequest() { RequestString = res }, "brac/GetPayLoad", out _response);
_log.Info($"{POST_TRANSACTION}|RESPONSE : {JsonConvert.SerializeObject(_response, Formatting.Indented)}");
if (_response.ResponseCode.Equals("0"))
{
var bracResponse = JObject.Parse(_response.Data.ToString());
_response.Msg = bracResponse["StatusDescription"].ToString();
_response.Extra = _response.Data.ToString();
_response.Id = bracResponse["StatusCode"].ToString();
var sData = JsonConvert.DeserializeObject<BracPostTransactionResponse>(_response.Data.ToString());
_response.Msg = sData.StatusDescription;
_response.Data = sData;
if (bracResponse["Success"] != null &&
bracResponse["Success"].ToString().Equals("True") && bracResponse["StatusCode"].ToString().Equals("800"))
{
_response.ResponseCode = "0";
_response.Extra = sData.Data.TTReferenceNo;
}
else
{
_response.ResponseCode = "1";
}
}
else
{
if (_response == null)
{
_response = new TPResponse();
}
_response.ResponseCode = "1";
_response.Msg = "brac/GetPayLoad is null";
}
}
else
{
if (result.StatusCode.Equals("403"))
{
var tokenResponse = GetTokenFromDB(username, true);
ThirdPartyRepo thirdPartyRepo = new ThirdPartyRepo();
var result2 = thirdPartyRepo.UpdateToken(sendTransaction.UserName, tokenResponse); // update after expiried
}
_response.ResponseCode = "1";
_response.Msg = string.IsNullOrEmpty(result.Content) ? result.ErrorMessage : result.Content;
}
}
catch (Exception)
{
throw;
}
return _response;
}
private BracPostTransactionRequest SendModelMap(SendTransaction model)
{
var r = new BracPostTransactionRequest
{
TTReferenceNo = model.Transaction.JMEControlNo,
BeneficiaryName = model.Receiver.RFullName,
BeneficiaryPhoneNo = model.Receiver.RMobile,
BeneficiaryIdentityType = "",
BeneficiaryIdentityNumber = "",
BeneficiaryAddress = model.Receiver.RAdd1.Trim(),
BeneficiaryAccountNo = model.Receiver.RAccountNo,
DistrictISOCode = model.Receiver.RStateId,
ThanaCode = "",
TTAmount = Convert.ToDouble(model.Transaction.PAmt),
SenderName = model.Sender.SFullName,
SenderCountryCode = model.Sender.SNativeCountry,
ModeOfPayment = model.Transaction.PaymentType,
SenderDocumentNumber = model.Sender.SIdNo,
SenderNationality = model.Sender.SNativeCountry,
SenderDob = model.Sender.SBirthDate,
SenderMsisdn = model.Sender.SMobile,
RoutingNo = model.Receiver.RLocation,
Purpose = model.Transaction.PurposeOfRemittanceName,
BeneficiaryRelation = model.Receiver.RelWithSenderName,
BeneficiaryCountry = model.Receiver.RNativeCountry,
BeneficiaryCurrency = model.Transaction.PCurr,
SenderCurrencyCode = model.Transaction.CollCurr,
WalletPartner = Convert.ToInt32(model.Agent.PBankType),
SenderDocumentType = model.Sender.SIdType,
SenderAddress = model.Sender.SAddress.Trim()
};
if (r.ModeOfPayment.Equals("02") | r.ModeOfPayment.Equals("06"))
{
r.BeneficiaryName = GetStatic.Truncate(r.BeneficiaryName, 22);
}
if (!string.IsNullOrEmpty(model.Receiver.RMobile))
{
r.BeneficiaryPhoneNo = getRecFormattedNumber(model.Receiver.RMobile);
}
if (!string.IsNullOrEmpty(model.Sender.SMobile))
{
r.SenderMsisdn = getSenderFormattedNumber(model.Sender.SMobile);
}
return r;
}
private string getSenderFormattedNumber(string number)
{
string finalNo = number;
if (!number.Contains("+81"))
{
string mobileFirst = number.Substring(0, 1);
if (mobileFirst == "0")
{
if (number.Length == 11)
{
finalNo = "+81" + number.Substring(1, number.Length - 1);
return finalNo;
}
else if (number.Length < 11)
{
finalNo = $"+81{number}";
}
}
else if (number.Substring(0, 1) != "0" && number.Length == 10)
{
finalNo = $"+81{number}";
}
}
else if (number.Contains("+81"))
{
string MobN = number.Substring(4, 1);
if (MobN == "0" && number.Length > 14)
{
finalNo = number.Remove(4, 1);
}
}
if (!finalNo.Substring(0, 1).Contains("+"))
finalNo = $"+{finalNo}";
return finalNo;
}
private string getRecFormattedNumber(string number)
{
string finalNo = number;
if (!number.Contains("+88"))
{
string mobileFirst = number.Substring(0, 1);
if (mobileFirst == "0")
{
if (number.Length == 11)
{
finalNo = "+88" + number.Substring(1, number.Length - 1);
return finalNo;
}
else if (number.Length < 11)
{
finalNo = $"+88{number}";
}
}
else if (number.Substring(0, 1) != "0" && number.Length == 10)
{
finalNo = $"+88{number}";
}
}
else if (number.Contains("+88"))
{
string MobN = number.Substring(4, 1);
if (MobN == "0" && number.Length > 14)
{
finalNo = number.Remove(4, 1);
}
}
if (!finalNo.Substring(0, 1).Contains("+"))
finalNo = $"+{finalNo}";
return finalNo;
}
private TPResponse GetBankList(BankRequest bank)
{
TPResponse _response = new TPResponse() { Id = "1" };
if (bank.IsBranch)
{
return GetBankBranchList(bank);
}
try
{
var client = new RestClient(baseUrl);
var requestJson = string.Empty;
if (!string.IsNullOrEmpty(bank.PaymentMethod) && bank.PaymentMethod.Equals("NBSP"))
requestJson = JsonConvert.SerializeObject(ConvetToNBSPbankRequest(bank), Formatting.None);
else
requestJson = JsonConvert.SerializeObject(ConvetTobracBankRequest(bank), Formatting.None);
_log.Info($"{GET_CODES}|REQUEST : {requestJson}");
_response = apiHelper.ThirdPartyApi<JWTRequest, TPResponse>(new JWTRequest() { RequestString = requestJson }, "brac/GetJwtToken", out _response);
if (_response == null)
{
if (_response == null)
_response = new TPResponse();
_response.Id = "1";
_response.Msg = "brac/GetJwtToken is null";
return _response;
}
else if (!_response.ResponseCode.Equals("0"))
{
return _response;
}
var bearerToken = GetTokenFromDB(bank.UserName);
var result = client.Execute<string>(BuildRequest<string>(GET_CODES, _response.Id, bearerToken.Token));
//_log.Info($"{ACCOUNT_VERIFY}|RESPONSE : {result.Content}");
if (result.StatusCode == System.Net.HttpStatusCode.OK)
{
var res = result.Content;
_response = apiHelper.ThirdPartyApi<JWTRequest, TPResponse>(new JWTRequest() { RequestString = res }, "brac/GetPayLoad", out _response);
_log.Info($"{ACCOUNT_VERIFY}|RESPONSE : {JsonConvert.SerializeObject(_response, Formatting.Indented)}");
if (_response.ResponseCode.Equals("0"))
{
var bracResponse = JObject.Parse(_response.Data.ToString());
_response.Msg = bracResponse["StatusDescription"].ToString();
//_response.Extra = _response.Data.ToString();
_response.Id = bracResponse["StatusCode"].ToString();
if (bracResponse["Success"] != null && (bracResponse["Success"].ToString().ToLower().Equals("true")))
{
_response.ResponseCode = "0";
_response.Data = JsonConvert.DeserializeObject<GetBankCodesResponse>(_response.Data.ToString()).Data;
}
}
else
{
if (_response == null)
{
_response = new TPResponse();
_response.ResponseCode = "1";
_response.Msg = "brac/GetPayLoad is null";
}
return _response;
}
}
else
{
_response.ResponseCode = "1";
_response.Msg = string.IsNullOrEmpty(result.Content) ? result.ErrorMessage ?? result.StatusDescription : result.Content;
}
}
catch (Exception)
{
throw;
}
return _response;
}
private GetBankCodes ConvetTobracBankRequest(BankRequest bank)
{
return new GetBankCodes()
{
QueryType = bank.QueryType < 0 ? 4 : bank.QueryType
};
}
private GetBranchCodes ConvetTobracBranchRequest(BankRequest bank)
{
return new GetBranchCodes()
{
QueryType = bank.QueryType,
QuerySubType = Convert.ToInt32(bank.BankName)
};
}
private GetBranchCodes ConvetToNBSPbankRequest(BankRequest bank)
{
return new GetBranchCodes()
{
QueryType = bank.QueryType,
QuerySubType = 6
};
}
private GetBranchCodes ConvetTobracBranchOnlyRequest(BankRequest bank)
{
return new GetBranchCodes()
{
QueryType = 1,
QuerySubType = Convert.ToInt32(bank.BankName)
};
}
private TPResponse GetAccountBalance(StaticData staticData)
{
TPResponse _response = new TPResponse() { Id = "1" };
try
{
var client = new RestClient(baseUrl);
var requestJson = string.Empty;
var bearerToken = GetTokenFromDB(staticData.UserName);
var result = client.Execute<string>(BuildRequest<string>(GET_ACCOUNTBALANCE, "", bearerToken.Token));
if (result.StatusCode == HttpStatusCode.OK)
{
var res = result.Content;
_response = apiHelper.ThirdPartyApi<JWTRequest, TPResponse>(new JWTRequest() { RequestString = res }, "brac/GetPayLoad", out _response);
_log.Info($"{GET_ACCOUNTBALANCE}|RESPONSE : {JsonConvert.SerializeObject(_response)}");
if (_response.ResponseCode.Equals("0"))
{
var bracResponse = JObject.Parse(_response.Data.ToString());
_response.Msg = bracResponse["StatusDescription"].ToString();
_response.Id = bracResponse["StatusCode"].ToString();
_response.Data = JsonConvert.DeserializeObject<AccountBalanceReponse>(_response.Data.ToString());
}
else
{
if (_response == null)
{
_response = new TPResponse();
}
_response.ResponseCode = "1";
_response.Msg = "brac/GetPayLoad is null";
}
}
else
{
_response.Msg = string.IsNullOrEmpty(result.Content) ? result.ErrorMessage ?? result.StatusDescription : result.Content;
}
}
catch (Exception ex)
{
if (_response == null)
_response = new TPResponse();
_response.ResponseCode = "999";
_response.Msg = ex.ToString();
}
return _response;
}
private TPResponse GetAgentList(AgentRequest agent)
{
return GetBankBranchList(new BankRequest() { UserName = agent.UserName, BankName = agent.ExternalBankId }, true);
}
private TPResponse GetBankBranchList(BankRequest bank, bool onlyBranch = false)
{
TPResponse _response = new TPResponse() { Id = "1" };
try
{
var client = new RestClient(baseUrl);
var requestJson = string.Empty;
if (onlyBranch)
{
requestJson = JsonConvert.SerializeObject(ConvetTobracBranchOnlyRequest(bank), Formatting.None);
}
else
{
requestJson = JsonConvert.SerializeObject(ConvetTobracBranchRequest(bank), Formatting.None);
}
if (onlyBranch)
_log.Info($"{GET_MAPPING_CODES}|REQUEST : {requestJson}");
else
_log.Info($"{ GET_CODES}|REQUEST : {requestJson}");
_response = apiHelper.ThirdPartyApi<JWTRequest, TPResponse>(new JWTRequest() { RequestString = requestJson }, "brac/GetJwtToken", out _response);
if (_response == null)
{
if (_response == null)
_response = new TPResponse();
_response.Id = "1";
_response.Msg = "brac/GetJwtToken is null";
return _response;
}
else if (!_response.ResponseCode.Equals("0"))
{
return _response;
}
var bearerToken = GetTokenFromDB(bank.UserName);
var result = client.Execute<string>(BuildRequest<string>(onlyBranch ? GET_MAPPING_CODES : GET_CODES, _response.Id, bearerToken.Token));
_log.Info($"{ACCOUNT_VERIFY}|RESPONSE : {result.Content}");
if (result.StatusCode == System.Net.HttpStatusCode.OK)
{
var res = result.Content;
_response = apiHelper.ThirdPartyApi<JWTRequest, TPResponse>(new JWTRequest() { RequestString = res }, "brac/GetPayLoad", out _response);
if (_response.ResponseCode.Equals("0"))
{
var bracResponse = JObject.Parse(_response.Data.ToString());
_response.Msg = bracResponse["StatusDescription"].ToString();
//_response.Extra = _response.Data.ToString();
_response.Id = bracResponse["StatusCode"].ToString();
if (bracResponse["Success"] != null && (bracResponse["Success"].ToString().ToLower().Equals("true")))
{
_response.ResponseCode = "0";
_response.Data = JsonConvert.DeserializeObject<GetBankCodesResponse>(_response.Data.ToString()).Data;
// _response.Data = bracbranch.Select(x => new BankBranchResponse() { BankBranchID = x.CodeId.ToString(), BankBranchName = x.CodeName, BankID = x.ParentCodeId.ToString() }).ToList();
}
}
else
{
if (_response == null)
{
_response = new TPResponse();
_response.ResponseCode = "1";
_response.Msg = "brac/GetPayLoad is null";
}
return _response;
}
}
else
{
_response.ResponseCode = "1";
_response.Msg = string.IsNullOrEmpty(result.Content) ? result.ErrorMessage ?? result.StatusDescription : result.Content;
}
}
catch (Exception ex)
{
throw ex;
}
return _response;
}
private TPResponse GetTxnStatus(GetStatus getStatus)
{
TPResponse _response = new TPResponse();
try
{
var client = new RestClient(baseUrl);
var requestJson = string.Empty;
var statusRequest = ConvertToStatusRequest(getStatus);
requestJson = JsonConvert.SerializeObject(statusRequest, Formatting.None);
_log.Info($"{TRANSACTION_STATUS}|REQUEST : {requestJson}");
_response = apiHelper.ThirdPartyApi<JWTRequest, TPResponse>(new JWTRequest() { RequestString = requestJson }, "brac/GetJwtToken", out _response);
if (_response == null)
{
if (_response == null)
_response = new TPResponse();
_response.Id = "1";
_response.Msg = "brac/GetJwtToken is null";
return _response;
}
else if (!_response.ResponseCode.Equals("0"))
{
return _response;
}
var bearerToken = GetTokenFromDB(getStatus.UserName);
var result = client.Execute<string>(BuildRequest<string>(TRANSACTION_STATUS, _response.Id, bearerToken.Token));
// _log.Info($"{TRANSACTION_STATUS}|RESPONSE : {result.Content}");
if (result.StatusCode == System.Net.HttpStatusCode.OK)
{
var res = result.Content;
_response = apiHelper.ThirdPartyApi<JWTRequest, TPResponse>(new JWTRequest() { RequestString = res }, "brac/GetPayLoad", out _response);
_log.Info($"{TRANSACTION_STATUS}|RESPONSE : {JsonConvert.SerializeObject(_response, Formatting.Indented)}");
if (_response.ResponseCode.Equals("0"))
{
var bracResponse = JObject.Parse(_response.Data.ToString());
_response.Msg = bracResponse["StatusDescription"].ToString();
_response.Id = bracResponse["StatusCode"].ToString();
var bracstatusResponses = JsonConvert.DeserializeObject<BracTranStatusResponse>(_response.Data.ToString());
_response.Data = bracstatusResponses;
if (bracResponse["Success"] != null && (bracResponse["Success"].ToString().ToLower().Equals("true")))
{
_response.ResponseCode = "0";
var datam = bracstatusResponses.Data.SingleOrDefault(x => x.TTReferenceNo.Equals(getStatus.ControlNo));
string paidStatus = "UNPAID";
if (datam != null)
{
_response.Msg = datam.TTStatusDescription;
_response.Extra2 = datam.TTStatusCode;
if (datam.TTStatusCode == "000")
paidStatus = "PAID";
else if (datam.TTStatusCode == "407" & datam.TTStatusDescription.Contains("Cancellation"))
paidStatus = "CANCELLED";
}
_response.ResponseCode = paidStatus == "PAID" ? "0" : "1";
_response.Extra = paidStatus;
//if (!_response.ResponseCode.Equals("0"))
//{
// _response.ResponseCode = "1";
//}
}
}
else
{
if (_response == null)
{
_response = new TPResponse();
_response.ResponseCode = "1";
_response.Msg = "brac/GetPayLoad is null";
}
return _response;
}
}
}
catch (Exception ex)
{
if (_response == null)
_response = new TPResponse();
_response.ResponseCode = "999";
_response.Msg = ex.ToString();
}
return _response;
}
private BracTranStatus ConvertToStatusRequest(GetStatus getStatus)
{
return new BracTranStatus()
{
TTReferenceNo = getStatus.ControlNo,
PostedDateFrom = getStatus.PostedDateFrom,
PostedDateTo = getStatus.PostedDateTo
};
}
private TPResponse CancelTxn(CancelTxn cancel)
{
TPResponse _response = new TPResponse();
try
{
var client = new RestClient(baseUrl);
var requestJson = string.Empty;
var request = new BracTranCancel() { TTReferenceNo = cancel.PartnerPinNo, Reason = cancel.CancelReason };
requestJson = JsonConvert.SerializeObject(request, Formatting.None);
_log.Info($"{TRANSACTION_CANCEL}|REQUEST : {requestJson}");
_response = apiHelper.ThirdPartyApi<JWTRequest, TPResponse>(new JWTRequest() { RequestString = requestJson }, "brac/GetJwtToken", out _response);
if (_response == null)
{
if (_response == null)
_response = new TPResponse();
_response.Id = "1";
_response.Msg = "brac/GetJwtToken is null";
return _response;
}
else if (!_response.ResponseCode.Equals("0"))
{
return _response;
}
var bearerToken = GetTokenFromDB(cancel.UserName);
var result = client.Execute<string>(BuildRequest<string>(TRANSACTION_CANCEL, _response.Id, bearerToken.Token));
// _log.Info($"{TRANSACTION_STATUS}|RESPONSE : {result.Content}");
if (result.StatusCode == System.Net.HttpStatusCode.OK)
{
var res = result.Content;
_response = apiHelper.ThirdPartyApi<JWTRequest, TPResponse>(new JWTRequest() { RequestString = res }, "brac/GetPayLoad", out _response);
_log.Info($"{TRANSACTION_CANCEL}|RESPONSE : {JsonConvert.SerializeObject(_response, Formatting.Indented)}");
if (_response.ResponseCode.Equals("0"))
{
var bracResponse = JObject.Parse(_response.Data.ToString());
_response.Msg = bracResponse["StatusDescription"].ToString();
_response.Id = bracResponse["StatusCode"].ToString();
var bracCancelResponses = JsonConvert.DeserializeObject<BracTranCancelResponse>(_response.Data.ToString());
_response.Data = bracCancelResponses;
if (bracResponse["Success"] != null && (bracResponse["Success"].ToString().ToLower().Equals("true")))
{
_response.ResponseCode = "0";
}
else
_response.ResponseCode = "1";
}
else
{
if (_response == null)
{
_response = new TPResponse();
_response.ResponseCode = "1";
_response.Msg = "brac/GetPayLoad is null";
}
return _response;
}
}
}
catch (Exception ex)
{
if (_response == null)
_response = new TPResponse();
_response.ResponseCode = "999";
_response.Msg = ex.ToString();
}
return _response;
}
#region Helper
private TokenData GetTokenFromDB(string user, bool is401 = false)
{
TokenResponse tokenResponse = new TokenResponse();
TokenData res = new TokenData();
ThirdPartyRepo thirdPartyRepo = new ThirdPartyRepo();
if (is401)//if the token is expired, the response will be 401 unauthorized; get a new token.
{
tokenResponse = GetToken();
var is401R = thirdPartyRepo.GetBracToken(user, tokenResponse.Data); // direct Request after 401
if (is401R.ResponseCode == "0")
{
res.Token = is401R.Id;
}
}
else
{
var result = thirdPartyRepo.GetBracToken(user, res);
if (result.ResponseCode == "001") //First time
{
tokenResponse = GetToken();
var result1 = thirdPartyRepo.GetBracToken(user, tokenResponse.Data);
if (result1.ResponseCode == "0") //Save First Request
{
res.Token = result1.Id;
}
else if (result1.ResponseCode == "999") //expired
{
tokenResponse = GetToken();
var result2 = thirdPartyRepo.UpdateToken(user, tokenResponse.Data); // update after expiried
if (result2.ResponseCode == "0")
{
res.Token = result2.Id;
}
}
}
else if (result.ResponseCode == "0") //Save First Request
{
res.Token = result.Id;
}
else if (result.ResponseCode == "999") //expired
{
tokenResponse = GetToken();
if (tokenResponse.Success && tokenResponse.StatusCode.Equals("801"))
{
var result2 = thirdPartyRepo.UpdateToken(user, tokenResponse.Data); // update after expiried
if (result2.ResponseCode == "0")
{
res.Token = result2.Id;
}
}
}
}
return res;
}
private RestRequest BuildRequest<T>(string action, string requestJWT, string bearerToken = "", Method method = Method.POST) where T : class
{
var request = new RestRequest(action, method);
request.AddHeader("Content-Type", "text/plain");
if (!string.IsNullOrEmpty(bearerToken))
request.AddHeader("Authorization", string.Format("Bearer {0}", bearerToken));
request.RequestFormat = DataFormat.None;
request.AddParameter("text/plain", requestJWT, ParameterType.RequestBody);
return request;
}
private static string Base64Encode(string plainText)
{
var plainTextBytes = Encoding.UTF8.GetBytes(plainText);
return Convert.ToBase64String(plainTextBytes);
}
#endregion
}
}