public TopUpResponse TopUp(TopUpRequest topUpRequest) { Log(Logger.LogMessageType.Info, "-> -------------------- Comienza la ejecución del método Stock.TopUp", Logger.LoggingLevelType.Medium); TopUpRequestInternal internalObject = new TopUpRequestInternal() { Amount = topUpRequest.Request.Amount, DeviceType = topUpRequest.Request.DeviceType, HostTransRef = topUpRequest.Request.HostTransRef, MNO = topUpRequest.Request.MNO, MNODefinedID = topUpRequest.Request.MNODefinedID, Recipient = topUpRequest.Request.Recipient, SessionID = topUpRequest.Request.SessionID }; TopUpResponseInternal internalResponse = TopUpProvider.TopUpInternal(internalObject); TopUpResponse response = new TopUpResponse(); TopUpResponseBody responseBody = new TopUpResponseBody() { ResponseCode = internalResponse.ResponseCode, ResponseMessage = internalResponse.ResponseMessage, TransactionID = internalResponse.TransactionID, HostTransRef = internalResponse.HostTransRef, Fee = internalResponse.Fee, BalanceStock = internalResponse.BalanceStock }; response.Response = responseBody; Log(Logger.LogMessageType.Info, "-> -------------------- Termina la ejecución del método Stock.TopUp", Logger.LoggingLevelType.Medium); return(response); }
public override IMovilwayApiResponse PerformKinacuOperation(IMovilwayApiRequest requestObject, SaleInterface kinacuWS, String sessionID) { //if (sessionID.Equals("0")) // return new TopUpResponseBody() // { // ResponseCode = 90, // ResponseMessage = "error session", // TransactionID = 0, // ExternalTransactionReference = "", // PointBalance = 0m, // StockBalance = 0m, // WalletBalance = 0m // }; TopUpRequestBody request = requestObject as TopUpRequestBody; int timeOutSeconds = int.Parse(ConfigurationManager.AppSettings["DefaultTimeout"]); if (ConfigurationManager.AppSettings["TopUp_Timeout_" + request.MNO.ToLower()] != null) { timeOutSeconds = int.Parse(ConfigurationManager.AppSettings["TopUp_Timeout_" + request.MNO.ToLower()]); } kinacuWS.Timeout = timeOutSeconds * 1000; int transactionId; string saleData = ""; string message = ""; logger.InfoLow("[KIN] " + base.LOG_PREFIX + "[TopUpProvider] [SEND-DATA] newSaleWithExternalIdParameters {UserId=" + sessionID + ",IdProduct=" + MapMNOtoProductId(request.MNO) + ",Customer=" + request.Recipient + ",Amount=" + (request.Amount * 100) + ",CommitSale=" + "1" + ",ExternalId=" + request.ExternalTransactionReference + ",PdvRepresented=" + (request.TerminalID ?? "") + "}"); TopUpResponseBody response = null; bool kinacuTopUpResponse = false; int _Amount = (int)(request.Amount * 100); if (_cacheSession.IsActiveCache()) { //logger.ErrorHigh(String.Concat("[API] ", LOG_PREFIX, "[KinacuProvider] [EXCEPTION] [", ex.GetType().Name.ToUpper(), "] ACCEDIENDO AL CACHE VALIDANDO SECURITY {message=", ex.Message, ",stackTrace=", ex.StackTrace, "}")); logger.InfoLow(String.Concat("[KIN] ", base.LOG_PREFIX, "CACHE ACTIVO TOPUP")); /// kinacuTopUpResponse = kinacuWS.NewSaleWithExternalId(int.Parse(sessionID), int.Parse(MapMNOtoProductId(request.MNO)), request.Recipient, //(int)(request.Amount * 100) _Amount , 1, request.ExternalTransactionReference, (request.TerminalID ?? ""), out transactionId, out saleData, out message); saleData = Movilway.API.Utils.ApiTicket.FormatSaledataTopUp(logger, this.GetType().Name, base.LOG_PREFIX, request, kinacuTopUpResponse, transactionId, saleData); response = new TopUpResponseBody() { ResponseCode = Utils.BuildResponseCode(kinacuTopUpResponse, message), ResponseMessage = kinacuTopUpResponse ? saleData : message, TransactionID = transactionId, ExternalTransactionReference = request.ExternalTransactionReference, Fee = 0 }; //CODIGO REPETIDO logger.InfoLow("[KIN] " + base.LOG_PREFIX + "[TopUpProvider] [RECV-DATA] newSaleWithExternalIdResult {response=" + kinacuTopUpResponse + ",IdTransaction=" + transactionId + ",SaleData=" + saleData + ",message=" + message + "}"); bool errorSession = GetResponseCode(message) == 21; if (errorSession) { logger.InfoLow(String.Concat("[KIN] ", base.LOG_PREFIX, " TOP UP ID DE SESSION INVALIDO RECALCULAR SESSION")); //solicitar de nuevo session var sessionRequest = new GetSessionRequestBody() { Username = request.AuthenticationData.Username, Password = request.AuthenticationData.Password, DeviceType = request.DeviceType }; var getSessionResponse = new ServiceExecutionDelegator <GetSessionResponseBody, GetSessionRequestBody>().ResolveRequest( sessionRequest , ApiTargetPlatform.Kinacu, ApiServiceName.GetSession); sessionID = getSessionResponse.SessionID; logger.InfoLow(String.Concat("[KIN] ", base.LOG_PREFIX, " NUEVO ID ", IsValidId(sessionID))); //String llave = String.Concat(cons.CACHE_SESSION_PREFIX, request.AuthenticationData.Username); String llave = String.Concat(request.AuthenticationData.Username, " ", request.AuthenticationData.Password); _cacheSession.AddOrUpdate <String>(llave, sessionID); kinacuTopUpResponse = kinacuWS.NewSaleWithExternalId(int.Parse(sessionID), int.Parse(MapMNOtoProductId(request.MNO)), request.Recipient, //(int)(request.Amount * 100) _Amount , 1, request.ExternalTransactionReference, (request.TerminalID ?? ""), out transactionId, out saleData, out message); saleData = Movilway.API.Utils.ApiTicket.FormatSaledataTopUp(logger, this.GetType().Name, base.LOG_PREFIX, request, kinacuTopUpResponse, transactionId, saleData); response = new TopUpResponseBody() { ResponseCode = Utils.BuildResponseCode(kinacuTopUpResponse, message), ResponseMessage = kinacuTopUpResponse ? saleData : message, TransactionID = transactionId, ExternalTransactionReference = request.ExternalTransactionReference, Fee = 0 }; } } else { kinacuTopUpResponse = kinacuWS.NewSaleWithExternalId(int.Parse(sessionID), int.Parse(MapMNOtoProductId(request.MNO)), request.Recipient, //(int)(request.Amount * 100) _Amount , 1, request.ExternalTransactionReference, (request.TerminalID ?? ""), out transactionId, out saleData, out message); saleData = Movilway.API.Utils.ApiTicket.FormatSaledataTopUp(logger, this.GetType().Name, base.LOG_PREFIX, request, kinacuTopUpResponse, transactionId, saleData); response = new TopUpResponseBody() { ResponseCode = Utils.BuildResponseCode(kinacuTopUpResponse, message), ResponseMessage = kinacuTopUpResponse ? saleData : message, TransactionID = transactionId, ExternalTransactionReference = request.ExternalTransactionReference, Fee = 0 }; //CODIGO REPETIDO logger.InfoLow("[KIN] " + base.LOG_PREFIX + "[TopUpProvider] [RECV-DATA] newSaleWithExternalIdResult {response=" + kinacuTopUpResponse + ",IdTransaction=" + transactionId + ",SaleData=" + saleData + ",message=" + message + "}"); } if (request.DeviceType == cons.ACCESS_H2H) { string llave = String.Concat(request.AuthenticationData.Username); decimal[] result = { 0.0m, 0.0m, 0.0m }; //try //{ // Func<decimal[]> callback = delegate()//null; // { // logger.InfoLow("[KIN] " + base.LOG_PREFIX + "[TopUpProvider] CALLBACK SALDO"); // List<decimal> lista = new List<decimal>(); // AuthenticationData cascadeAuth = new AuthenticationData() // { // SessionID = sessionID // }; // GetBalanceResponseBody balanceResponse = new ServiceExecutionDelegator<GetBalanceResponseBody, GetBalanceRequestBody>().ResolveRequest(new GetBalanceRequestBody() // { // AuthenticationData = cascadeAuth, // DeviceType = request.DeviceType // }, ApiTargetPlatform.Kinacu, ApiServiceName.GetBalance); // lista.Add(balanceResponse.StockBalance.Value); // lista.Add(response.WalletBalance = balanceResponse.WalletBalance.Value); // lista.Add(response.PointBalance = balanceResponse.PointsBalance.Value); // return lista.ToArray<decimal>(); // }; // // ()=>{ // // new int[]{0,0,0}; // //}; // result = _cacheSaldo.GetValue<decimal[]>(llave, callback); //} //catch (Exception ex) //{ // logger.InfoLow("[KIN] " + base.LOG_PREFIX + "[TopUpProvider] ERROR AL CONSULTAR CHACHE SALDO 1"); // // throw; //} try { //CUANDO SE RECARGA EL SALDO Func <decimal[]> callback = delegate() { logger.InfoLow(String.Concat("[KIN] ", base.LOG_PREFIX, "[TopUpProvider] SALDO NOT FOUND CACHE ")); return(new HandlerCacheSaldo().HandlerCache(new AuthenticationData() { SessionID = sessionID }, request)); }; bool inCache = false; //CUANDO SE ENCUENTRA EL SALDO EN CACHE //TODO plantear un accion por referencia //TODO se puede lanzar la actualizacion en cache asincrona Action <Object, Object> accion = delegate(Object key2, Object value) { inCache = true; logger.InfoLow(String.Concat("[KIN] ", base.LOG_PREFIX, "[TopUpProvider] SALDO FOUND CACHE [", key2, "]")); }; result = _cacheSaldo.GetValue <decimal[]>(llave, callback, accion); //si la respuesta es valid //if (inCache && response.ResponseCode == 0) //{ // result[0] -= _Amount; // logger.InfoLow(String.Concat("[KIN] ", base.LOG_PREFIX, "[TopUpProvider] ACTUALIZANDO STOCKBALANCE EN CACHE [", result[0], "]")); // _cacheSaldo.AddOrUpdate(llave, result); //} } catch (Exception ex) { logger.InfoLow("[KIN] " + base.LOG_PREFIX + "[TopUpProvider] ERROR AL CONSULTAR CHACHE SALDO "); throw; } //AuthenticationData cascadeAuth = new AuthenticationData() //{ // SessionID = sessionID //}; //GetBalanceResponseBody balanceResponse = new ServiceExecutionDelegator<GetBalanceResponseBody, GetBalanceRequestBody>().ResolveRequest(new GetBalanceRequestBody() //{ // AuthenticationData = cascadeAuth, // DeviceType = request.DeviceType //}, ApiTargetPlatform.Kinacu, ApiServiceName.GetBalance); //if (response != null) //{ // response.StockBalance = balanceResponse.StockBalance.Value; // response.WalletBalance = balanceResponse.WalletBalance.Value; // response.PointBalance = balanceResponse.PointsBalance.Value; //} if (result.Length == 3) { response.StockBalance = result[0]; response.WalletBalance = result[1]; response.PointBalance = result[2]; } } else { AuthenticationData cascadeAuth = new AuthenticationData() { SessionID = sessionID }; GetBalanceResponseBody balanceResponse = new ServiceExecutionDelegator <GetBalanceResponseBody, GetBalanceRequestBody>().ResolveRequest(new GetBalanceRequestBody() { AuthenticationData = cascadeAuth, DeviceType = request.DeviceType }, ApiTargetPlatform.Kinacu, ApiServiceName.GetBalance); if (response != null) { response.StockBalance = balanceResponse.StockBalance.Value; response.WalletBalance = balanceResponse.WalletBalance.Value; response.PointBalance = balanceResponse.PointsBalance.Value; } } if (response.ResponseCode.Equals(0) && (ConfigurationManager.AppSettings["IncludeTopupMessageExtended"] ?? "").ToLower().Equals("true")) { // Acá concatenar el mensaje del macroproducto en caso de ser necesario response.ResponseMessage = String.Concat(response.ResponseMessage, new MacroProductDataManager().GetMacroProductMessage(int.Parse(ConfigurationManager.AppSettings["CountryID"]), int.Parse(MapMNOtoProductId(request.MNO)))); } return(response); }
public override IMovilwayApiResponse PerformUtibaOperation(IMovilwayApiRequest requestObject, UMarketSCClient utibaClientProxy, String sessionID) { TopUpRequestBody request = requestObject as TopUpRequestBody; int timeOutSeconds = int.Parse(ConfigurationManager.AppSettings["DefaultTimeout"]); if (ConfigurationManager.AppSettings["TopUp_Timeout_" + request.MNO.ToLower()] != null) { timeOutSeconds = int.Parse(ConfigurationManager.AppSettings["TopUp_Timeout_" + request.MNO.ToLower()]); } utibaClientProxy.InnerChannel.OperationTimeout = new TimeSpan(0, 0, timeOutSeconds); TopUpResponseBody response = null; if (request.WalletType == WalletType.NotSpecified || request.WalletType == WalletType.Stock) { logger.InfoLow("[UTI] " + base.LOG_PREFIX + "[TopUpProvider] [SEND-DATA] topupRequest {sessionid=" + sessionID + ",device_type=" + request.DeviceType + ",mno=" + request.MNO + ",amount=" + request.Amount + ",recipient=" + request.Recipient + ",mno_defined_id=" + request.TerminalID + ",host_trans_ref=" + request.ExternalTransactionReference + "}"); topupResponse utibaTopUpResponse = utibaClientProxy.topup(new topup() { topupRequest = new topupRequestType() { sessionid = sessionID, device_type = request.DeviceType, mno = request.MNO, amount = request.Amount, recipient = request.Recipient, host_trans_ref = request.ExternalTransactionReference, mno_defined_id = request.TerminalID } }); logger.InfoLow("[UTI] " + base.LOG_PREFIX + "[TopUpProvider] [RECV-DATA] topupResponse {transid=" + utibaTopUpResponse.topupReturn.transid + ",result=" + utibaTopUpResponse.topupReturn.result + ",result_namespace=" + utibaTopUpResponse.topupReturn.result_namespace + ",result_message=" + utibaTopUpResponse.topupReturn.result_message + "}"); response = new TopUpResponseBody() { ResponseCode = Utils.BuildResponseCode(utibaTopUpResponse.topupReturn.result, utibaTopUpResponse.topupReturn.result_namespace), ResponseMessage = utibaTopUpResponse.topupReturn.result_message, TransactionID = utibaTopUpResponse.topupReturn.transid, ExternalTransactionReference = request.ExternalTransactionReference, //utibaTopUpResponse.topupReturn.trans_ext_reference, Fee = utibaTopUpResponse.topupReturn.fee }; } else if (request.WalletType == WalletType.eWallet) { logger.InfoLow("[UTI] " + base.LOG_PREFIX + "[TopUpProvider] [SEND-DATA] buyRequest {sessionid=" + sessionID + ",device_type=" + request.DeviceType + ",mno=" + request.MNO + ",amount=" + request.Amount + ",recipient=" + request.Recipient + "}"); buyResponse buyResponse = utibaClientProxy.buy(new buy() { buyRequest = new buyRequestType() { sessionid = sessionID, device_type = request.DeviceType, target = request.MNO, amount = request.Amount, recipient = request.Recipient } }); logger.InfoLow("[UTI] " + base.LOG_PREFIX + "[TopUpProvider] [RECV-DATA] buyResponse {transid=" + buyResponse.buyReturn.transid + ",result=" + buyResponse.buyReturn.result + ",result_namespace=" + buyResponse.buyReturn.result_namespace + ",result_message=" + buyResponse.buyReturn.result_message + "}"); response = new TopUpResponseBody() { ResponseCode = Utils.BuildResponseCode(buyResponse.buyReturn.result, buyResponse.buyReturn.result_namespace), ResponseMessage = buyResponse.buyReturn.result_message, TransactionID = buyResponse.buyReturn.transid, ExternalTransactionReference = request.ExternalTransactionReference, Fee = buyResponse.buyReturn.fee }; } AuthenticationData cascadeAuth = new AuthenticationData() { SessionID = sessionID }; GetBalanceResponseBody balanceResponse = new ServiceExecutionDelegator <GetBalanceResponseBody, GetBalanceRequestBody>().ResolveRequest(new GetBalanceRequestBody() { AuthenticationData = cascadeAuth, DeviceType = request.DeviceType }, ApiTargetPlatform.Utiba, ApiServiceName.GetBalance); if (response != null) { response.StockBalance = balanceResponse.StockBalance.Value; response.WalletBalance = balanceResponse.WalletBalance.Value; response.PointBalance = balanceResponse.PointsBalance.Value; } return(response); }