public static TopUpResponseInternal TopUpInternal(TopUpRequestInternal request) { UMarketSCClient utibaClient = new UMarketSCClient(); TopUpResponseInternal topUpResult = null; try { 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()]); } Log(Logger.LogMessageType.Info, "-> TimeOut: " + timeOutSeconds + ", mno: " + request.MNO.ToLower(), Logger.LoggingLevelType.Low); utibaClient.InnerChannel.OperationTimeout = new TimeSpan(0, 10, timeOutSeconds); using (OperationContextScope scope = new OperationContextScope(utibaClient.InnerChannel)) { HttpRequestMessageProperty messageProperty = new HttpRequestMessageProperty(); messageProperty.Headers.Add(HttpRequestHeader.UserAgent, ApiServiceBase.UserAgent); OperationContext.Current.OutgoingMessageProperties.Add(HttpRequestMessageProperty.Name, messageProperty); topupResponse myTopUp = utibaClient.topup(new Utiba.topup() { topupRequest = new Utiba.topupRequestType() { sessionid = request.SessionID, device_type = request.DeviceType, mno = request.MNO, amount = request.Amount, recipient = request.Recipient, host_trans_ref = request.HostTransRef, mno_defined_id = request.MNODefinedID } }); BalanceResponseInternal balanceResponse = BalanceProvider.BalanceInternal(new BalanceRequestInternal() { DeviceType = request.DeviceType, SessionID = request.SessionID }); // Remuevo el codigo de respuesta del protocolo en caso de que este disponible String modifiedResultMessage = null; String backendResponseCode = null; if (myTopUp.topupReturn.result_message != null) { int namespaceIndex = myTopUp.topupReturn.result_message.IndexOf("IPR:"); namespaceIndex = namespaceIndex > 0 ? namespaceIndex : myTopUp.topupReturn.result_message.IndexOf("MNO:"); if (namespaceIndex > 0) { backendResponseCode = myTopUp.topupReturn.result_message.Substring(namespaceIndex + 4, myTopUp.topupReturn.result_message.IndexOf(":", namespaceIndex + 5) - (namespaceIndex + 4)); } else { modifiedResultMessage = myTopUp.topupReturn.result_message; } } topUpResult = new TopUpResponseInternal() { ResponseCode = myTopUp.topupReturn.result, ResponseMessage = modifiedResultMessage, TransactionID = myTopUp.topupReturn.transid, HostTransRef = request.HostTransRef, Fee = myTopUp.topupReturn.fee, BalanceStock = balanceResponse.StockBalance }; Log(Logger.LogMessageType.Info, "-> HostTransRef: " + topUpResult.HostTransRef + "; Resultado Obtenido (TopUp): Result: " + topUpResult.ResponseCode + "; ResultMessage: " + topUpResult.ResponseMessage + "; TransId: " + topUpResult.TransactionID + "; HostTransRef: " + topUpResult.HostTransRef + "; Fee: " + topUpResult.Fee + ", BalanceStock: " + topUpResult.BalanceStock, Logger.LoggingLevelType.Low); Log(Logger.LogMessageType.Info, "-> HostTransRef: " + topUpResult.HostTransRef + " -------------------- Termina la ejecución del método TopUp", Logger.LoggingLevelType.Low); } if (topUpResult.ResponseCode != 0) { topUpResult.SetResponseNamespace(ApiResponseInternal.ResponseNamespace.BAC); } } catch (Exception e) { if (topUpResult == null) { topUpResult = new TopUpResponseInternal(); } topUpResult.SetThrowedException(e); } return(topUpResult); }
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); }