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 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(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(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(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(BuildRequest(method, _response.Id, bearerToken.Token)); _log.Info($"{method}|RESPONSE : {result.Content}"); if (result.StatusCode == HttpStatusCode.OK) { var res = result.Content; _response = apiHelper.ThirdPartyApi(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(_response.Data.ToString()); _response.Extra = data.Data.AccountNumber; _response.Extra2 = data.Data.AccountName; _response.Data = _response.Data.ToString(); } else { var data = JsonConvert.DeserializeObject(_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(_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(_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(new JWTRequest() { RequestString = requestJson }, "brac/GetJwtToken", out _response); var bearerToken = GetTokenFromDB(sendTransaction.UserName); var result = client.Execute(BuildRequest(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(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(_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(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(BuildRequest(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(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(_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(BuildRequest(GET_ACCOUNTBALANCE, "", bearerToken.Token)); if (result.StatusCode == HttpStatusCode.OK) { var res = result.Content; _response = apiHelper.ThirdPartyApi(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(_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(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(BuildRequest(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(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(_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(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(BuildRequest(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(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(_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(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(BuildRequest(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(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(_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(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 } }