-
This commit is contained in:
@@ -3,6 +3,7 @@
|
||||
Imports Fluent
|
||||
Imports System
|
||||
Imports System.Web
|
||||
Imports System.Net
|
||||
Imports System.Net.Http
|
||||
Imports System.Web.Http
|
||||
Imports System.Data
|
||||
@@ -11,6 +12,9 @@ Imports Newtonsoft.Json.Linq
|
||||
Imports Extensiones
|
||||
Imports System.IO
|
||||
Imports System.Runtime.CompilerServices
|
||||
Imports System.Xml
|
||||
Imports System.Xml.Serialization
|
||||
Imports System.Linq
|
||||
|
||||
Public Class SIGPolizaVirtual : Implements IHttpHandler, IRequiresSessionState
|
||||
|
||||
@@ -56,11 +60,19 @@ Public Class SIGPolizaVirtual : Implements IHttpHandler, IRequiresSessionState
|
||||
#End Region
|
||||
|
||||
Public Sub ProcessRequest(ByVal context As HttpContext) Implements IHttpHandler.ProcessRequest
|
||||
context.Response.ContentType = "application/json"
|
||||
context.Response.ContentType = "application/xml"
|
||||
|
||||
Dim UsuarioActual = ValidaUsuarioSistema(1, 100)
|
||||
'Dim ObjFactura As New Modelos.Factura(usuario, 898028, 140)
|
||||
|
||||
CancelarFacturaPADE(context, UsuarioActual)
|
||||
|
||||
|
||||
End Sub
|
||||
|
||||
|
||||
Private Sub TimbrarFacturaPADE(ByVal context As HttpContext, UsuarioActual As Usuario)
|
||||
|
||||
Dim UsuarioServicio As String = "rene.molina@adssistemas.mx"
|
||||
Dim ClaveServicio As String = "Facturacion2021#"
|
||||
|
||||
@@ -125,11 +137,189 @@ Public Class SIGPolizaVirtual : Implements IHttpHandler, IRequiresSessionState
|
||||
New JProperty("opciones", New String(0) {""})
|
||||
)
|
||||
|
||||
Dim resp = EnviarInformacionPADE("https://timbrado.pade.mx/servicio/rest/timbrado/timbrarConCSD", payload.ToString(), TokenAuth)
|
||||
Dim Respuesta = EnviarInformacionPADE("https://timbrado.pade.mx/servicio/rest/timbrado/timbrarConCSD", payload.ToString(), TokenAuth)
|
||||
|
||||
context.Response.Write(resp)
|
||||
If Not String.IsNullOrEmpty(Respuesta) Then
|
||||
Dim result As PADEServicioTimbradoResp = Nothing
|
||||
Dim serializer As XmlSerializer = New XmlSerializer(GetType(PADEServicioTimbradoResp))
|
||||
|
||||
Try
|
||||
Using reader As TextReader = New StringReader(Respuesta)
|
||||
result = CType(serializer.Deserialize(reader), PADEServicioTimbradoResp)
|
||||
End Using
|
||||
Catch ex As Exception
|
||||
OnError("Ocurrió un error al obtener los resultados", ex)
|
||||
End Try
|
||||
|
||||
If result IsNot Nothing Then
|
||||
Dim xmlGuardar = result.xmlBase64.ToBase64Decode()
|
||||
context.Response.Write(xmlGuardar)
|
||||
Else
|
||||
context.Response.Write(Respuesta)
|
||||
End If
|
||||
Else
|
||||
context.Response.Write(Respuesta)
|
||||
End If
|
||||
End Sub
|
||||
|
||||
Private Sub CancelarFacturaPADE(ByVal context As HttpContext, UsuarioActual As Usuario)
|
||||
|
||||
Dim UsuarioServicio As String = "rene.molina@adssistemas.mx"
|
||||
Dim ClaveServicio As String = "Facturacion2021#"
|
||||
|
||||
Dim EmisorRFC As String = "ZUÑ920208KL4"
|
||||
Dim ArchivoLLave As String = $"{UsuarioActual.Empresa.Ruta}Certificados\CSD01_ZUÑ920208KL4.key"
|
||||
Dim ArchivoCertificado As String = $"{UsuarioActual.Empresa.Ruta}Certificados\CSD01_ZUÑ920208KL4.cer"
|
||||
Dim Clave = "12345678a"
|
||||
Dim TimbraProduccion = False
|
||||
|
||||
If Not File.Exists(ArchivoCertificado) Then
|
||||
context.Response.Write("El archivo de llave privada no existe")
|
||||
Exit Sub
|
||||
End If
|
||||
If Not File.Exists(ArchivoLLave) Then
|
||||
context.Response.Write("El archivo de llave privada no existe")
|
||||
Exit Sub
|
||||
End If
|
||||
If UsuarioActual.Empresa.ContraseñaKey = "" Then
|
||||
context.Response.Write("La clave no puede ser vacía")
|
||||
Exit Sub
|
||||
End If
|
||||
|
||||
Dim llaveByte As Byte(), certByte As Byte()
|
||||
Dim llaveBase64 As String = "", certBase64 As String = ""
|
||||
Dim cfdi As New GoFac.GoCfdi()
|
||||
Dim complemento As String = ""
|
||||
Dim complementoConcepto As String = ""
|
||||
|
||||
|
||||
Try
|
||||
llaveByte = System.IO.File.ReadAllBytes(ArchivoLLave)
|
||||
llaveBase64 = Convert.ToBase64String(llaveByte)
|
||||
Catch ex As Exception
|
||||
context.Response.Write($"Error al leer la llave privada: {ex.Message}")
|
||||
Exit Sub
|
||||
End Try
|
||||
|
||||
|
||||
Try
|
||||
certByte = System.IO.File.ReadAllBytes(ArchivoCertificado)
|
||||
certBase64 = Convert.ToBase64String(certByte)
|
||||
Catch ex As Exception
|
||||
context.Response.Write($"Error al leer el certificado: {ex.Message}")
|
||||
Exit Sub
|
||||
End Try
|
||||
|
||||
Dim TokenAuth As String = ToBase64Encode($"{UsuarioServicio}:{ClaveServicio}")
|
||||
|
||||
Dim Contrato As String = "72330711-cac6-4106-8051-cbcda1aef495"
|
||||
|
||||
Dim FolioFiscal As String = "9A46AD71-560B-4048-8B40-80ADC57C1CDC"
|
||||
|
||||
'Dim Respuesta As String = EnviarInformacionCancelacionPADE("https://timbrado.pade.mx/servicio/rest/cancelacion/cancelar", TokenAuth, Contrato, EmisorRFC, certBase64, llaveBase64, Clave, FolioFiscal)
|
||||
|
||||
'context.Response.Write(Respuesta)
|
||||
|
||||
Dim Respuesta As String = EnviarInformacionCancelacionPADESOAP("https://timbrado.pade.mx/servicio/Timbrado3.3?wsdl", UsuarioServicio, ClaveServicio, Contrato, EmisorRFC, certBase64, llaveBase64, Clave, FolioFiscal, TimbraProduccion)
|
||||
|
||||
If Not String.IsNullOrEmpty(Respuesta) Then
|
||||
Dim result As PADEServicioCancelacionResp = Nothing
|
||||
Dim serializer As XmlSerializer = New XmlSerializer(GetType(PADEServicioCancelacionResp))
|
||||
|
||||
Try
|
||||
Using reader As TextReader = New StringReader(Respuesta)
|
||||
result = CType(serializer.Deserialize(reader), PADEServicioCancelacionResp)
|
||||
End Using
|
||||
Catch ex As Exception
|
||||
OnError("Ocurrió un error al obtener los resultados", ex)
|
||||
End Try
|
||||
|
||||
If result IsNot Nothing Then
|
||||
context.Response.ContentType = "application/json"
|
||||
context.Response.Write(JsonConvert.SerializeObject(result))
|
||||
Else
|
||||
context.Response.Write(Respuesta)
|
||||
End If
|
||||
Else
|
||||
context.Response.Write(Respuesta)
|
||||
End If
|
||||
|
||||
'Dim arrayFolioFiscal = New String(0) {FolioFiscal}
|
||||
'Dim arrayOpciones = New List(Of String)
|
||||
'If Not TimbraProduccion Then
|
||||
' arrayOpciones.Add("MODO_PRUEBA:1")
|
||||
'End If
|
||||
|
||||
'Dim pade = New PADE33.PadeTimbradoServiceClient()
|
||||
|
||||
'Dim Res = pade.cancelarConOpciones(Contrato, UsuarioServicio, ClaveServicio, EmisorRFC, arrayFolioFiscal, certByte, llaveByte, Clave, arrayOpciones.ToArray())
|
||||
|
||||
'context.Response.Write(Res)
|
||||
End Sub
|
||||
|
||||
|
||||
Private Function EnviarInformacionCancelacionPADESOAP(ByVal url As String, UsuarioServicio As String, PassServicio As String, contrato As String, rfcEmisor As String,
|
||||
certBase64 As String, keyBase64 As String, keyPass As String, arregloUUID As String, TimbraProduccion As Boolean) As String
|
||||
Dim retorno = ""
|
||||
Try
|
||||
|
||||
Dim request As HttpWebRequest = CType(WebRequest.Create($"{url}"), HttpWebRequest)
|
||||
'request.Headers.Add("SOAPAction:http://tempuri.org/TestCfd33 ")
|
||||
request.ContentType = "text/xml;charset=""utf-8"""
|
||||
request.Accept = "text/xml"
|
||||
request.Method = "POST"
|
||||
|
||||
Dim XMLString As String = $"<Envelope xmlns=""http://schemas.xmlsoap.org/soap/envelope/"">
|
||||
<Body>
|
||||
<cancelarConOpciones xmlns=""timbrado.ws.pade.mx"">
|
||||
<contrato xmlns="""">{contrato}</contrato>
|
||||
<usuario xmlns="""">{UsuarioServicio}</usuario>
|
||||
<passwd xmlns="""">{PassServicio}</passwd>
|
||||
<rfcEmisor xmlns="""">{rfcEmisor}</rfcEmisor>
|
||||
<arregloUUID xmlns="""">{arregloUUID}</arregloUUID>
|
||||
<cert xmlns="""">{certBase64}</cert>
|
||||
<key xmlns="""">{keyBase64}</key>
|
||||
<keyPass xmlns="""">{keyPass}</keyPass>
|
||||
<opciones xmlns="""">{If(TimbraProduccion, "", "MODO_PRUEBA:3")}</opciones>
|
||||
</cancelarConOpciones>
|
||||
</Body>
|
||||
</Envelope>"
|
||||
|
||||
Dim SOAPReqBody As XmlDocument = New XmlDocument()
|
||||
SOAPReqBody.LoadXml(XMLString)
|
||||
|
||||
Using stream As Stream = request.GetRequestStream()
|
||||
SOAPReqBody.Save(stream)
|
||||
End Using
|
||||
|
||||
Dim response As String = ""
|
||||
|
||||
Using Serviceres As WebResponse = request.GetResponse()
|
||||
Using rd As StreamReader = New StreamReader(Serviceres.GetResponseStream())
|
||||
response = rd.ReadToEnd()
|
||||
End Using
|
||||
End Using
|
||||
|
||||
If Not String.IsNullOrEmpty(response) Then
|
||||
Dim xmlRetorno = New XmlDocument()
|
||||
xmlRetorno.LoadXml(response)
|
||||
Dim elemList As XmlNodeList = xmlRetorno.GetElementsByTagName("return")
|
||||
|
||||
If elemList.Count > 0 Then
|
||||
If elemList(0).ChildNodes.Count > 0 Then
|
||||
retorno = elemList(0).ChildNodes(0).Value
|
||||
End If
|
||||
End If
|
||||
|
||||
End If
|
||||
|
||||
Catch ex As Exception
|
||||
retorno = ""
|
||||
OnError("Ocurrió un error al cancelar", ex)
|
||||
End Try
|
||||
|
||||
Return retorno
|
||||
End Function
|
||||
|
||||
Public ReadOnly Property IsReusable() As Boolean Implements IHttpHandler.IsReusable
|
||||
Get
|
||||
@@ -159,6 +349,46 @@ Public Class SIGPolizaVirtual : Implements IHttpHandler, IRequiresSessionState
|
||||
End Function
|
||||
|
||||
|
||||
Private Function EnviarInformacionCancelacionPADE(url As String, tokenAuth As String, contrato As String, rfcEmisor As String,
|
||||
certBase64 As String, keyBase64 As String, keyPass As String, arregloUUID As String) As String
|
||||
Dim Retorno As String = ""
|
||||
Try
|
||||
Dim urlParametros As String = String.Format("contrato={0}&rfcEmisor={1}&certBase64={2}&keyBase64={3}&keyPass={4}&arregloUUID={5}&opciones={6}", contrato, rfcEmisor, certBase64, keyBase64, keyPass, arregloUUID, "MODO_PRUEBA:1")
|
||||
|
||||
Dim urlRequest As String = String.Format("{0}?{1}", url, urlParametros)
|
||||
|
||||
Using httpClient = New HttpClient()
|
||||
httpClient.Timeout = New TimeSpan(0, 1, 0)
|
||||
Using request = New HttpRequestMessage(HttpMethod.Post, New Uri(urlRequest))
|
||||
request.Headers.Add("Authorization", $"Basic {tokenAuth}")
|
||||
|
||||
Dim response = httpClient.SendAsync(request, HttpCompletionOption.ResponseHeadersRead).Result
|
||||
Retorno = response.Content.ReadAsStringAsync().Result
|
||||
'Dim Parametros = New List(Of KeyValuePair(Of String, String))
|
||||
|
||||
'Parametros.Add(New KeyValuePair(Of String, String)("contrato", contrato))
|
||||
'Parametros.Add(New KeyValuePair(Of String, String)("rfcEmisor", rfcEmisor))
|
||||
'Parametros.Add(New KeyValuePair(Of String, String)("certBase64", certBase64))
|
||||
'Parametros.Add(New KeyValuePair(Of String, String)("keyBase64", keyBase64))
|
||||
'Parametros.Add(New KeyValuePair(Of String, String)("keyPass", keyPass))
|
||||
'Parametros.Add(New KeyValuePair(Of String, String)("arregloUUID", arregloUUID))
|
||||
|
||||
'Using content = New FormUrlEncodedContent(Parametros)
|
||||
' request.Content = content
|
||||
|
||||
|
||||
'End Using
|
||||
|
||||
End Using
|
||||
End Using
|
||||
Catch ex As Exception
|
||||
Retorno = ""
|
||||
OnError("Ocurrió un error al enviar la informacion", ex)
|
||||
End Try
|
||||
Return Retorno
|
||||
End Function
|
||||
|
||||
|
||||
Public Function ToBase64Encode(ByVal plainText As String) As String
|
||||
Dim plainTextBytes = System.Text.Encoding.UTF8.GetBytes(plainText)
|
||||
Return System.Convert.ToBase64String(plainTextBytes)
|
||||
@@ -170,6 +400,53 @@ Public Class SIGPolizaVirtual : Implements IHttpHandler, IRequiresSessionState
|
||||
Return System.Text.Encoding.UTF8.GetString(base64EncodedBytes)
|
||||
End Function
|
||||
|
||||
<Serializable(), XmlRoot("servicioTimbrado")>
|
||||
Public Class PADEServicioTimbradoResp
|
||||
<XmlElement("id")>
|
||||
Public Property id As String
|
||||
<XmlElement("timbradoOk")>
|
||||
Public Property timbradoOk As Boolean
|
||||
<XmlElement("contrato")>
|
||||
Public Property contrato As String
|
||||
<XmlElement("codigo")>
|
||||
Public Property codigo As String
|
||||
<XmlElement("mensaje")>
|
||||
Public Property mensaje As String
|
||||
<XmlElement("UUID")>
|
||||
Public Property UUID As String
|
||||
<XmlElement("FechaTimbrado")>
|
||||
Public Property FechaTimbrado As DateTime
|
||||
<XmlElement("xmlBase64")>
|
||||
Public Property xmlBase64 As String
|
||||
End Class
|
||||
|
||||
<Serializable(), XmlRoot("servicioCancel")>
|
||||
Public Class PADEServicioCancelacionResp
|
||||
<XmlElement("statusOk")>
|
||||
Public Property statusOk As Boolean
|
||||
<XmlElement("codigo")>
|
||||
Public Property codigo As String
|
||||
<XmlElement("mensaje")>
|
||||
Public Property mensaje As String
|
||||
<XmlElement("procesados")>
|
||||
Public Property procesados As Integer
|
||||
<XmlElement("cancelados")>
|
||||
Public Property cancelados As Integer
|
||||
<XmlArray("cancelaciones")>
|
||||
<XmlArrayItem("cancelacion")>
|
||||
Public Property cancelaciones As List(Of PADECancelacion)
|
||||
End Class
|
||||
|
||||
<Serializable(), XmlRoot("cancelacion")>
|
||||
Public Class PADECancelacion
|
||||
<XmlElement("uuid")>
|
||||
Public Property uuid As String
|
||||
<XmlElement("codigo")>
|
||||
Public Property codigo As String
|
||||
<XmlElement("mensaje")>
|
||||
Public Property mensaje As String
|
||||
End Class
|
||||
|
||||
Public Property XMLPrueba As String = "<?xml version=""1.0"" encoding=""UTF-8""?><cfdi:Comprobante xmlns:cfdi=""http://www.sat.gob.mx/cfd/3"" xmlns:xsi=""http://www.w3.org/2001/XMLSchema-instance"" xsi:schemaLocation=""http://www.sat.gob.mx/cfd/3 http://www.sat.gob.mx/sitio_internet/cfd/3/cfdv33.xsd"" Version=""3.3"" Serie=""HM"" Folio=""1682"" Fecha=""2021-05-20T17:43:32"" Sello=""BdE1N3CwiqU6KKOWT80N6X/9kELGK22bRmfHfXHUaYvOCmOixuAN3a0yyd5Yzf4lD0sVs+OScZ1rgNKhWWyRwAJzw/avfGod2l7LIGbyYLGoUHUPpY3swDgTk+zq29PUbf3500YPf4qkXx3GcKYkIb4TnQPnvFnjE8FvcV+p8wETuvijm5T3HzFKCXG6ePrERIt2PN1NM26p2NIOzMSUksSNUtC6rqEI8G2yIUIMZqQ4bHTo1WdV0UPKBaqjkPLyY8Q1TMFZDbiudE454bUJWjxv6KYicXgfH17HJY91XTncCgwwrwlcPrKK7ea/xPzYumHMurEl5arjfqE6+nI3Fw=="" FormaPago=""01"" NoCertificado=""30001000000400002442"" Certificado=""MIIFuzCCA6OgAwIBAgIUMzAwMDEwMDAwMDA0MDAwMDI0NDIwDQYJKoZIhvcNAQELBQAwggErMQ8wDQYDVQQDDAZBQyBVQVQxLjAsBgNVBAoMJVNFUlZJQ0lPIERFIEFETUlOSVNUUkFDSU9OIFRSSUJVVEFSSUExGjAYBgNVBAsMEVNBVC1JRVMgQXV0aG9yaXR5MSgwJgYJKoZIhvcNAQkBFhlvc2Nhci5tYXJ0aW5lekBzYXQuZ29iLm14MR0wGwYDVQQJDBQzcmEgY2VycmFkYSBkZSBjYWRpejEOMAwGA1UEEQwFMDYzNzAxCzAJBgNVBAYTAk1YMRkwFwYDVQQIDBBDSVVEQUQgREUgTUVYSUNPMREwDwYDVQQHDAhDT1lPQUNBTjERMA8GA1UELRMIMi41LjQuNDUxJTAjBgkqhkiG9w0BCQITFnJlc3BvbnNhYmxlOiBBQ0RNQS1TQVQwHhcNMTkwNjE3MjAxODA2WhcNMjMwNjE3MjAxODA2WjCB4jEnMCUGA1UEAxQeWkFQQVRFUklBIFVSVEFETyDRRVJJIFNBIERFIENWMScwJQYDVQQpFB5aQVBBVEVSSUEgVVJUQURPINFFUkkgU0EgREUgQ1YxJzAlBgNVBAoUHlpBUEFURVJJQSBVUlRBRE8g0UVSSSBTQSBERSBDVjElMCMGA1UELRQcWlXROTIwMjA4S0w0IC8gS0FITzY0MTEwMUIzOTEeMBwGA1UEBRMVIC8gS0FITzY0MTEwMUhOVExLUzA2MR4wHAYDVQQLFBVaYXBhdGVy7WEgVXJ0YWRvINFlcmkwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCX4ICuLAA/GYfEdRUMBLolOHKOUTDyw//CQjcj6dmCUWP8Y2UIhbq1JJ5nClsmhg6WThXjYqzRiYSAYagzrtwWri8I7oURIoTDeuxU69UOg1shuCEo89prJfx8ZIGKwB+GedC6dFdKGZLKn4ksSuyfntXmW4rZLup2j24mQx+jpdmcQIGMe6A/2668ZhpYpCw/vwfH8edkS5X41yp/zj6Z9mIySRWaMHm5eT/X0D01l3gX2gJVXY5ebUsKIEmDCP5pmBmyFyJjqYUhYi3+nYARrVPdZ53RPigcoLspXyIBVf2CPansqOYiRIqxLjfsL6B1qGJmpFN1RHd+XF9GzkHzAgMBAAGjHTAbMAwGA1UdEwEB/wQCMAAwCwYDVR0PBAQDAgbAMA0GCSqGSIb3DQEBCwUAA4ICAQAw5nqLkVuaTWX/qnPqWpOlSfrfVF2plqAPu1sdgzU/vZGgZCLxq3cY3Dg02khdsM74A3fYFQGxFFo6zDt5Ru9VySBks2gmbebRuuYKAKHMoi0tNpvI2arOMaiJsq2yzGAox6e+MXhhQ1oV+28HaxjYIWuVSwWAzie+n6VloWXMDDxTg7t9URJ7d8E7ZrPZ2X0+7h6b8sfnOjTljUm+Mt6e6AIl1+lA7Ar4YeJgIOeU/RKSOcvrCGDNtz7kpn0XdsFC/m1xG1bIdhyv0zkRmKvtpVGROsSEHPLBwuTENIkm0Cw2/FQsPrG8S9Yer451Jv0H+heFfJXqVrHv8Azba5OkotK5IlPaHm9voxfhwI1aXHbUS+NwpTHHOeVsvzsC9LQDiLGO3MQLn7VFZebFa84CddwLWf/JTyPYIcg3I/BRDFqbrVNRRDJwVlxIgbU7ZhRIcjiRLFx6UbAd8B2fe+GHgxw/x/6Pop65ca32iGAJgojtXWdD5gZvh6PlhEhWMhIOCvAesE52L4wmIHofAIZjlPRXNaitZ74xDEIpQ9f5X0w/4ltB7OOBYYfu8z9lzCc4M2iSmtq1rvSYxnLI/nvt7D0uYrq82ZeG3kzungcS8qNjufGJeEHNeyDxMXF9rYU4KLxK8KLzA2Ldh7+3zywU/pwXhW/aTS42EViWPbffng=="" CondicionesDePago=""01 - Efectivo"" SubTotal=""100.00"" Moneda=""MXN"" TipoCambio=""1"" Total=""116.00"" TipoDeComprobante=""I"" MetodoPago=""PPD"" LugarExpedicion=""82250""><cfdi:Emisor Rfc=""ZUÑ920208KL4"" Nombre=""Empresa de DEMO"" RegimenFiscal=""601"" /><cfdi:Receptor Rfc=""VOC990129I26"" Nombre=""Cliente Demostracion"" UsoCFDI=""G03"" /><cfdi:Conceptos><cfdi:Concepto ClaveProdServ=""10101902"" NoIdentificacion=""124"" Cantidad=""1.00"" ClaveUnidad=""EA"" Unidad=""PZA"" Descripcion=""ESCOBA "" ValorUnitario=""100.00"" Importe=""100.00""><cfdi:Impuestos><cfdi:Traslados><cfdi:Traslado Base=""100.00"" Impuesto=""002"" TipoFactor=""Tasa"" TasaOCuota=""0.160000"" Importe=""16.00"" /></cfdi:Traslados></cfdi:Impuestos></cfdi:Concepto></cfdi:Conceptos><cfdi:Impuestos TotalImpuestosTrasladados=""16.00""><cfdi:Traslados><cfdi:Traslado Impuesto=""002"" TipoFactor=""Tasa"" TasaOCuota=""0.160000"" Importe=""16.00"" /></cfdi:Traslados></cfdi:Impuestos></cfdi:Comprobante>"
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user