Commit 04fe20e8 authored by Brayan Sarmiento's avatar Brayan Sarmiento
Browse files

Agregar controladores

parent 27b95f35
using System;
using app_datafono_difare.Services;
using Microsoft.Extensions.Configuration;
using Newtonsoft.Json;
using Serilog;
using System;
using System.IO;
using System.Text;
using System.Threading.Tasks;
using Serilog;
using Microsoft.Extensions.Configuration;
using app_datafono_difare.Services;
namespace app_datafono_difare
{
......@@ -11,6 +13,14 @@ namespace app_datafono_difare
{
static async Task Main(string[] args)
{
//Validación de argumentos
if (args.Length == 0)
{
Log.Error("ERROR: Sin argumentos");
return;
}
var appConfig = new ConfigurationBuilder()
.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile("appsettings.json", optional: false)
......@@ -18,28 +28,52 @@ namespace app_datafono_difare
var serilogConfig = new ConfigurationBuilder()
.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile("appsettings.serilog.json", optional: false)
.AddJsonFile("appsettings.serilog.json", optional: true)
.Build();
Log.Logger = new LoggerConfiguration()
.ReadFrom.Configuration(serilogConfig)
.CreateLogger();
//Redirige la salida a Serilog para logs
Console.SetOut(new SerilogTextWriter(Log.Logger));
Console.SetError(new SerilogTextWriter(Log.Logger));
try
{
var rgService = RgService.Instance;
if (args[0].ToLower() == "autorizar")
{
// Leer monto enviado desde el wrapper
if (args.Length < 2)
{
Log.Error("ERROR: No se recibio el monto");
Console.WriteLine("{\"Success\":false,\"Message\":\"Monto no recibido\"}");
return;
}
decimal amount = decimal.Parse(args[1]);
var rgService = RgService.Instance;
string rutaBines = appConfig["ArchivoBines"];
string url = appConfig["UrlServicio"];
string estacion = appConfig["Estacion"];
string rutaBines = appConfig["ArchivoBines"];
string url = appConfig["UrlServicio"];
string estacion = appConfig["Estacion"];
var ventaService = new TransactionService(rgService, rutaBines);
var ventaService = new TransactionService(rgService, rutaBines);
var resp = await ventaService.ProcesarVenta(url, estacion, amount, 0);
// RESTAURAR OUTPUT A CONSOLA
Console.SetOut(new StreamWriter(Console.OpenStandardOutput(), Encoding.UTF8) { AutoFlush = true });
Console.SetError(new StreamWriter(Console.OpenStandardError(), Encoding.UTF8) { AutoFlush = true });
await ventaService.ProcesarVenta(url, estacion, 5.00m, 0);
// mandamos JSON al wrapper
var json = JsonConvert.SerializeObject(resp);
Console.WriteLine(json);
return;
}
Log.Error("Comando no reconocido");
}
catch (Exception ex)
{
......@@ -51,4 +85,5 @@ namespace app_datafono_difare
}
}
}
}
\ No newline at end of file
using app_datafono_difare.Entities;
using ClsRgFunciones;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace app_datafono_difare.Services
{
public class PinpadInitializer
{
private bool _initialized = false;
private readonly RgFunciones _rg;
public PinpadInitializer()
{
_rg = RgService.Instance.Rg;
}
public void Inicializar(string url, string estacion)
{
if (_initialized)
return;
_rg.EstablecerServicio(url);
_rg.EstablecerEstacion(estacion);
_rg.ConfigurarTerminal(estacion);
_rg.ConfigurarPinpad();
_initialized = true;
}
}
}
using app_datafono_difare.Entities;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace app_datafono_difare.Services
{
public class PinpadRestService
{
private readonly PinpadInitializer _init;
private readonly TransactionService _txService;
public PinpadRestService(PinpadInitializer init, TransactionService txService)
{
_init = init;
_txService = txService;
}
public async Task<TransaccionResponse> AutorizarAsync(decimal amount, int cuotas)
{
// No toca inicializar aquí, ya debe estar inicializado antes
return await _txService.EnviarVenta(amount, cuotas);
}
}
}
......@@ -27,7 +27,7 @@ namespace app_datafono_difare.Services
_rutaBines = rutaBines;
}
public async Task ProcesarVenta(string url, string estacion, decimal monto, int cuotas)
public async Task<TransaccionResponse> ProcesarVenta(string url, string estacion, decimal monto, int cuotas)
{
Log.Information("Configurando servicio...");
......@@ -37,10 +37,10 @@ namespace app_datafono_difare.Services
_rg.Rg.ConfigurarPinpad();
Log.Information("Datos configurados. Ejecutando venta...");
await EnviarVenta(monto, cuotas);
return await EnviarVenta(monto, cuotas);
}
public async Task EnviarVenta(decimal monto, int cuotas)
public async Task<TransaccionResponse> EnviarVenta(decimal monto, int cuotas)
{
string codigo = string.Empty;
......@@ -108,11 +108,17 @@ namespace app_datafono_difare.Services
resultado.IndexOf("CONNECTION", StringComparison.OrdinalIgnoreCase) >= 0)
{
Log.Error("ERROR DE CONEXIÓN: La pinpad o el servicio remoto no respondió correctamente. Respuesta: " + respuesta);
return;
return new TransaccionResponse
{
ResponseCode = "99",
ResponseCodeDescriptor = "ERROR DE CONEXIÓN",
}; ;
}
var response = ProcesarRespuesta(resultado, monto);
Log.Information($"Transacción procesada: {response.ResponseMessage}");
Log.Information($"Transacción procesada: {response.ResponseCodeDescriptor}");
return response;
}
catch (Exception ex)
......@@ -193,26 +199,25 @@ namespace app_datafono_difare.Services
ref iRespuesta,
ref iMid2);
bool success = iCodRespuesta == "00";
var response = new TransaccionResponse
{
AuthorizationCode = iAutorizacion?.Trim(),
TransactionId = iReferencia?.Trim(),
CardNumber = iTarjeta?.Trim(),
CardType = iMarca?.Trim(),
{
ReferenceNumber = iAutorizacion?.Trim(),
SequenceNumber = iReferencia?.Trim(),
MaskedAccountNumber = iTarjeta?.Trim(),
CardBrand = iMarca?.Trim(),
ResponseCode = iCodRespuesta?.Trim(),
ResponseMessage = iMensaje?.Trim(),
ResponseCodeDescriptor = iMensaje?.Trim(),
Amount = amount,
Timestamp = DateHelper.ParseDate(iFecha, iHora),
CommerceCode = iComercio?.Trim(),
TerminalId = iTerminal?.Trim(),
CodRed = iCodigoRed?.Trim(),
RedCode = iCodigoRed?.Trim(),
Lote = iLote?.Trim(),
Promocion = iPromocion.Trim(),
codigoAdquiriente = iCodAdq.Trim(),
idAdquiriente = iAdq.Trim(),
Metodo = ObtenerTipoTarjetaHelper.ObtenerTipoTarjetaPorBin(iTarjeta?.Trim(), _rutaBines)
Promotion = iPromocion?.Trim(),
CodAdquiriente = iCodAdq?.Trim(),
idAdquiriente = iAdq?.Trim(),
LineItemType = ObtenerTipoTarjetaHelper.ObtenerTipoTarjetaPorBin(iTarjeta?.Trim(), _rutaBines)
};
var json = JsonConvert.SerializeObject(response);
......
......@@ -16,6 +16,7 @@
<PackageReference Include="IKVM" Version="8.1.5717.0" />
<PackageReference Include="IKVM.OpenJDK.Core.8.1.5717" Version="1.0.0" />
<PackageReference Include="IKVM.Runtime" Version="7.2.4630.5" />
<PackageReference Include="Microsoft.AspNetCore.Mvc.Core" Version="2.3.0" />
<PackageReference Include="Microsoft.Extensions.Configuration" Version="10.0.0" />
<PackageReference Include="Microsoft.Extensions.Configuration.Json" Version="10.0.0" />
<PackageReference Include="Newtonsoft.Json" Version="13.0.4" />
......
{"Success":false,"AuthorizationCode":"213522","TransactionId":"000576","CardNumber":"376650XXXXX7256","CardType":"AMEX","ResponseCode":"00","ResponseMessage":"00 AUTORIZACION OK.","Amount":5.00,"Timestamp":"2025-11-28T11:22:39","CommerceCode":"000000817740","TerminalId":"20120430","CodRed":"01","Metodo":"TC","Lote":"000054","Promocion":"","codigoAdquiriente":"997","idAdquiriente":"CREDIMATIC01"}
......@@ -14,7 +14,7 @@ using System.Reflection;
[assembly: System.Reflection.AssemblyCompanyAttribute("app_datafono_difare")]
[assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")]
[assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")]
[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0")]
[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+27b95f355723acb023b2f7a6a7fef6bced90983b")]
[assembly: System.Reflection.AssemblyProductAttribute("app_datafono_difare")]
[assembly: System.Reflection.AssemblyTitleAttribute("app_datafono_difare")]
[assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")]
......
57d9bc1f37554d32d86c70bc92c7fd239ada0816afe0809f379443003ac56e83
376b77fa9046389f24d1fba8ae1e4561865f13630873af332e172c4a4e964d3b
0fc0c1a6715adeafa4c11379ad9fd1e0fe3fdf4b325e5008e41047fd5b1944aa
f7d2260f1b7335d73b75683115e57dd3e508bc1e1b336e520f24186b3a504d6f
......@@ -63,6 +63,10 @@
"target": "Package",
"version": "[7.2.4630.5, )"
},
"Microsoft.AspNetCore.Mvc.Core": {
"target": "Package",
"version": "[2.3.0, )"
},
"Microsoft.Extensions.Configuration": {
"target": "Package",
"version": "[10.0.0, )"
......
......@@ -6,5 +6,7 @@
<Import Project="$(NuGetPackageRoot)serilog\4.3.0\build\Serilog.targets" Condition="Exists('$(NuGetPackageRoot)serilog\4.3.0\build\Serilog.targets')" />
<Import Project="$(NuGetPackageRoot)microsoft.extensions.configuration.binder\9.0.0\buildTransitive\netstandard2.0\Microsoft.Extensions.Configuration.Binder.targets" Condition="Exists('$(NuGetPackageRoot)microsoft.extensions.configuration.binder\9.0.0\buildTransitive\netstandard2.0\Microsoft.Extensions.Configuration.Binder.targets')" />
<Import Project="$(NuGetPackageRoot)microsoft.netframework.referenceassemblies.net48\1.0.3\build\Microsoft.NETFramework.ReferenceAssemblies.net48.targets" Condition="Exists('$(NuGetPackageRoot)microsoft.netframework.referenceassemblies.net48\1.0.3\build\Microsoft.NETFramework.ReferenceAssemblies.net48.targets')" />
<Import Project="$(NuGetPackageRoot)microsoft.extensions.options\8.0.2\buildTransitive\net462\Microsoft.Extensions.Options.targets" Condition="Exists('$(NuGetPackageRoot)microsoft.extensions.options\8.0.2\buildTransitive\net462\Microsoft.Extensions.Options.targets')" />
<Import Project="$(NuGetPackageRoot)microsoft.extensions.logging.abstractions\8.0.2\buildTransitive\net462\Microsoft.Extensions.Logging.Abstractions.targets" Condition="Exists('$(NuGetPackageRoot)microsoft.extensions.logging.abstractions\8.0.2\buildTransitive\net462\Microsoft.Extensions.Logging.Abstractions.targets')" />
</ImportGroup>
</Project>
\ No newline at end of file
This diff is collapsed.
{
"version": 2,
"dgSpecHash": "7QfqyEF9Lds=",
"dgSpecHash": "pq1agwDeHOg=",
"success": true,
"projectFilePath": "D:\\Discod\\SelfCheckout\\Proyecto DIFARE\\Integration_pinpad_difare\\Integration_pinpad_difare\\app_datafono_difare\\app_datafono_difare.csproj",
"expectedPackageFiles": [
"C:\\Users\\bsarmiento\\.nuget\\packages\\ikvm\\8.1.5717\\ikvm.8.1.5717.nupkg.sha512",
"C:\\Users\\bsarmiento\\.nuget\\packages\\ikvm.openjdk.core.8.1.5717\\1.0.0\\ikvm.openjdk.core.8.1.5717.1.0.0.nupkg.sha512",
"C:\\Users\\bsarmiento\\.nuget\\packages\\ikvm.runtime\\7.2.4630.5\\ikvm.runtime.7.2.4630.5.nupkg.sha512",
"C:\\Users\\bsarmiento\\.nuget\\packages\\microsoft.aspnetcore.authentication.abstractions\\2.3.0\\microsoft.aspnetcore.authentication.abstractions.2.3.0.nupkg.sha512",
"C:\\Users\\bsarmiento\\.nuget\\packages\\microsoft.aspnetcore.authentication.core\\2.3.0\\microsoft.aspnetcore.authentication.core.2.3.0.nupkg.sha512",
"C:\\Users\\bsarmiento\\.nuget\\packages\\microsoft.aspnetcore.authorization\\2.3.0\\microsoft.aspnetcore.authorization.2.3.0.nupkg.sha512",
"C:\\Users\\bsarmiento\\.nuget\\packages\\microsoft.aspnetcore.authorization.policy\\2.3.0\\microsoft.aspnetcore.authorization.policy.2.3.0.nupkg.sha512",
"C:\\Users\\bsarmiento\\.nuget\\packages\\microsoft.aspnetcore.hosting.abstractions\\2.3.0\\microsoft.aspnetcore.hosting.abstractions.2.3.0.nupkg.sha512",
"C:\\Users\\bsarmiento\\.nuget\\packages\\microsoft.aspnetcore.hosting.server.abstractions\\2.3.0\\microsoft.aspnetcore.hosting.server.abstractions.2.3.0.nupkg.sha512",
"C:\\Users\\bsarmiento\\.nuget\\packages\\microsoft.aspnetcore.http\\2.3.0\\microsoft.aspnetcore.http.2.3.0.nupkg.sha512",
"C:\\Users\\bsarmiento\\.nuget\\packages\\microsoft.aspnetcore.http.abstractions\\2.3.0\\microsoft.aspnetcore.http.abstractions.2.3.0.nupkg.sha512",
"C:\\Users\\bsarmiento\\.nuget\\packages\\microsoft.aspnetcore.http.extensions\\2.3.0\\microsoft.aspnetcore.http.extensions.2.3.0.nupkg.sha512",
"C:\\Users\\bsarmiento\\.nuget\\packages\\microsoft.aspnetcore.http.features\\2.3.0\\microsoft.aspnetcore.http.features.2.3.0.nupkg.sha512",
"C:\\Users\\bsarmiento\\.nuget\\packages\\microsoft.aspnetcore.mvc.abstractions\\2.3.0\\microsoft.aspnetcore.mvc.abstractions.2.3.0.nupkg.sha512",
"C:\\Users\\bsarmiento\\.nuget\\packages\\microsoft.aspnetcore.mvc.core\\2.3.0\\microsoft.aspnetcore.mvc.core.2.3.0.nupkg.sha512",
"C:\\Users\\bsarmiento\\.nuget\\packages\\microsoft.aspnetcore.responsecaching.abstractions\\2.3.0\\microsoft.aspnetcore.responsecaching.abstractions.2.3.0.nupkg.sha512",
"C:\\Users\\bsarmiento\\.nuget\\packages\\microsoft.aspnetcore.routing\\2.3.0\\microsoft.aspnetcore.routing.2.3.0.nupkg.sha512",
"C:\\Users\\bsarmiento\\.nuget\\packages\\microsoft.aspnetcore.routing.abstractions\\2.3.0\\microsoft.aspnetcore.routing.abstractions.2.3.0.nupkg.sha512",
"C:\\Users\\bsarmiento\\.nuget\\packages\\microsoft.aspnetcore.webutilities\\2.3.0\\microsoft.aspnetcore.webutilities.2.3.0.nupkg.sha512",
"C:\\Users\\bsarmiento\\.nuget\\packages\\microsoft.bcl.asyncinterfaces\\10.0.0\\microsoft.bcl.asyncinterfaces.10.0.0.nupkg.sha512",
"C:\\Users\\bsarmiento\\.nuget\\packages\\microsoft.extensions.configuration\\10.0.0\\microsoft.extensions.configuration.10.0.0.nupkg.sha512",
"C:\\Users\\bsarmiento\\.nuget\\packages\\microsoft.extensions.configuration.abstractions\\10.0.0\\microsoft.extensions.configuration.abstractions.10.0.0.nupkg.sha512",
"C:\\Users\\bsarmiento\\.nuget\\packages\\microsoft.extensions.configuration.binder\\9.0.0\\microsoft.extensions.configuration.binder.9.0.0.nupkg.sha512",
"C:\\Users\\bsarmiento\\.nuget\\packages\\microsoft.extensions.configuration.fileextensions\\10.0.0\\microsoft.extensions.configuration.fileextensions.10.0.0.nupkg.sha512",
"C:\\Users\\bsarmiento\\.nuget\\packages\\microsoft.extensions.configuration.json\\10.0.0\\microsoft.extensions.configuration.json.10.0.0.nupkg.sha512",
"C:\\Users\\bsarmiento\\.nuget\\packages\\microsoft.extensions.dependencyinjection\\8.0.1\\microsoft.extensions.dependencyinjection.8.0.1.nupkg.sha512",
"C:\\Users\\bsarmiento\\.nuget\\packages\\microsoft.extensions.dependencyinjection.abstractions\\8.0.2\\microsoft.extensions.dependencyinjection.abstractions.8.0.2.nupkg.sha512",
"C:\\Users\\bsarmiento\\.nuget\\packages\\microsoft.extensions.dependencymodel\\9.0.0\\microsoft.extensions.dependencymodel.9.0.0.nupkg.sha512",
"C:\\Users\\bsarmiento\\.nuget\\packages\\microsoft.extensions.diagnostics.abstractions\\8.0.1\\microsoft.extensions.diagnostics.abstractions.8.0.1.nupkg.sha512",
"C:\\Users\\bsarmiento\\.nuget\\packages\\microsoft.extensions.fileproviders.abstractions\\10.0.0\\microsoft.extensions.fileproviders.abstractions.10.0.0.nupkg.sha512",
"C:\\Users\\bsarmiento\\.nuget\\packages\\microsoft.extensions.fileproviders.physical\\10.0.0\\microsoft.extensions.fileproviders.physical.10.0.0.nupkg.sha512",
"C:\\Users\\bsarmiento\\.nuget\\packages\\microsoft.extensions.filesystemglobbing\\10.0.0\\microsoft.extensions.filesystemglobbing.10.0.0.nupkg.sha512",
"C:\\Users\\bsarmiento\\.nuget\\packages\\microsoft.extensions.hosting.abstractions\\8.0.1\\microsoft.extensions.hosting.abstractions.8.0.1.nupkg.sha512",
"C:\\Users\\bsarmiento\\.nuget\\packages\\microsoft.extensions.logging.abstractions\\8.0.2\\microsoft.extensions.logging.abstractions.8.0.2.nupkg.sha512",
"C:\\Users\\bsarmiento\\.nuget\\packages\\microsoft.extensions.objectpool\\8.0.11\\microsoft.extensions.objectpool.8.0.11.nupkg.sha512",
"C:\\Users\\bsarmiento\\.nuget\\packages\\microsoft.extensions.options\\8.0.2\\microsoft.extensions.options.8.0.2.nupkg.sha512",
"C:\\Users\\bsarmiento\\.nuget\\packages\\microsoft.extensions.primitives\\10.0.0\\microsoft.extensions.primitives.10.0.0.nupkg.sha512",
"C:\\Users\\bsarmiento\\.nuget\\packages\\microsoft.net.http.headers\\2.3.0\\microsoft.net.http.headers.2.3.0.nupkg.sha512",
"C:\\Users\\bsarmiento\\.nuget\\packages\\microsoft.netframework.referenceassemblies\\1.0.3\\microsoft.netframework.referenceassemblies.1.0.3.nupkg.sha512",
"C:\\Users\\bsarmiento\\.nuget\\packages\\microsoft.netframework.referenceassemblies.net48\\1.0.3\\microsoft.netframework.referenceassemblies.net48.1.0.3.nupkg.sha512",
"C:\\Users\\bsarmiento\\.nuget\\packages\\newtonsoft.json\\13.0.4\\newtonsoft.json.13.0.4.nupkg.sha512",
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment