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.
 
 

233 lines
10 KiB

using Common.Models.Donga;
using Common.Models.RequestResponse;
using Common.Models.Status;
using Common.Models.TxnModel;
using Common.TPService;
using Common.Utility;
using log4net;
using System;
using System.IO;
using System.Net;
namespace Donga.DongaAPIService
{
public class DongaAPI : ITPApiServices
{
private readonly ILog _log = LogManager.GetLogger(typeof(DongaAPI));
protected readonly string _baseUrl;
protected readonly string _userName;
protected readonly string _password;
public DongaAPI()
{
_baseUrl = GetStatic.ReadWebConfig("donga_base_url", "");
_userName = GetStatic.ReadWebConfig("donga_user_name", "");
_password = GetStatic.ReadWebConfig("donga_password", "");
}
public TPResponse GetTPResponse<T>(T model, string MethodName) where T : class
{
switch (MethodName)
{
case "send":
return SendTransaction(model as SendTransaction);
case "status":
return GetStatusDonga(model as GetStatus);
default:
return new TPResponse() { ResponseCode = "1", Msg = "Method Name Not Found !" };
}
}
private TPResponse SendTransaction(SendTransaction sendTransaction)
{
_log.DebugFormat("SendTransaction Method Is Calling On DongaAPI ,Model :", sendTransaction);
TPResponse _response = new TPResponse();
var _requestData = GetRequestData(sendTransaction);
_log.Debug("Donga Request Data :" + _requestData);
_response = GetAPIKey(sendTransaction);
_log.Debug("Donga API Key Response: " + GetStatic.ConvertToJson(_response));
if (_response.ResponseCode == "0" && _response.Extra.Trim().Length.Equals(32))
{
return SendDongaTransaction(_requestData, _response.Extra);
}
else
{
return new TPResponse() { ResponseCode = "1", Msg = "Error while generating token: "+_response.Extra };
}
}
private TPResponse SendDongaTransaction(string _requestData, string _apiKey)
{
TPResponse _response = new TPResponse();
try
{
HttpWebRequest _httpRequest = (HttpWebRequest)WebRequest.Create(_baseUrl + "api/transaction/detaildata/post/" + _userName + "/" + _password + "/" + _apiKey);
_httpRequest.ContentType = "application/json";
_httpRequest.Method = "POST";
using (var _streamWriter = new StreamWriter(_httpRequest.GetRequestStream()))
{
_streamWriter.Write(_requestData);
_streamWriter.Flush();
_streamWriter.Close();
}
var _httpResponse = (HttpWebResponse)_httpRequest.GetResponse();
using (var _streamReader = new StreamReader(_httpResponse.GetResponseStream()))
{
_response.Extra = _streamReader.ReadToEnd().ToString();
}
_httpResponse.Close();
_response = MapResult(_response.Extra);
_log.DebugFormat("SendDongaTransaction Response At DongaAPI : Response ", _response);
}
catch (Exception ex)
{
_response.ResponseCode = "999";
_response.Msg = ex.Message;
}
return _response;
}
private TPResponse GetStatusDonga(GetStatus getStatus)
{
_log.DebugFormat("GetStatusDonga Method Is Colling On DongaAPI , Model :", getStatus);
TPResponse _response = new TPResponse();
DongaStatusSyncResponse _syncStatusResponse = new DongaStatusSyncResponse();
try
{
HttpWebRequest _httpRequest = (HttpWebRequest)WebRequest.Create(_baseUrl + "api/responsetran/" + _userName + "/" + _password + "/" + getStatus.ControlNo);
_httpRequest.ContentType = "application/json";
_httpRequest.Method = "GET";
var _httpResponse = (HttpWebResponse)_httpRequest.GetResponse();
using (var _streamReader = new StreamReader(_httpResponse.GetResponseStream()))
{
string a = _streamReader.ReadToEnd().Replace("[", "").Replace("]", "").ToString();
_syncStatusResponse = GetStatic.ConvertToObject<DongaStatusSyncResponse>(a);
}
_response.ResponseCode = "0";
_response.Msg = "Success";
_response.Id = _syncStatusResponse.TransactionID;
_response.Extra = _syncStatusResponse.PartnerID;
if (_syncStatusResponse.Status != null)
_response.Extra2 = _syncStatusResponse.Status.ToLower().Trim();
_httpResponse.Close();
_log.DebugFormat("GetStatusDonga Response At DongaAPI , Response :", _response);
}
catch (Exception ex)
{
_response.ResponseCode = "999";
_response.Msg = ex.Message.ToString();
}
return _response;
}
#region other methods
private TPResponse GetAPIKey(SendTransaction sendTransaction)
{
TPResponse _response = new TPResponse();
var _contentData = new
{
SumTransaction = 1,
SumAUD = (sendTransaction.Transaction.PCurr.ToLower().Equals("aud")) ? Convert.ToDecimal(sendTransaction.Transaction.PAmt) : 0,
SumCAD = (sendTransaction.Transaction.PCurr.ToLower().Equals("cad")) ? Convert.ToDecimal(sendTransaction.Transaction.PAmt) : 0,
SumEUR = (sendTransaction.Transaction.PCurr.ToLower().Equals("eur")) ? Convert.ToDecimal(sendTransaction.Transaction.PAmt) : 0,
SumGBP = (sendTransaction.Transaction.PCurr.ToLower().Equals("gbp")) ? Convert.ToDecimal(sendTransaction.Transaction.PAmt) : 0,
SumJPY = (sendTransaction.Transaction.PCurr.ToLower().Equals("jpy")) ? Convert.ToDecimal(sendTransaction.Transaction.PAmt) : 0,
SumUSD = (sendTransaction.Transaction.PCurr.ToLower().Equals("usd")) ? Convert.ToDecimal(sendTransaction.Transaction.PAmt) : 0,
SumVND = (sendTransaction.Transaction.PCurr.ToLower().Equals("vnd")) ? Convert.ToDecimal(sendTransaction.Transaction.PAmt) : 0
};
string _jsonData = GetStatic.ConvertToJson(_contentData);
_log.Debug(_jsonData + "; URL: " + _baseUrl + "api/transaction/masterdata/post/" + _userName + "/" + _password + "/" + sendTransaction.SessionId);
try
{
HttpWebRequest _httpRequest = (HttpWebRequest)WebRequest.Create(_baseUrl + "api/transaction/masterdata/post/" + _userName + "/" + _password + "/" + sendTransaction.SessionId);
_httpRequest.ContentType = "application/json";
_httpRequest.Method = "POST";
using (var _streamWriter = new StreamWriter(_httpRequest.GetRequestStream()))
{
_streamWriter.Write(_jsonData);
_streamWriter.Flush();
_streamWriter.Close();
}
var _httpResponse = (HttpWebResponse)_httpRequest.GetResponse();
using (var _streamReader = new StreamReader(_httpResponse.GetResponseStream()))
{
_response.ResponseCode = "0";
_response.Extra = _streamReader.ReadToEnd().ToString();
}
_httpResponse.Close();
}
catch (Exception e)
{
_response.ResponseCode = "999";
_response.Msg = e.Message.ToString();
}
if (!string.IsNullOrEmpty(_response.Msg) && _response.Msg.Trim().Length.Equals(32))
{
_log.ErrorFormat("Error Occured On SendTransaction At DongaAPI Error :", _response);
_response.SetResponse("1", "Invalid Api Key OR Api Key Generation Error!", null);
}
return _response;
}
private string GetRequestData(SendTransaction _requestData)
{
return "[{\"TransactionID\":\"" + _requestData.Transaction.JMEControlNo + "\",\"Sender\":\"" + _requestData.Sender.SFullName + "\",\"Receiver\":\"" + _requestData.Receiver.RFullName + "\"," +
"\"Address\":\"" + _requestData.Receiver.RAdd1 + "\",\"CityCode\":\"" + _requestData.Receiver.RStateId + "\",\"DistrictCode\":\"" + _requestData.Receiver.RCityCode + "\"," +
"\"Amount\":" + _requestData.Transaction.PAmt + ",\"RCurrency\":\"" + _requestData.Transaction.PCurr + "\",\"SCurrency\":\"" + _requestData.Transaction.PCurr + "\"," +
"\"PaymentMode\":\"" + GetPayoutMode(_requestData.Transaction.PaymentType) + "\",\"Phone\":\"" + _requestData.Receiver.RMobile + "\",\"BankAccount\":\"" + _requestData.Receiver.RAccountNo + "\"," +
"\"BankCode\":\"" + _requestData.Agent.PBankId + "\",\"BranchState\":\"" + _requestData.Agent.PBranchCity + "\",\"Note\":\"" + _requestData.Transaction.PayoutMsg + "\"}]";
}
private TPResponse MapResult(string result)
{
TPResponse _response = new TPResponse();
try
{
_response.ResponseCode = result.Substring(0, 1);
_response.Msg = result.Replace(result.Substring(0, 1), "").Trim();
}
catch (Exception ex)
{
_response.ResponseCode = "999";
_response.Msg = "Error Parsing the msg! Error :" + ex.Message;
}
_response.Data = result;
return _response;
}
private string GetPayoutMode(string paymentType)
{
if (paymentType.ToLower().Equals("cash payment"))
return "CP";
else if (paymentType.ToLower().Equals("home delivery"))
return "HD";
else if (paymentType.ToLower().Equals("bank deposit"))
return "TA";
return "";
}
#endregion other methods
}
}