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.
 
 

1102 lines
47 KiB

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<string> purpose = new List<string>() { "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>(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<WingAccountVerifyResponse>(BuildRequest<WingAccountVerifyRequest>(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<ApiException>(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<CrossVerifyResponse>(BuildRequest<CrossVerifyRequest>(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<ApiException>(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, ResponseModelForSucess, ResponseModelForFailed>(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<string>(BuildRequest<string>(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<ResponseModelForSucess>(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<HttpResponseMessage> task = httpClient.PostAsync(commit_url, new{}).Result;
result = resp.Content.ReadAsStringAsync().Result;
_log.Info($"{api_url}|RESPONSE : {result}");
_tPResponse.Data = JsonConvert.DeserializeObject<ResponseModelForSucess>(result);
if (getObjectOnly != null)
_tPResponse = GetOnlyRequiredData(_tPResponse, getObjectOnly);
return _tPResponse;
}
else
{
_tPResponse.ResponseCode = "1";
_tPResponse.Data = JsonConvert.DeserializeObject<ResponseModelForFailed>(result);
if (resp.StatusCode.ToString().ToLower() != "notfound")
{
_tPResponse.Msg = "Status Code: " + resp.StatusCode.ToString().Replace("<br/>", "").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<ResponseModelForSucess>(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<TResult> PostFormUrlEncoded<TResult>(string url, IEnumerable<KeyValuePair<string, string>> 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<string, string>
{
{ "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<T>(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<WingSendTxnResponseCash>(BuildRequest<WingSendTxnRequestCash>(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<ApiException>(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<WingSendTxnResponseCash>(BuildRequest<CashCommitRequest>(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<ApiException>(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<WingSendTxnResponseAcc>(BuildRequest<WingSendTxnRequestAcc>(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<ApiException>(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<WingSendTxnResponseAcc>(BuildRequest<CashCommitRequest>(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<ApiException>(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<WingSendTxnResponseCrossBank>(BuildRequest<WingSendTxnRequestCrossBank>(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<ApiException>(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<WingSendTxnResponseAcc>(BuildRequest<CashCommitRequest>(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<ApiException>(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<WingGetStatusResponseCash>(BuildRequest<WingGetStatus>(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<ApiException>(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<WingGetStatusResponseAccount>(BuildRequest<WingGetStatus>(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<ApiException>(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<WingGetStatusResponseCrossBank>(BuildRequest<WingGetStatus>(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<ApiException>(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
}
}