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