using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Net; using System.Net.Http; using System.Net.Http.Headers; using System.Reflection; using System.Security.Cryptography; using System.Text; using System.Threading.Tasks; using Common.Models.RequestResponse; using Common.Models.TxnModel; using Common.TPService; using Common.Utility; using log4net; using Newtonsoft.Json; using Wing.Model; using Newtonsoft.Json.Linq; using RestSharp; using Common.Models.Status; using java.security; using javax.crypto; using javax.crypto.spec; using Common.Models.Bank_Account; namespace Wing.ApiServices { public class WingApi : ITPApiServices { private readonly ILog _log = LogManager.GetLogger(typeof(WingApi)); private readonly string userName; private readonly string password; private readonly string client_id; private readonly string client_secret; private readonly string grant_type; private readonly string wing_base_url; private const string Cash_Pickup_Validate = "/api/v2/remittance/noaccount/validate"; private const string Cash_Pickup_Commit = "/api/v2/remittance/noaccount/commit"; private const string Account_Validate = "/api/v2/remittance/validate"; private const string Account_Commit = "/api/v2/remittance/commit"; private const string CrossBank_Validate = "/api/v1/crossbank/validate"; private const string CrossBank_Commit = "/api/v1/crossbank/commit"; private const string Status_Inquiry_Cash = "/api/v1/remittance/txn_inquiry"; private const string Status_Inquiry_Account = "/api/v1/remittance/txn_inquiry"; private const string Status_Inquiry_CrossBank = "/api/v1/crossbank/txn_inquiry"; private const string Validate_Customer_AccountNumber = "/api/v1/user/currency/"; private const string Validate_CrossBank_AccountNumber = "/api/v1/crossbank/currency"; private const string Auth_Token = "/oauth/token"; private readonly string AES_KEY; private List purpose = new List() { "TRF_RELATVIE", "TRF_SETTLEMENT", "TRF_SAVING", "TRF_OTHERS" }; private string access_token = string.Empty; public WingApi() { userName = GetStatic.ReadWebConfig("wing_userName", ""); password = GetStatic.ReadWebConfig("wing_password", ""); client_id = GetStatic.ReadWebConfig("wing_clientId", ""); client_secret = GetStatic.ReadWebConfig("wing_clientSecret", ""); grant_type = GetStatic.ReadWebConfig("wing_grantType", ""); wing_base_url = GetStatic.ReadWebConfig("wing_baseURL", ""); AES_KEY = GetStatic.ReadWebConfig("wing_AES_KEY", "HG58YZ3CR9"); } public TPResponse GetTPResponse(T model, string MethodName) where T : class { switch (MethodName) { case "send": return SendTransaction(model as SendTransaction); case "status": return GetStatus(model as GetStatus); case "verify": return VerifyAccount(model as AccountValidate, MethodName); default: throw new NotImplementedException(); } } private TPResponse VerifyAccount(AccountValidate av, string methodname) { TPResponse _response = new TPResponse(); try { var client = new RestClient(wing_base_url); var accountNumber = av.AccountNumber; access_token = GetAuthToken().AccessCode; //WingAccountVerifyRequest verifyAccountRequest = new WingAccountVerifyRequest(); //var requestJson = JsonConvert.SerializeObject(verifyAccountRequest, Formatting.None); LogicalThreadContext.Properties["MethodName"] = "VerifyAccount"; if (av.PaymentMode.ToLower()=="mobile wallet") { _log.Info($"{Validate_Customer_AccountNumber}|REQUEST : {av.AccountNumber}"); var result = client.Execute(BuildRequest(Validate_Customer_AccountNumber + accountNumber, null, Method.GET, access_token)); _log.Info($"{Validate_Customer_AccountNumber}|RESPONSE : {result.Content}"); if (result.StatusCode == System.Net.HttpStatusCode.OK) { var res = result.Data; _response.Data = result.Data; _response.ResponseCode = "0"; _response.Msg = "Success"; _response.Id = res.wing_account; _response.Extra = res.wallet_currency; _response.Extra2 = res.account_name; } else { var er = SimpleJson.DeserializeObject(result.Content); _response.ResponseCode = "1"; _response.Msg = string.IsNullOrEmpty(result.Content) ? result.ErrorMessage : $"{ er.error_code}-{er.message}"; } } else { CrossVerifyRequest crossVerifyRequest = new CrossVerifyRequest() { bank_account_number = av.AccountNumber, bank_name = av.BankCode }; var jsonData = JsonConvert.SerializeObject(crossVerifyRequest); _log.Info($"{Validate_CrossBank_AccountNumber}|REQUEST : {jsonData}"); var result = client.Execute(BuildRequest(Validate_CrossBank_AccountNumber, jsonData, Method.POST, access_token)); _log.Info($"{Validate_CrossBank_AccountNumber}|RESPONSE : {result.Content}"); if (result.StatusCode == System.Net.HttpStatusCode.OK) { var res = result.Data; _response.Data = result.Data; _response.ResponseCode = "0"; _response.Msg = "Success"; _response.Id = res.bank_code; _response.Extra = res.wallet_currency; _response.Extra2 = res.account_name; } else { var er = SimpleJson.DeserializeObject(result.Content); _response.ResponseCode = "1"; _response.Msg = string.IsNullOrEmpty(result.Content) ? result.ErrorMessage : $"{ er.error_code}-{er.message}"; } } } catch (Exception ex) { _response.ResponseCode = "999"; _response.Msg = ex.Message; } return _response; } private TPResponse GetStatus(GetStatus gs) { TPResponse _response = new TPResponse(); string type = ""; type = gs.PaymentMethod; if (type.ToLower() == "cash payment") { access_token = GetAuthToken().AccessCode; _response = GetCashStatus(gs); return _response; } if (type.ToLower() == "mobile wallet") { access_token = GetAuthToken().AccessCode; _response = GetAccountStatus(gs); return _response; } if (type.ToLower() == "bank deposit") { access_token = GetAuthToken().AccessCode; _response = GetCrossBankStatus(gs); return _response; } return _response; } private TPResponse SendTransaction(SendTransaction sT) { TPResponse _response = new TPResponse(); string type = ""; type = sT.Transaction.PaymentType; if (type.ToLower() == "cash payment") { access_token = GetAuthToken().AccessCode; var processvalidateResult = GetCashValidate(sT); if (processvalidateResult.ResponseCode.Equals("0")) { _response = GetCashCommit(access_token); } else _response = processvalidateResult; return _response; } else if (type.ToLower() == "mobile wallet") { access_token = GetAuthToken().AccessCode; var status = GetAccountStatus(new GetStatus() { ControlNo = sT.Transaction.JMEControlNo, IsFromPartnerPinNo = false }); if (status.ResponseCode == "2") //"Transaction not found!" { var processvalidateResult = GetWingsAccountValidate(sT); if (processvalidateResult.ResponseCode.Equals("0")) { _response = GetWingsAccountCommit(access_token); } else _response = processvalidateResult; } else { _response.Data = status.Data; _response.ResponseCode = "1"; _response.Extra = status.Extra; } return _response; } else if (type.ToLower() == "bank deposit") { access_token = GetAuthToken().AccessCode; var processvalidateResult = GetWingsCrossBankValidate(sT); if (processvalidateResult.ResponseCode.Equals("0")) { _response = GetWingsCrossBankCommit(access_token); } else _response = processvalidateResult; return _response; } else { _response.ResponseCode = "1"; _response.Msg = $"Invalid Payment: {sT.Transaction.PaymentType}"; } return _response; } private TPResponse GetRestApiUrl(RequestModel model, string api_url, string type, string requestType, string MethodType = "post", string getObjectOnly = null) { TPResponse _tPResponse = new TPResponse() { ResponseCode = "0" }; string commit_url = ""; // WTokenResponse tokenResponse = new WTokenResponse(); WTokenData tokenResponse = new WTokenData(); using (HttpClient httpClient = new HttpClient()) { try { _log.Info($"{api_url}|REQUEST : {JsonConvert.SerializeObject(model).ToString()}"); httpClient.BaseAddress = new Uri(wing_base_url); // string tokenNo = GetAuthToken(); tokenResponse = GetAuthToken(); httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); short timeOut = Convert.ToInt16(GetStatic.ReadWebConfig("transfast_apiTimeOutInSecond", "100")); httpClient.Timeout = new TimeSpan(0, 0, timeOut); //var result1 = client.Execute(BuildRequest(api_url, "", tokenNo)); //if (result1.StatusCode == System.Net.HttpStatusCode.OK) //{ // var res = result1.Content; //} //httpClient.PostAsync(api_url, result).Result; //var finalResult = result.Content.ReadAsStringAsync().Result; //if (result.StatusCode == System.Net.HttpStatusCode.OK) //{ // _tPResponse.ResponseCode = "0"; // // _tPResponse.Data = JsonConvert.DeserializeObject(result); // if (getObjectOnly != null) // _tPResponse = GetOnlyRequiredData(_tPResponse, getObjectOnly); // return _tPResponse; //} // httpClient.DefaultRequestHeaders.TryAddWithoutValidation("Authorization", tokenNo); // httpClient.DefaultRequestHeaders.Add("Authorization", tokenNo); httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", tokenResponse.AccessCode); HttpResponseMessage resp = new HttpResponseMessage(); string jsonData = JsonConvert.SerializeObject(model).ToString(); StringContent jbdContent = new StringContent(jsonData, Encoding.UTF8, "application/json"); if (MethodType.ToLower().Equals("get")) { resp = httpClient.GetAsync(api_url).Result; } if (MethodType.ToLower().Equals("put")) { resp = httpClient.PutAsync(api_url, jbdContent).Result; } if (MethodType.ToLower().Equals("post")) { resp = httpClient.PostAsync(api_url, jbdContent).Result; } // resp = httpClient.PostAsync(api_url, jbdContent).Result; string result = resp.Content.ReadAsStringAsync().Result; _log.Info($"{api_url}|RESPONSE : {result}"); if (requestType == "send") { if (resp.IsSuccessStatusCode) { _tPResponse.ResponseCode = "0"; if (type == "Cash") { commit_url = $"{wing_base_url}{Cash_Pickup_Commit}"; } if (type == "Account") { commit_url = $"{wing_base_url}{Account_Commit}"; } if (type == "CrossBank") { commit_url = $"{wing_base_url}{CrossBank_Commit}"; } jsonData = $"{{}}"; StringContent jbdContent1 = new StringContent(jsonData, Encoding.UTF8, "application/json"); resp = httpClient.PostAsync(commit_url, jbdContent1).Result; // Task task = httpClient.PostAsync(commit_url, new{}).Result; result = resp.Content.ReadAsStringAsync().Result; _log.Info($"{api_url}|RESPONSE : {result}"); _tPResponse.Data = JsonConvert.DeserializeObject(result); if (getObjectOnly != null) _tPResponse = GetOnlyRequiredData(_tPResponse, getObjectOnly); return _tPResponse; } else { _tPResponse.ResponseCode = "1"; _tPResponse.Data = JsonConvert.DeserializeObject(result); if (resp.StatusCode.ToString().ToLower() != "notfound") { _tPResponse.Msg = "Status Code: " + resp.StatusCode.ToString().Replace("
", "").Replace(Environment.NewLine, "") + " " + GetResponseMessage(_tPResponse.Data as WingSendTxnFailedResponse); } else { _tPResponse.Msg = "Status Code:" + resp.StatusCode.ToString(); } if (getObjectOnly != null) _tPResponse = GetOnlyRequiredData(_tPResponse, getObjectOnly); return _tPResponse; } } else { if (resp.IsSuccessStatusCode) { _tPResponse.ResponseCode = "0"; _tPResponse.Data = JsonConvert.DeserializeObject(result); if (getObjectOnly != null) _tPResponse = GetOnlyRequiredData(_tPResponse, getObjectOnly); return _tPResponse; } else { _tPResponse.Msg = "Status Code:" + resp.StatusCode.ToString(); } if (getObjectOnly != null) _tPResponse = GetOnlyRequiredData(_tPResponse, getObjectOnly); return _tPResponse; } } catch (HttpRequestException ex) { _tPResponse.ResponseCode = "999"; _tPResponse.Msg = ex.Message; _tPResponse.Data = ex.Data; } }; return _tPResponse; } private string GetResponseMessage(WingSendTxnFailedResponse txnFail) { throw new NotImplementedException(); } private TPResponse GetOnlyRequiredData(TPResponse response, string objectName) { if (response.Data != null) { PropertyInfo fieldName = response.Data.GetType().GetProperty(objectName); object values = fieldName.GetValue(response.Data, null); response.Data = values; } return response; } // public static async Task PostFormUrlEncoded(string url, IEnumerable> postData) private WTokenData GetAuthToken() { //WTokenResponse tokenResponse = new WTokenResponse(); WTokenData tokenResponse = new WTokenData(); string token_url = $"{wing_base_url}{Auth_Token}"; try { using (HttpClient httpClient = new HttpClient()) { var data = new Dictionary { { "username", userName }, { "password", password}, { "client_id", client_id}, { "client_secret", client_secret }, { "grant_type", grant_type } }; var content = new FormUrlEncodedContent(data); content.Headers.Clear(); content.Headers.Add("Content-Type", "application/x-www-form-urlencoded"); var response = httpClient.PostAsync(token_url, content).Result; string resultData = response.Content.ReadAsStringAsync().Result; if (response.IsSuccessStatusCode) { var resp = JObject.Parse(resultData.ToString()); tokenResponse.AccessCode = access_token = resp["access_token"].ToString(); } } } catch (Exception ex) { tokenResponse.AccessCode = "0"; tokenResponse.Scope = ex.ToString(); } return tokenResponse; } #region Map Model private WingSendTxnRequestCash MapSendTransactionDataCash(SendTransaction sT) { WingSendTxnRequestCash r = new WingSendTxnRequestCash() { first_name = $"{sT.Sender.SFirstName}{ (!string.IsNullOrEmpty(sT.Sender.SMiddleName) ? " " + sT.Sender.SMiddleName : "")}", last_name = sT.Sender.SLastName1, gender = sT.Sender.SGender, id_number = sT.Sender.SIdNo, id_type = sT.Sender.SIdType, nationality = sT.Sender.SCountryName, date_of_birth = sT.Sender.SBirthDate, country_of_birth = sT.Sender.SNativeCountry, occupation = sT.Sender.SOccuptionName, sender_account = sT.Sender.FormOfPaymentId, country_code = "JPN", receiver_phone = sT.Receiver.RMobile, receiver_name = sT.Receiver.RFullName, amount = sT.Transaction.PAmt, currency = sT.Transaction.PCurr, purpose = purpose.Contains(sT.Transaction.PurposeOfRemittanceName) ? sT.Transaction.PurposeOfRemittanceName : "TRF_OTHERS", // other = sT.Transaction.PayoutMsg, ext_transaction_id = sT.TranId.ToString(), ext_transaction_date = sT.Transaction.TxnDate }; return r; } private WingSendTxnRequestAcc MapSendTransactionDataAcc(SendTransaction sT) { return new WingSendTxnRequestAcc() { first_name = $"{sT.Sender.SFirstName}{ (!string.IsNullOrEmpty(sT.Sender.SMiddleName) ? " " + sT.Sender.SMiddleName : "")}", last_name = sT.Sender.SLastName1, gender = sT.Sender.SGender, id_number = sT.Sender.SIdNo, id_type = sT.Sender.SIdType, nationality = sT.Sender.SCountryName, date_of_birth = sT.Sender.SBirthDate, country_of_birth = sT.Sender.SNativeCountry, occupation = sT.Sender.SOccuptionName, sender_account = sT.Sender.FormOfPaymentId, country_code = "JPN", receiver_account = sT.Receiver.RAccountNo, receiver_name = sT.Receiver.RFullName, amount = sT.Transaction.PAmt, currency = sT.Transaction.PCurr, purpose = purpose.Contains(sT.Transaction.PurposeOfRemittanceName) ? sT.Transaction.PurposeOfRemittanceName : "TRF_OTHERS", // other = sT.Transaction.PayoutMsg, ext_transaction_id = sT.Transaction.JMEControlNo.ToString(), ext_transaction_date = sT.Transaction.TxnDate }; } private WingSendTxnRequestCrossBank MapSendTransactionDataCrossBank(SendTransaction sT) { return new WingSendTxnRequestCrossBank() { amount = sT.Transaction.PAmt, currency = sT.Transaction.PCurr, first_name = sT.Sender.SFirstName, last_name = sT.Sender.SLastName1, gender = sT.Sender.SGender, date_of_birth = sT.Sender.SBirthDate, occupation = sT.Sender.SOccuptionName, id_type = sT.Sender.SIdType, id_number = sT.Sender.SIdNo, nationality = sT.Sender.SCountryName, country_of_birth = sT.Sender.SNativeCountry, purpose = sT.Transaction.PurposeOfRemittanceName, country_code = "JPN", sender_passport = sT.Sender.SIdNo, bank_name = sT.Agent.PBankId, bank_account_number = sT.Receiver.RAccountNo, receiver_currency = sT.Transaction.PCurr, receiver_name = sT.Receiver.RFullName, receiver_phone = sT.Receiver.RMobile, receiver_id_number = sT.Receiver.ReceiverId, receiver_date_of_birth = sT.Receiver.RDob?? DateTime.Now.AddYears(-20).ToString("ddMMyyyy"), receiver_passport = sT.Receiver.RIdNo, receiver_nationality = sT.Receiver.RCountry.Replace("CAMBODIA", "Cambodian"), receiver_address = sT.Receiver.RAdd1, ext_transaction_id = sT.Transaction.JMEControlNo, ext_transaction_date = sT.Transaction.TxnDate }; } private WingGetStatus MapGetStatus(GetStatus gs) { return new WingGetStatus() { transaction_id = gs.ControlNo, use_wing_id = gs.IsFromPartnerPinNo }; } #endregion Map Model private RestRequest BuildRequest(string action, string requestJWT, Method method, string bearerToken = "") where T : class { var request = new RestRequest(action, method); if (!string.IsNullOrEmpty(bearerToken)) request.AddHeader("Authorization", string.Format("Bearer {0}", bearerToken)); request.AddHeader("Content-Type", "application/json"); // add HTTP Headers request.RequestFormat = DataFormat.Json; request.AddParameter("application/json", requestJWT, ParameterType.RequestBody); return request; } public TPResponse GetCashValidate(SendTransaction _txnDTO) { TPResponse _response = new TPResponse(); try { var client = new RestClient(wing_base_url); var wSendModel = MapSendTransactionDataCash(_txnDTO); var requestJson = JsonConvert.SerializeObject(wSendModel, Formatting.None); LogicalThreadContext.Properties["MethodName"] = "Cash_Pickup_Validate"; _log.Info($"{Cash_Pickup_Validate}|REQUEST : {requestJson}"); var result = client.Execute(BuildRequest(Cash_Pickup_Validate, requestJson, Method.POST, access_token)); _log.Info($"{Cash_Pickup_Validate}|RESPONSE : {result.Content}"); if (result.StatusCode == System.Net.HttpStatusCode.OK) { var res = result.Data; _response.Data = result.Data; _response.ResponseCode = "0"; _response.Msg = "Success"; } else { var er = SimpleJson.DeserializeObject(result.Content); _response.ResponseCode = "1"; _response.Msg = string.IsNullOrEmpty(result.Content) ? result.ErrorMessage : $"{ er.error_code}-{er.message}"; } } catch (Exception ex) { _response.ResponseCode = "999"; _response.Msg = ex.Message; } return _response; } public TPResponse GetCashCommit(string access_token) { TPResponse _response = new TPResponse(); try { var client = new RestClient(wing_base_url); CashCommitRequest cashCommitRequest = new CashCommitRequest(); var requestJson = JsonConvert.SerializeObject(cashCommitRequest, Formatting.None); LogicalThreadContext.Properties["MethodName"] = "Cash_Pickup_Commit"; _log.Info($"{Cash_Pickup_Commit}|REQUEST : {access_token}"); var result = client.Execute(BuildRequest(Cash_Pickup_Commit, requestJson, Method.POST, access_token)); _log.Info($"{Cash_Pickup_Commit}|RESPONSE : {result.Content}"); if (result.StatusCode == System.Net.HttpStatusCode.OK) { var res = result.Data; _response.Data = result.Data; _response.ResponseCode = "0"; _response.Msg = "Success"; _response.Id = res.transaction_id;// partnerid; // _response.Extra = res.passcode; _response.Extra = decrypt(res.passcode); } else { var er = SimpleJson.DeserializeObject(result.Content); _response.ResponseCode = "1"; _response.Msg = string.IsNullOrEmpty(result.Content) ? result.ErrorMessage : $"{ er.error_code}-{er.error_description}"; } } catch (Exception ex) { _response.ResponseCode = "999"; _response.Msg = ex.Message; } return _response; } public TPResponse GetWingsAccountValidate(SendTransaction _txnDTO) { TPResponse _response = new TPResponse(); try { var client = new RestClient(wing_base_url); var wSendModel = MapSendTransactionDataAcc(_txnDTO); var requestJson = JsonConvert.SerializeObject(wSendModel, Formatting.None); LogicalThreadContext.Properties["MethodName"] = "Account_Validate"; _log.Info($"{Account_Validate}|REQUEST : {requestJson}"); var result = client.Execute(BuildRequest(Account_Validate, requestJson, Method.POST, access_token)); _log.Info($"{Account_Validate}|RESPONSE : {result.Content}"); if (result.StatusCode == HttpStatusCode.OK) { var res = result.Data; _response.Data = result.Data; _response.ResponseCode = "0"; _response.Msg = "Success"; } else { var er = SimpleJson.DeserializeObject(result.Content); _response.ResponseCode = "1"; _response.Msg = string.IsNullOrEmpty(result.Content) ? result.ErrorMessage : $"{ er.error_code}-{er.message}"; } } catch (Exception ex) { _response.ResponseCode = "999"; _response.Msg = ex.Message; } return _response; } public TPResponse GetWingsAccountCommit(string access_token) { TPResponse _response = new TPResponse(); try { var client = new RestClient(wing_base_url); CashCommitRequest cashCommitRequest = new CashCommitRequest(); var requestJson = JsonConvert.SerializeObject(cashCommitRequest, Formatting.None); LogicalThreadContext.Properties["MethodName"] = "Account_Commit"; _log.Info($"{Account_Commit}|REQUEST : {access_token}"); var result = client.Execute(BuildRequest(Account_Commit, requestJson, Method.POST, access_token)); _log.Info($"{Cash_Pickup_Commit}|RESPONSE : {result.Content}"); if (result.StatusCode == System.Net.HttpStatusCode.OK) { var res = result.Data; _response.Data = result.Data; _response.ResponseCode = "0"; _response.Msg = "Success"; _response.Id = res.transaction_id;// partnerid; } else { var er = SimpleJson.DeserializeObject(result.Content); _response.ResponseCode = "1"; _response.Msg = string.IsNullOrEmpty(result.Content) ? result.ErrorMessage : $"{ er.error_code}-{er.error_description}"; } } catch (Exception ex) { _response.ResponseCode = "999"; _response.Msg = ex.Message; } return _response; } public TPResponse GetWingsCrossBankValidate(SendTransaction _txnDTO) { TPResponse _response = new TPResponse(); try { var client = new RestClient(wing_base_url); var wSendModel = MapSendTransactionDataCrossBank(_txnDTO); var requestJson = JsonConvert.SerializeObject(wSendModel, Formatting.None); LogicalThreadContext.Properties["MethodName"] = "CrossBank_Validate"; _log.Info($"{CrossBank_Validate}|REQUEST : {requestJson}"); var result = client.Execute(BuildRequest(CrossBank_Validate, requestJson, Method.POST, access_token)); _log.Info($"{CrossBank_Validate}|RESPONSE : {result.Content}"); if (result.StatusCode == HttpStatusCode.OK) { var res = result.Data; _response.Data = result.Data; _response.ResponseCode = "0"; _response.Msg = "Success"; } else { var er = SimpleJson.DeserializeObject(result.Content); _response.ResponseCode = "1"; _response.Msg = string.IsNullOrEmpty(result.Content) ? result.ErrorMessage : $"{ er.error_code}-{er.message}"; } } catch (Exception ex) { _response.ResponseCode = "999"; _response.Msg = ex.Message; } return _response; } public TPResponse GetWingsCrossBankCommit(string access_token) { TPResponse _response = new TPResponse(); try { var client = new RestClient(wing_base_url); CashCommitRequest cashCommitRequest = new CashCommitRequest(); var requestJson = JsonConvert.SerializeObject(cashCommitRequest, Formatting.None); LogicalThreadContext.Properties["MethodName"] = "CrossBank_Commit"; _log.Info($"{CrossBank_Commit}|REQUEST : {access_token}"); var result = client.Execute(BuildRequest(CrossBank_Commit, requestJson, Method.POST, access_token)); _log.Info($"{CrossBank_Commit}|RESPONSE : {result.Content}"); if (result.StatusCode == System.Net.HttpStatusCode.OK) { var res = result.Data; _response.Data = result.Data; _response.ResponseCode = "0"; _response.Msg = "Success"; _response.Id = res.transaction_id;// partnerid; } else { var er = SimpleJson.DeserializeObject(result.Content); _response.ResponseCode = "1"; _response.Msg = string.IsNullOrEmpty(result.Content) ? result.ErrorMessage : $"{ er.error_code}-{er.error_description}"; } } catch (Exception ex) { _response.ResponseCode = "999"; _response.Msg = ex.Message; } return _response; } public TPResponse GetCashStatus(GetStatus gs) { TPResponse _response = new TPResponse(); try { access_token = GetAuthToken().AccessCode; var client = new RestClient(wing_base_url); var model = MapGetStatus(gs); var requestJson = JsonConvert.SerializeObject(model, Formatting.None); LogicalThreadContext.Properties["MethodName"] = "Status_Inquiry_Cash"; _log.Info($"{Status_Inquiry_Cash}|REQUEST : {requestJson}"); var result = client.Execute(BuildRequest(Status_Inquiry_Cash, requestJson, Method.POST, access_token)); _log.Info($"{Status_Inquiry_Cash}|RESPONSE : {result.Content}"); if (result.StatusCode == System.Net.HttpStatusCode.OK) { var res = result.Data; _response.Data = result.Data; _response.Extra = "UN-PAID"; _response.ResponseCode = "0"; _response.Msg = "Success"; if (!string.IsNullOrEmpty(res.cashout_status) && res.cashout_status.Equals("Complete")) { _response.Extra = "PAID"; } } else if (result.StatusCode == System.Net.HttpStatusCode.Accepted) { var res = result.Data; _response.Data = res; if (!string.IsNullOrEmpty(res.error_code) && res.error_code.Equals("006035")) { _response.ResponseCode = "2"; _response.Extra = "NOTFOUND"; } _response.Msg = res.message; } else { var er = SimpleJson.DeserializeObject(result.Content); _response.ResponseCode = "1"; _response.Msg = string.IsNullOrEmpty(result.Content) ? result.ErrorMessage : $"{ er.error_code}-{er.message}"; } } catch (Exception ex) { _response.ResponseCode = "999"; _response.Msg = ex.Message; } return _response; } public TPResponse GetAccountStatus(GetStatus gs) { TPResponse _response = new TPResponse(); try { access_token = GetAuthToken().AccessCode; var client = new RestClient(wing_base_url); var model = MapGetStatus(gs); var requestJson = JsonConvert.SerializeObject(model, Formatting.None); LogicalThreadContext.Properties["MethodName"] = "Status_Inquiry_Account"; _log.Info($"{Status_Inquiry_Account}|REQUEST : {requestJson}"); var result = client.Execute(BuildRequest(Status_Inquiry_Account, requestJson, Method.POST, access_token)); _log.Info($"{Status_Inquiry_Account}|RESPONSE : {result.Content}"); if (result.StatusCode == System.Net.HttpStatusCode.OK) { var res = result.Data; _response.Data = res; if (!string.IsNullOrEmpty(res.transaction_status) && res.transaction_status.Equals("200")) { _response.Extra = "PAID"; } _response.ResponseCode = "0"; _response.Msg = "Success"; } else if (result.StatusCode == System.Net.HttpStatusCode.Accepted) { var res = result.Data; _response.Data = res; _response.Extra2 = !string.IsNullOrEmpty(res.error_code) ? res.error_code : ""; if (!string.IsNullOrEmpty(res.error_code) && res.error_code.Equals("006035")) { _response.ResponseCode = "2"; _response.Extra = "NOTFOUND"; } _response.Msg = res.message; } else { var er = SimpleJson.DeserializeObject(result.Content); _response.ResponseCode = "1"; _response.Msg = string.IsNullOrEmpty(result.Content) ? result.ErrorMessage : $"{ er.error_code}-{er.message}"; _response.Extra = "UNPAID"; } } catch (Exception ex) { _response.ResponseCode = "999"; _response.Msg = ex.Message; } return _response; } public TPResponse GetCrossBankStatus(GetStatus gs) { TPResponse _response = new TPResponse(); try { access_token = GetAuthToken().AccessCode; var client = new RestClient(wing_base_url); var model = MapGetStatus(gs); var requestJson = JsonConvert.SerializeObject(model, Formatting.None); LogicalThreadContext.Properties["MethodName"] = "Status_Inquiry_CrossBank"; _log.Info($"{Status_Inquiry_CrossBank}|REQUEST : {requestJson}"); var result = client.Execute(BuildRequest(Status_Inquiry_CrossBank, requestJson, Method.POST, access_token)); _log.Info($"{Status_Inquiry_CrossBank}|RESPONSE : {result.Content}"); if (result.StatusCode == System.Net.HttpStatusCode.OK) { var res = result.Data; _response.Data = result.Data; if (!string.IsNullOrEmpty(res.transaction_status) && res.transaction_status.Equals("Success")) { _response.Extra = "PAID"; } _response.ResponseCode = "0"; _response.Msg = "Success"; } else if (result.StatusCode == System.Net.HttpStatusCode.Accepted) { var res = result.Data; _response.Data = res; _response.Extra2 = !string.IsNullOrEmpty(res.error_code) ? res.error_code : ""; if (!string.IsNullOrEmpty(res.error_code) && res.error_code.Equals("006035")) { _response.ResponseCode = "2"; _response.Extra = "NOTFOUND"; } _response.Msg = res.message; } else { var er = SimpleJson.DeserializeObject(result.Content); _response.ResponseCode = "1"; _response.Msg = string.IsNullOrEmpty(result.Content) ? result.ErrorMessage : $"{ er.error_code}-{er.message}"; } } catch (Exception ex) { _response.ResponseCode = "999"; _response.Msg = ex.Message; } return _response; } #region private string encrypt(string orignalText) { string encodedText = null; try { //JAVA TO C# CONVERTER WARNING: The original Java variable was marked 'final': //ORIGINAL LINE: final java.security.MessageDigest md = java.security.MessageDigest.getInstance("SHA-256"); MessageDigest md = MessageDigest.getInstance("SHA-256"); //JAVA TO C# CONVERTER WARNING: The original Java variable was marked 'final': //ORIGINAL LINE: final byte[] digestOfPassword = md.digest(AES_KEY.getBytes("utf-8")); byte[] bytes = Encoding.UTF8.GetBytes("HG58YZ3CR9"); byte[] digestOfPassword = md.digest(bytes); //JAVA TO C# CONVERTER WARNING: The original Java variable was marked 'final': //ORIGINAL LINE: final javax.crypto.SecretKey key = new javax.crypto.spec.SecretKeySpec(digestOfPassword, "AES"); SecretKey key = new SecretKeySpec(digestOfPassword, "AES"); //JAVA TO C# CONVERTER WARNING: The original Java variable was marked 'final': //ORIGINAL LINE: final javax.crypto.Cipher cipher = javax.crypto.Cipher.getInstance("AES/CBC/PKCS5Padding"); Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding"); //JAVA TO C# CONVERTER WARNING: The original Java variable was marked 'final': //ORIGINAL LINE: final javax.crypto.spec.IvParameterSpec iv = new javax.crypto.spec.IvParameterSpec(new byte[16]); IvParameterSpec iv = new IvParameterSpec(new byte[16]); cipher.init(Cipher.ENCRYPT_MODE, key, iv); //JAVA TO C# CONVERTER WARNING: The original Java variable was marked 'final': //ORIGINAL LINE: final byte[] plainTextBytes = orignalText.getBytes("utf-8"); byte[] plainTextBytes = Encoding.UTF8.GetBytes(orignalText); // byte[] plainTextBytes = orignalText.GetBytes(Encoding.UTF8); //JAVA TO C# CONVERTER WARNING: The original Java variable was marked 'final': //ORIGINAL LINE: final byte[] encodeTextBytes = cipher.doFinal(plainTextBytes); byte[] encodeTextBytes = cipher.doFinal(plainTextBytes); encodedText = (Convert.ToBase64String(encodeTextBytes)); } catch (Exception e) { throw new ApplicationException("", e); } return encodedText; } public static string NewString(byte[] bytes) { return NewString(bytes, 0, bytes.Length); } public static string NewString(byte[] bytes, int index, int count) { return System.Text.Encoding.UTF8.GetString((byte[])(object)bytes, index, count); } public static string NewString(byte[] bytes, string encoding) { return NewString(bytes, 0, bytes.Length, encoding); } public static string NewString(byte[] bytes, int index, int count, string encoding) { return System.Text.Encoding.GetEncoding(encoding).GetString((byte[])(object)bytes, index, count); } public string decrypt(string orignalText) { //JAVA TO C# CONVERTER WARNING: The original Java variable was marked 'final': //ORIGINAL LINE: final java.security.MessageDigest md = java.security.MessageDigest.getInstance("SHA-256"); MessageDigest md = MessageDigest.getInstance("SHA-256"); //JAVA TO C# CONVERTER WARNING: The original Java variable was marked 'final': //ORIGINAL LINE: final byte[] digestOfPassword = md.digest(AES_KEY.getBytes("utf-8")); byte[] bytes = Encoding.UTF8.GetBytes(AES_KEY); byte[] digestOfPassword = md.digest(bytes); //sbyte[] digestOfPassword = md.digest(AES_KEY.GetBytes(Encoding.UTF8)); //JAVA TO C# CONVERTER WARNING: The original Java variable was marked 'final': //ORIGINAL LINE: final javax.crypto.SecretKey key = new javax.crypto.spec.SecretKeySpec(digestOfPassword, "AES"); SecretKey key = new SecretKeySpec(digestOfPassword, "AES"); //JAVA TO C# CONVERTER WARNING: The original Java variable was marked 'final': //ORIGINAL LINE: final javax.crypto.Cipher cipher = javax.crypto.Cipher.getInstance("AES/CBC/PKCS5Padding"); Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding"); cipher.init(Cipher.DECRYPT_MODE, key, new IvParameterSpec(new byte[16])); //JAVA TO C# CONVERTER WARNING: The original Java variable was marked 'final': //ORIGINAL LINE: final byte[] plainTextBytes = org.apache.commons.codec.binary.Base64.decodeBase64(orignalText); byte[] plainTextBytes = Convert.FromBase64String(orignalText); //JAVA TO C# CONVERTER WARNING: The original Java variable was marked 'final': //ORIGINAL LINE: final byte[] encodeTextBytes = cipher.doFinal(plainTextBytes); byte[] encodeTextBytes = cipher.doFinal(plainTextBytes); return NewString(encodeTextBytes); } #endregion } }