Skip to content
GitLab
Menu
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Menu
Open sidebar
Brayan Sarmiento
TestPinpad
Commits
27b95f35
Commit
27b95f35
authored
Nov 27, 2025
by
Brayan Sarmiento
Browse files
Mi primer commit
parents
Changes
143
Expand all
Show whitespace changes
Inline
Side-by-side
app_datafono_difare/.vs/app_datafono_difare/CopilotIndices/17.14.1518.61961/SemanticSymbols.db
0 → 100644
View file @
27b95f35
File added
app_datafono_difare/.vs/app_datafono_difare/DesignTimeBuild/.dtbcache.v2
0 → 100644
View file @
27b95f35
File added
app_datafono_difare/.vs/app_datafono_difare/FileContentIndex/48ed74bc-56f6-4a81-ae7b-8b327bca99e7.vsidx
0 → 100644
View file @
27b95f35
File added
app_datafono_difare/.vs/app_datafono_difare/FileContentIndex/a7126563-9b4d-4179-b284-60cc3f57f942.vsidx
0 → 100644
View file @
27b95f35
File added
app_datafono_difare/.vs/app_datafono_difare/FileContentIndex/c1ec85f6-166d-427f-810a-b8a4cac8399b.vsidx
0 → 100644
View file @
27b95f35
File added
app_datafono_difare/.vs/app_datafono_difare/FileContentIndex/cf3d64e4-bace-4507-94bb-ac6728d00e32.vsidx
0 → 100644
View file @
27b95f35
File added
app_datafono_difare/.vs/app_datafono_difare/FileContentIndex/e69ff95e-94be-41ef-9cc7-48ed25dc948f.vsidx
0 → 100644
View file @
27b95f35
File added
app_datafono_difare/.vs/app_datafono_difare/config/applicationhost.config
0 → 100644
View file @
27b95f35
This diff is collapsed.
Click to expand it.
app_datafono_difare/.vs/app_datafono_difare/v17/.futdcache.v2
0 → 100644
View file @
27b95f35
File added
app_datafono_difare/.vs/app_datafono_difare/v17/.suo
0 → 100644
View file @
27b95f35
File added
app_datafono_difare/.vs/app_datafono_difare/v17/DocumentLayout.backup.json
0 → 100644
View file @
27b95f35
{
"Version"
:
1
,
"WorkspaceRootPath"
:
"D:
\\
Discod
\\
SelfCheckout
\\
Proyecto DIFARE
\\
Integration_pinpad_difare
\\
Integration_pinpad_difare
\\
app_datafono_difare
\\
"
,
"Documents"
:
[
{
"AbsoluteMoniker"
:
"D:0:0:{69CBCEFD-99F8-1A42-AC75-B3D94256EE37}|app_datafono_difare.csproj|d:
\\
discod
\\
selfcheckout
\\
proyecto difare
\\
integration_pinpad_difare
\\
integration_pinpad_difare
\\
app_datafono_difare
\\
services
\\
transactionservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
,
"RelativeMoniker"
:
"D:0:0:{69CBCEFD-99F8-1A42-AC75-B3D94256EE37}|app_datafono_difare.csproj|solutionrelative:services
\\
transactionservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker"
:
"D:0:0:{69CBCEFD-99F8-1A42-AC75-B3D94256EE37}|app_datafono_difare.csproj|d:
\\
discod
\\
selfcheckout
\\
proyecto difare
\\
integration_pinpad_difare
\\
integration_pinpad_difare
\\
app_datafono_difare
\\
entities
\\
transaccionresponse.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
,
"RelativeMoniker"
:
"D:0:0:{69CBCEFD-99F8-1A42-AC75-B3D94256EE37}|app_datafono_difare.csproj|solutionrelative:entities
\\
transaccionresponse.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker"
:
"D:0:0:{69CBCEFD-99F8-1A42-AC75-B3D94256EE37}|app_datafono_difare.csproj|d:
\\
discod
\\
selfcheckout
\\
proyecto difare
\\
integration_pinpad_difare
\\
integration_pinpad_difare
\\
app_datafono_difare
\\
helpers
\\
rgvalidatorhelper.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
,
"RelativeMoniker"
:
"D:0:0:{69CBCEFD-99F8-1A42-AC75-B3D94256EE37}|app_datafono_difare.csproj|solutionrelative:helpers
\\
rgvalidatorhelper.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker"
:
"D:0:0:{69CBCEFD-99F8-1A42-AC75-B3D94256EE37}|app_datafono_difare.csproj|d:
\\
discod
\\
selfcheckout
\\
proyecto difare
\\
integration_pinpad_difare
\\
integration_pinpad_difare
\\
app_datafono_difare
\\
program.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
,
"RelativeMoniker"
:
"D:0:0:{69CBCEFD-99F8-1A42-AC75-B3D94256EE37}|app_datafono_difare.csproj|solutionrelative:program.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
}
],
"DocumentGroupContainers"
:
[
{
"Orientation"
:
0
,
"VerticalTabListWidth"
:
256
,
"DocumentGroups"
:
[
{
"DockedWidth"
:
200
,
"SelectedChildIndex"
:
3
,
"Children"
:
[
{
"$type"
:
"Bookmark"
,
"Name"
:
"ST:0:0:{f4e46f1e-cf83-40aa-b568-a627394bc994}"
},
{
"$type"
:
"Bookmark"
,
"Name"
:
"ST:0:0:{1c4feeaa-4718-4aa9-859d-94ce25d182ba}"
},
{
"$type"
:
"Bookmark"
,
"Name"
:
"ST:0:0:{aa2115a1-9712-457b-9047-dbb71ca2cdd2}"
},
{
"$type"
:
"Document"
,
"DocumentIndex"
:
0
,
"Title"
:
"TransactionService.cs"
,
"DocumentMoniker"
:
"D:
\\
Discod
\\
SelfCheckout
\\
Proyecto DIFARE
\\
Integration_pinpad_difare
\\
Integration_pinpad_difare
\\
app_datafono_difare
\\
Services
\\
TransactionService.cs"
,
"RelativeDocumentMoniker"
:
"Services
\\
TransactionService.cs"
,
"ToolTip"
:
"D:
\\
Discod
\\
SelfCheckout
\\
Proyecto DIFARE
\\
Integration_pinpad_difare
\\
Integration_pinpad_difare
\\
app_datafono_difare
\\
Services
\\
TransactionService.cs"
,
"RelativeToolTip"
:
"Services
\\
TransactionService.cs"
,
"ViewState"
:
"AgIAALwAAAAAAAAAAAAqwMwAAABAAAAAAAAAAA=="
,
"Icon"
:
"ae27a6b0-e345-4288-96df-5eaf394ee369.000738|"
,
"WhenOpened"
:
"2025-11-25T22:21:36.126Z"
,
"EditorCaption"
:
""
},
{
"$type"
:
"Document"
,
"DocumentIndex"
:
1
,
"Title"
:
"TransaccionResponse.cs"
,
"DocumentMoniker"
:
"D:
\\
Discod
\\
SelfCheckout
\\
Proyecto DIFARE
\\
Integration_pinpad_difare
\\
Integration_pinpad_difare
\\
app_datafono_difare
\\
Entities
\\
TransaccionResponse.cs"
,
"RelativeDocumentMoniker"
:
"Entities
\\
TransaccionResponse.cs"
,
"ToolTip"
:
"D:
\\
Discod
\\
SelfCheckout
\\
Proyecto DIFARE
\\
Integration_pinpad_difare
\\
Integration_pinpad_difare
\\
app_datafono_difare
\\
Entities
\\
TransaccionResponse.cs"
,
"RelativeToolTip"
:
"Entities
\\
TransaccionResponse.cs"
,
"ViewState"
:
"AgIAABEAAAAAAAAAAAD4vxkAAAAtAAAAAAAAAA=="
,
"Icon"
:
"ae27a6b0-e345-4288-96df-5eaf394ee369.000738|"
,
"WhenOpened"
:
"2025-11-26T16:54:58.703Z"
,
"EditorCaption"
:
""
},
{
"$type"
:
"Document"
,
"DocumentIndex"
:
2
,
"Title"
:
"RgValidatorHelper.cs"
,
"DocumentMoniker"
:
"D:
\\
Discod
\\
SelfCheckout
\\
Proyecto DIFARE
\\
Integration_pinpad_difare
\\
Integration_pinpad_difare
\\
app_datafono_difare
\\
Helpers
\\
RgValidatorHelper.cs"
,
"RelativeDocumentMoniker"
:
"Helpers
\\
RgValidatorHelper.cs"
,
"ToolTip"
:
"D:
\\
Discod
\\
SelfCheckout
\\
Proyecto DIFARE
\\
Integration_pinpad_difare
\\
Integration_pinpad_difare
\\
app_datafono_difare
\\
Helpers
\\
RgValidatorHelper.cs"
,
"RelativeToolTip"
:
"Helpers
\\
RgValidatorHelper.cs"
,
"ViewState"
:
"AgIAABcAAAAAAAAAAADwvzoAAAAFAAAAAAAAAA=="
,
"Icon"
:
"ae27a6b0-e345-4288-96df-5eaf394ee369.000738|"
,
"WhenOpened"
:
"2025-11-26T14:56:17.589Z"
,
"EditorCaption"
:
""
},
{
"$type"
:
"Document"
,
"DocumentIndex"
:
3
,
"Title"
:
"Program.cs"
,
"DocumentMoniker"
:
"D:
\\
Discod
\\
SelfCheckout
\\
Proyecto DIFARE
\\
Integration_pinpad_difare
\\
Integration_pinpad_difare
\\
app_datafono_difare
\\
Program.cs"
,
"RelativeDocumentMoniker"
:
"Program.cs"
,
"ToolTip"
:
"D:
\\
Discod
\\
SelfCheckout
\\
Proyecto DIFARE
\\
Integration_pinpad_difare
\\
Integration_pinpad_difare
\\
app_datafono_difare
\\
Program.cs"
,
"RelativeToolTip"
:
"Program.cs"
,
"ViewState"
:
"AgIAABMAAAAAAAAAAAAQwCYAAABBAAAAAAAAAA=="
,
"Icon"
:
"ae27a6b0-e345-4288-96df-5eaf394ee369.000738|"
,
"WhenOpened"
:
"2025-11-25T16:25:34.028Z"
,
"EditorCaption"
:
""
}
]
}
]
}
]
}
\ No newline at end of file
app_datafono_difare/.vs/app_datafono_difare/v17/DocumentLayout.json
0 → 100644
View file @
27b95f35
{
"Version"
:
1
,
"WorkspaceRootPath"
:
"D:
\\
Discod
\\
SelfCheckout
\\
Proyecto DIFARE
\\
Integration_pinpad_difare
\\
Integration_pinpad_difare
\\
app_datafono_difare
\\
"
,
"Documents"
:
[
{
"AbsoluteMoniker"
:
"D:0:0:{69CBCEFD-99F8-1A42-AC75-B3D94256EE37}|app_datafono_difare.csproj|d:
\\
discod
\\
selfcheckout
\\
proyecto difare
\\
integration_pinpad_difare
\\
integration_pinpad_difare
\\
app_datafono_difare
\\
services
\\
transactionservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
,
"RelativeMoniker"
:
"D:0:0:{69CBCEFD-99F8-1A42-AC75-B3D94256EE37}|app_datafono_difare.csproj|solutionrelative:services
\\
transactionservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker"
:
"D:0:0:{69CBCEFD-99F8-1A42-AC75-B3D94256EE37}|app_datafono_difare.csproj|d:
\\
discod
\\
selfcheckout
\\
proyecto difare
\\
integration_pinpad_difare
\\
integration_pinpad_difare
\\
app_datafono_difare
\\
entities
\\
transaccionresponse.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
,
"RelativeMoniker"
:
"D:0:0:{69CBCEFD-99F8-1A42-AC75-B3D94256EE37}|app_datafono_difare.csproj|solutionrelative:entities
\\
transaccionresponse.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker"
:
"D:0:0:{69CBCEFD-99F8-1A42-AC75-B3D94256EE37}|app_datafono_difare.csproj|d:
\\
discod
\\
selfcheckout
\\
proyecto difare
\\
integration_pinpad_difare
\\
integration_pinpad_difare
\\
app_datafono_difare
\\
helpers
\\
rgvalidatorhelper.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
,
"RelativeMoniker"
:
"D:0:0:{69CBCEFD-99F8-1A42-AC75-B3D94256EE37}|app_datafono_difare.csproj|solutionrelative:helpers
\\
rgvalidatorhelper.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker"
:
"D:0:0:{69CBCEFD-99F8-1A42-AC75-B3D94256EE37}|app_datafono_difare.csproj|d:
\\
discod
\\
selfcheckout
\\
proyecto difare
\\
integration_pinpad_difare
\\
integration_pinpad_difare
\\
app_datafono_difare
\\
program.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
,
"RelativeMoniker"
:
"D:0:0:{69CBCEFD-99F8-1A42-AC75-B3D94256EE37}|app_datafono_difare.csproj|solutionrelative:program.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
}
],
"DocumentGroupContainers"
:
[
{
"Orientation"
:
0
,
"VerticalTabListWidth"
:
256
,
"DocumentGroups"
:
[
{
"DockedWidth"
:
200
,
"SelectedChildIndex"
:
3
,
"Children"
:
[
{
"$type"
:
"Bookmark"
,
"Name"
:
"ST:0:0:{f4e46f1e-cf83-40aa-b568-a627394bc994}"
},
{
"$type"
:
"Bookmark"
,
"Name"
:
"ST:0:0:{1c4feeaa-4718-4aa9-859d-94ce25d182ba}"
},
{
"$type"
:
"Bookmark"
,
"Name"
:
"ST:0:0:{aa2115a1-9712-457b-9047-dbb71ca2cdd2}"
},
{
"$type"
:
"Document"
,
"DocumentIndex"
:
0
,
"Title"
:
"TransactionService.cs"
,
"DocumentMoniker"
:
"D:
\\
Discod
\\
SelfCheckout
\\
Proyecto DIFARE
\\
Integration_pinpad_difare
\\
Integration_pinpad_difare
\\
app_datafono_difare
\\
Services
\\
TransactionService.cs"
,
"RelativeDocumentMoniker"
:
"Services
\\
TransactionService.cs"
,
"ToolTip"
:
"D:
\\
Discod
\\
SelfCheckout
\\
Proyecto DIFARE
\\
Integration_pinpad_difare
\\
Integration_pinpad_difare
\\
app_datafono_difare
\\
Services
\\
TransactionService.cs"
,
"RelativeToolTip"
:
"Services
\\
TransactionService.cs"
,
"ViewState"
:
"AgIAALwAAAAAAAAAAAAqwMwAAABAAAAAAAAAAA=="
,
"Icon"
:
"ae27a6b0-e345-4288-96df-5eaf394ee369.000738|"
,
"WhenOpened"
:
"2025-11-25T22:21:36.126Z"
,
"EditorCaption"
:
""
},
{
"$type"
:
"Document"
,
"DocumentIndex"
:
1
,
"Title"
:
"TransaccionResponse.cs"
,
"DocumentMoniker"
:
"D:
\\
Discod
\\
SelfCheckout
\\
Proyecto DIFARE
\\
Integration_pinpad_difare
\\
Integration_pinpad_difare
\\
app_datafono_difare
\\
Entities
\\
TransaccionResponse.cs"
,
"RelativeDocumentMoniker"
:
"Entities
\\
TransaccionResponse.cs"
,
"ToolTip"
:
"D:
\\
Discod
\\
SelfCheckout
\\
Proyecto DIFARE
\\
Integration_pinpad_difare
\\
Integration_pinpad_difare
\\
app_datafono_difare
\\
Entities
\\
TransaccionResponse.cs"
,
"RelativeToolTip"
:
"Entities
\\
TransaccionResponse.cs"
,
"ViewState"
:
"AgIAABEAAAAAAAAAAAD4vxkAAAAtAAAAAAAAAA=="
,
"Icon"
:
"ae27a6b0-e345-4288-96df-5eaf394ee369.000738|"
,
"WhenOpened"
:
"2025-11-26T16:54:58.703Z"
,
"EditorCaption"
:
""
},
{
"$type"
:
"Document"
,
"DocumentIndex"
:
2
,
"Title"
:
"RgValidatorHelper.cs"
,
"DocumentMoniker"
:
"D:
\\
Discod
\\
SelfCheckout
\\
Proyecto DIFARE
\\
Integration_pinpad_difare
\\
Integration_pinpad_difare
\\
app_datafono_difare
\\
Helpers
\\
RgValidatorHelper.cs"
,
"RelativeDocumentMoniker"
:
"Helpers
\\
RgValidatorHelper.cs"
,
"ToolTip"
:
"D:
\\
Discod
\\
SelfCheckout
\\
Proyecto DIFARE
\\
Integration_pinpad_difare
\\
Integration_pinpad_difare
\\
app_datafono_difare
\\
Helpers
\\
RgValidatorHelper.cs"
,
"RelativeToolTip"
:
"Helpers
\\
RgValidatorHelper.cs"
,
"ViewState"
:
"AgIAABcAAAAAAAAAAADwvzoAAAAFAAAAAAAAAA=="
,
"Icon"
:
"ae27a6b0-e345-4288-96df-5eaf394ee369.000738|"
,
"WhenOpened"
:
"2025-11-26T14:56:17.589Z"
,
"EditorCaption"
:
""
},
{
"$type"
:
"Document"
,
"DocumentIndex"
:
3
,
"Title"
:
"Program.cs"
,
"DocumentMoniker"
:
"D:
\\
Discod
\\
SelfCheckout
\\
Proyecto DIFARE
\\
Integration_pinpad_difare
\\
Integration_pinpad_difare
\\
app_datafono_difare
\\
Program.cs"
,
"RelativeDocumentMoniker"
:
"Program.cs"
,
"ToolTip"
:
"D:
\\
Discod
\\
SelfCheckout
\\
Proyecto DIFARE
\\
Integration_pinpad_difare
\\
Integration_pinpad_difare
\\
app_datafono_difare
\\
Program.cs"
,
"RelativeToolTip"
:
"Program.cs"
,
"ViewState"
:
"AgIAABMAAAAAAAAAAAAQwCYAAABBAAAAAAAAAA=="
,
"Icon"
:
"ae27a6b0-e345-4288-96df-5eaf394ee369.000738|"
,
"WhenOpened"
:
"2025-11-25T16:25:34.028Z"
,
"EditorCaption"
:
""
}
]
}
]
}
]
}
\ No newline at end of file
app_datafono_difare/Config/AppSettings.cs
0 → 100644
View file @
27b95f35
using
System
;
using
System.Collections.Generic
;
using
System.Linq
;
using
System.Text
;
using
System.Threading.Tasks
;
namespace
app_datafono_difare.Config
{
public
class
AppSettings
{
public
RutasConfig
Rutas
{
get
;
set
;
}
}
public
class
RutasConfig
{
public
string
ArchivoBines
{
get
;
set
;
}
}
}
app_datafono_difare/Entities/TransaccionResponse.cs
0 → 100644
View file @
27b95f35
using
System
;
using
System.Collections.Generic
;
using
System.Linq
;
using
System.Text
;
using
System.Threading.Tasks
;
namespace
app_datafono_difare.Entities
{
public
class
TransaccionResponse
{
public
bool
Success
{
get
;
set
;
}
public
string
AuthorizationCode
{
get
;
set
;
}
public
string
TransactionId
{
get
;
set
;
}
public
string
CardNumber
{
get
;
set
;
}
public
string
CardType
{
get
;
set
;
}
public
string
ResponseCode
{
get
;
set
;
}
public
string
ResponseMessage
{
get
;
set
;
}
public
decimal
Amount
{
get
;
set
;
}
public
DateTime
Timestamp
{
get
;
set
;
}
public
string
CommerceCode
{
get
;
set
;
}
public
string
TerminalId
{
get
;
set
;
}
//Campos adicionales
public
string
CodRed
{
get
;
set
;
}
public
string
Metodo
{
get
;
set
;
}
public
string
Lote
{
get
;
set
;
}
public
string
Promocion
{
get
;
set
;
}
public
string
codigoAdquiriente
{
get
;
set
;
}
public
string
idAdquiriente
{
get
;
set
;
}
}
}
app_datafono_difare/Helpers/DateHelper.cs
0 → 100644
View file @
27b95f35
using
System
;
using
System.Collections.Generic
;
using
System.Linq
;
using
System.Text
;
using
System.Threading.Tasks
;
namespace
app_datafono_difare.Helpers
{
public
static
class
DateHelper
{
public
static
DateTime
ParseDate
(
string
fecha
,
string
hora
)
{
try
{
if
(
string
.
IsNullOrEmpty
(
fecha
)
||
string
.
IsNullOrEmpty
(
hora
))
return
DateTime
.
Now
;
int
year
=
int
.
Parse
(
fecha
.
Substring
(
0
,
4
));
int
month
=
int
.
Parse
(
fecha
.
Substring
(
4
,
2
));
int
day
=
int
.
Parse
(
fecha
.
Substring
(
6
,
2
));
int
hour
=
int
.
Parse
(
hora
.
Substring
(
0
,
2
));
int
min
=
int
.
Parse
(
hora
.
Substring
(
2
,
2
));
int
sec
=
int
.
Parse
(
hora
.
Substring
(
4
,
2
));
return
new
DateTime
(
year
,
month
,
day
,
hour
,
min
,
sec
);
}
catch
{
return
DateTime
.
Now
;
}
}
}
}
app_datafono_difare/Helpers/ObtenerTipoTarjetaHelper.cs
0 → 100644
View file @
27b95f35
using
System
;
using
System.Collections.Generic
;
using
System.IO
;
using
System.Linq
;
using
System.Text
;
using
System.Threading.Tasks
;
namespace
app_datafono_difare.Helpers
{
public
static
class
ObtenerTipoTarjetaHelper
{
public
static
string
ObtenerTipoTarjetaPorBin
(
string
cardNumber
,
string
ruta
)
{
if
(
string
.
IsNullOrWhiteSpace
(
cardNumber
)
||
cardNumber
.
Length
<
6
)
return
null
;
string
bin
=
cardNumber
.
Substring
(
0
,
6
);
if
(!
File
.
Exists
(
ruta
))
return
null
;
var
lineas
=
File
.
ReadAllLines
(
ruta
);
foreach
(
var
linea
in
lineas
)
{
if
(
linea
.
Length
<
8
)
continue
;
string
binArchivo
=
linea
.
Substring
(
0
,
6
);
if
(
binArchivo
==
bin
)
{
string
tipo
=
linea
.
Substring
(
linea
.
Length
-
2
);
return
tipo
;
}
}
return
null
;
//Manejo de bines
//if (string.IsNullOrWhiteSpace(cardNumber) || cardNumber.Length < 6)
// return null;
//string primeros6 = cardNumber.Substring(0, 6);
//string path = @"C:\RUTALOGPINPADADEFINIR\BINES.TXT";
//if (!File.Exists(path))
// return null;
//var lineas = File.ReadAllLines(path);
//foreach (var linea in lineas)
//{
// if (linea.Length < 18)
// continue; // línea inválida
// string binInicio = linea.Substring(0, 6);
// string binFin = linea.Substring(6, 6);
// string tipo = linea.Substring(linea.Length - 2); // Últimos 2 caracteres "TC" o "TD"
// // Convertir a número para comparar rangos
// if (int.TryParse(binInicio, out int inicio) &&
// int.TryParse(binFin, out int fin) &&
// int.TryParse(primeros6, out int bin))
// {
// if (bin >= inicio && bin <= fin)
// {
// return tipo; // Encontrado
// }
// }
//}
//return null; // No encontrado
}
}
}
app_datafono_difare/Program.cs
0 → 100644
View file @
27b95f35
using
System
;
using
System.IO
;
using
System.Threading.Tasks
;
using
Serilog
;
using
Microsoft.Extensions.Configuration
;
using
app_datafono_difare.Services
;
namespace
app_datafono_difare
{
class
Program
{
static
async
Task
Main
(
string
[]
args
)
{
var
appConfig
=
new
ConfigurationBuilder
()
.
SetBasePath
(
Directory
.
GetCurrentDirectory
())
.
AddJsonFile
(
"appsettings.json"
,
optional
:
false
)
.
Build
();
var
serilogConfig
=
new
ConfigurationBuilder
()
.
SetBasePath
(
Directory
.
GetCurrentDirectory
())
.
AddJsonFile
(
"appsettings.serilog.json"
,
optional
:
false
)
.
Build
();
Log
.
Logger
=
new
LoggerConfiguration
()
.
ReadFrom
.
Configuration
(
serilogConfig
)
.
CreateLogger
();
Console
.
SetOut
(
new
SerilogTextWriter
(
Log
.
Logger
));
Console
.
SetError
(
new
SerilogTextWriter
(
Log
.
Logger
));
try
{
var
rgService
=
RgService
.
Instance
;
string
rutaBines
=
appConfig
[
"ArchivoBines"
];
string
url
=
appConfig
[
"UrlServicio"
];
string
estacion
=
appConfig
[
"Estacion"
];
var
ventaService
=
new
TransactionService
(
rgService
,
rutaBines
);
await
ventaService
.
ProcesarVenta
(
url
,
estacion
,
5.00
m
,
0
);
}
catch
(
Exception
ex
)
{
Log
.
Error
(
ex
,
"Error ejecutando la aplicación"
);
}
finally
{
Log
.
CloseAndFlush
();
}
}
}
}
\ No newline at end of file
app_datafono_difare/Services/RgService.cs
0 → 100644
View file @
27b95f35
using
System
;
using
System.Collections.Generic
;
using
System.Linq
;
using
System.Text
;
using
System.Threading.Tasks
;
using
ClsRgFunciones
;
using
Serilog
;
namespace
app_datafono_difare.Services
{
public
class
RgService
{
private
static
readonly
Lazy
<
RgService
>
_instance
=
new
Lazy
<
RgService
>(()
=>
new
RgService
());
public
static
RgService
Instance
=>
_instance
.
Value
;
public
RgFunciones
Rg
{
get
;
}
private
RgService
()
{
Log
.
Information
(
"Inicializando RgFunciones..."
);
Rg
=
RgFunciones
.
Instancia
;
}
}
}
app_datafono_difare/Services/TransactionService.cs
0 → 100644
View file @
27b95f35
using
app_datafono_difare.Entities
;
using
app_datafono_difare.Helpers
;
using
ClsRgFunciones
;
using
com.sun.xml.@internal.ws.util.xml
;
using
Newtonsoft.Json
;
using
org.omg.CosNaming
;
using
Serilog
;
using
System
;
using
System.Collections.Generic
;
using
System.Linq
;
using
System.Text
;
using
System.Text.Json.Serialization
;
using
System.Threading.Tasks
;
using
System.Xml
;
using
static
app_datafono_difare
.
Program
;
namespace
app_datafono_difare.Services
{
public
class
TransactionService
{
private
readonly
RgService
_rg
;
private
readonly
string
_rutaBines
;
public
TransactionService
(
RgService
rgService
,
string
rutaBines
)
{
_rg
=
rgService
;
_rutaBines
=
rutaBines
;
}
public
async
Task
ProcesarVenta
(
string
url
,
string
estacion
,
decimal
monto
,
int
cuotas
)
{
Log
.
Information
(
"Configurando servicio..."
);
_rg
.
Rg
.
EstablecerServicio
(
url
);
_rg
.
Rg
.
EstablecerEstacion
(
estacion
);
_rg
.
Rg
.
ConfigurarTerminal
(
estacion
);
_rg
.
Rg
.
ConfigurarPinpad
();
Log
.
Information
(
"Datos configurados. Ejecutando venta..."
);
await
EnviarVenta
(
monto
,
cuotas
);
}
public
async
Task
EnviarVenta
(
decimal
monto
,
int
cuotas
)
{
string
codigo
=
string
.
Empty
;
int
numeroCuotas
=
cuotas
;
bool
tieneCuotas
=
numeroCuotas
>
0
;
string
tipoTran
=
tieneCuotas
?
"02"
:
"01"
;
string
tipoCompra
=
tieneCuotas
?
"02"
:
"00"
;
string
cuotaStr
=
numeroCuotas
.
ToString
(
"00"
);
int
montoTotal
=
(
int
)(
monto
*
100
);
string
montoTotalStr
=
montoTotal
.
ToString
();
int
base12
=
(
int
)(
monto
*
100
/
1.12
m
);
int
iva
=
montoTotal
-
base12
;
string
base12Str
=
base12
.
ToString
();
string
base0Str
=
"0"
;
string
ivaStr
=
iva
.
ToString
();
string
servicioStr
=
"0"
;
string
propinaStr
=
"0"
;
string
secuenciaStr
=
"0"
;
string
aprobacion
=
""
;
string
fechaAnul
=
""
;
string
horaAnul
=
""
;
string
respuesta
=
""
;
try
{
//TODO - Delay para que la DLL funcione correctamente
Log
.
Information
(
"Esperando inicialización de la pinpad..."
);
await
Task
.
Delay
(
1000
);
Log
.
Information
(
"Preparando venta..."
);
await
Task
.
Delay
(
1000
);
Log
.
Information
(
"Enviando comando AUTORIZAR..."
);
// Delay justo antes del comando crítico
await
Task
.
Delay
(
1500
);
//Parsear valores
string
resultado
=
_rg
.
Rg
.
Autorizar
(
ref
codigo
,
int
.
Parse
(
tipoTran
),
int
.
Parse
(
tipoCompra
),
int
.
Parse
(
cuotaStr
),
double
.
Parse
(
montoTotalStr
)
/
100.0
,
double
.
Parse
(
base12Str
)
/
100.0
,
double
.
Parse
(
base0Str
)
/
100.0
,
double
.
Parse
(
ivaStr
)
/
100.0
,
double
.
Parse
(
servicioStr
)
/
100.0
,
double
.
Parse
(
propinaStr
)
/
100.0
,
int
.
Parse
(
secuenciaStr
),
aprobacion
,
ref
fechaAnul
,
ref
horaAnul
,
ref
respuesta
);
Log
.
Information
(
"Respuesta cruda: "
+
resultado
);
if
(
resultado
.
IndexOf
(
"FALLO"
,
StringComparison
.
OrdinalIgnoreCase
)
>=
0
||
resultado
.
IndexOf
(
"CONNECTION"
,
StringComparison
.
OrdinalIgnoreCase
)
>=
0
)
{
Log
.
Error
(
"ERROR DE CONEXIÓN: La pinpad o el servicio remoto no respondió correctamente. Respuesta: "
+
respuesta
);
return
;
}
var
response
=
ProcesarRespuesta
(
resultado
,
monto
);
Log
.
Information
(
$"Transacción procesada:
{
response
.
ResponseMessage
}
"
);
}
catch
(
Exception
ex
)
{
Log
.
Error
(
ex
,
"Error de validación o error en Autorizar"
);
throw
;
}
}
private
TransaccionResponse
ProcesarRespuesta
(
string
respuesta
,
decimal
amount
)
{
string
iCodigo
=
string
.
Empty
;
string
iCodigoRed
=
string
.
Empty
;
string
iCodRespuesta
=
string
.
Empty
;
string
iMensaje
=
string
.
Empty
;
string
iReferencia
=
string
.
Empty
;
string
iLote
=
string
.
Empty
;
string
iHora
=
string
.
Empty
;
string
iFecha
=
string
.
Empty
;
string
iAutorizacion
=
string
.
Empty
;
string
iTerminal
=
string
.
Empty
;
string
iComercio
=
string
.
Empty
;
string
iInteres
=
string
.
Empty
;
string
iPromocion
=
string
.
Empty
;
string
iCodAdq
=
string
.
Empty
;
string
iAdq
=
string
.
Empty
;
string
iMarca
=
string
.
Empty
;
string
iModo
=
string
.
Empty
;
string
iNombre
=
string
.
Empty
;
string
iMontoFijo
=
string
.
Empty
;
string
iEmv
=
string
.
Empty
;
string
iEmv2
=
string
.
Empty
;
string
iEmv3
=
string
.
Empty
;
string
iPin
=
string
.
Empty
;
string
iArqc
=
string
.
Empty
;
string
iTarjeta
=
string
.
Empty
;
string
iFecVen
=
string
.
Empty
;
string
iTrack
=
string
.
Empty
;
string
iRespuesta
=
string
.
Empty
;
string
iMid2
=
string
.
Empty
;
double
dInteres
=
0
;
double
dMontoFijo
=
0
;
ProcesarRespuestaDll
(
respuesta
,
ref
iCodigo
,
ref
iCodigoRed
,
ref
iCodRespuesta
,
ref
iMensaje
,
ref
iReferencia
,
ref
iLote
,
ref
iHora
,
ref
iFecha
,
ref
iAutorizacion
,
ref
iTerminal
,
ref
iComercio
,
ref
iInteres
,
ref
iPromocion
,
ref
iCodAdq
,
ref
iAdq
,
ref
iMarca
,
ref
iModo
,
ref
iNombre
,
ref
iMontoFijo
,
ref
iEmv
,
ref
iEmv2
,
ref
iEmv3
,
ref
iPin
,
ref
iArqc
,
ref
iTarjeta
,
ref
iFecVen
,
ref
iTrack
,
ref
iRespuesta
,
ref
iMid2
);
bool
success
=
iCodRespuesta
==
"00"
;
var
response
=
new
TransaccionResponse
{
AuthorizationCode
=
iAutorizacion
?.
Trim
(),
TransactionId
=
iReferencia
?.
Trim
(),
CardNumber
=
iTarjeta
?.
Trim
(),
CardType
=
iMarca
?.
Trim
(),
ResponseCode
=
iCodRespuesta
?.
Trim
(),
ResponseMessage
=
iMensaje
?.
Trim
(),
Amount
=
amount
,
Timestamp
=
DateHelper
.
ParseDate
(
iFecha
,
iHora
),
CommerceCode
=
iComercio
?.
Trim
(),
TerminalId
=
iTerminal
?.
Trim
(),
CodRed
=
iCodigoRed
?.
Trim
(),
Lote
=
iLote
?.
Trim
(),
Promocion
=
iPromocion
.
Trim
(),
codigoAdquiriente
=
iCodAdq
.
Trim
(),
idAdquiriente
=
iAdq
.
Trim
(),
Metodo
=
ObtenerTipoTarjetaHelper
.
ObtenerTipoTarjetaPorBin
(
iTarjeta
?.
Trim
(),
_rutaBines
)
};
var
json
=
JsonConvert
.
SerializeObject
(
response
);
Log
.
Information
(
$"Resultado de la transacción:
{
json
}
"
);
return
response
;
}
public
static
string
ProcesarRespuestaDll
(
string
pRespuesta
,
ref
string
iCodigo
,
ref
string
iCodigoRed
,
ref
string
iCodRespuesta
,
ref
string
iMensaje
,
ref
string
iReferencia
,
ref
string
iLote
,
ref
string
iHora
,
ref
string
iFecha
,
ref
string
iAutorizacion
,
ref
string
iTerminal
,
ref
string
iComercio
,
ref
string
iInteres
,
ref
string
iPromocion
,
ref
string
iCodAdq
,
ref
string
iAdq
,
ref
string
iMarca
,
ref
string
iModo
,
ref
string
iNombre
,
ref
string
iMontoFijo
,
ref
string
iEmv
,
ref
string
iEmv2
,
ref
string
iEmv3
,
ref
string
iPin
,
ref
string
iArqc
,
ref
string
iTarjeta
,
ref
string
iFecVen
,
ref
string
iTrack
,
ref
string
iRespuesta
,
ref
string
iMid2
)
{
// Variables con tipos correctos
double
dInteres
=
0
;
double
dMontoFijo
=
0
;
var
rg
=
RgFunciones
.
Instancia
;
var
resultado
=
rg
.
ProcesarRespuesta
(
pRespuesta
,
ref
iCodigo
,
ref
iCodigoRed
,
ref
iCodRespuesta
,
ref
iMensaje
,
ref
iReferencia
,
ref
iLote
,
ref
iHora
,
ref
iFecha
,
ref
iAutorizacion
,
ref
iTerminal
,
ref
iComercio
,
ref
dInteres
,
ref
iPromocion
,
ref
iCodAdq
,
ref
iAdq
,
ref
iMarca
,
ref
iModo
,
ref
iNombre
,
ref
dMontoFijo
,
ref
iEmv
,
ref
iEmv2
,
ref
iEmv3
,
ref
iPin
,
ref
iArqc
,
ref
iTarjeta
,
ref
iFecVen
,
ref
iTrack
,
ref
iRespuesta
,
ref
iMid2
);
// Convertir doubles a strings
iInteres
=
dInteres
.
ToString
(
"F2"
);
iMontoFijo
=
dMontoFijo
.
ToString
(
"F2"
);
return
resultado
;
}
}
}
app_datafono_difare/app_datafono_difare.code-workspace
0 → 100644
View file @
27b95f35
{
"folders": [
{
"path": "."
}
],
"settings": {}
}
\ No newline at end of file
Prev
1
2
3
4
5
6
…
8
Next
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment