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