Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   SOAP POST - Webservice con Certificado y SSL (https://www.clubdelphi.com/foros/showthread.php?t=72382)

JXJ 15-02-2011 22:05:11

SOAP POST - Webservice con Certificado y SSL
 
Hola

ya saben que timbrefiscal es un PAC
y que tiene su servicio de pruebas

https://demotf.buzonfiscal.com/timbrado
https://demotf.buzonfiscal.com/timbrado?wsdl

para poder acceder a el se necesita de usar
un certificado personalizado que te dan en formato .pfx
y en .pem

para la conexion segura y el manejo del certificado uso openssl
y los componentes indy. para hacer el get y el post.

una conexion
segura usando ese certificado. ya la logre pero solo obtengo
respuesta del servidor con un archivo xml

esta es la definicion del wsdl que me regresa

Código:

<?xml version='1.0' encoding='UTF-8'?><!-- Published by JAX-WS RI at http://jax-ws.dev.java.net. RI's version is JAX-WS RI 2.1.5-hudson-$BUILD_NUMBER-. --><wsdl:definitions xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tns="http://www.buzonfiscal.com/TimbradoCFDI/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsd1="http://www.buzonfiscal.com/ns/xsd/bf/TimbradoCFD" xmlns:xsd2="http://www.sat.gob.mx/TimbreFiscalDigital" name="TimbradoCFDI" targetNamespace="http://www.buzonfiscal.com/TimbradoCFDI/">
  <wsdl:types>
    <xsd:schema targetNamespace="http://www.buzonfiscal.com/TimbradoCFDI/">
 <xsd:element name="Error">
    <xsd:complexType>
    <xsd:sequence minOccurs="0">
      <xsd:element name="descripcionError" type="xsd:string" maxOccurs="unbounded" />
    </xsd:sequence>
    <xsd:attribute name="codigo" use="required">
      <xsd:simpleType>
      <xsd:restriction base="xsd:string">
        <xsd:enumeration value="" />
      </xsd:restriction>
      </xsd:simpleType>
    </xsd:attribute>
    </xsd:complexType>
 </xsd:element>
    </xsd:schema>
    <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    <xsd:import namespace="http://www.buzonfiscal.com/ns/xsd/bf/TimbradoCFD" schemaLocation="TimbradoCFD.xsd">
    </xsd:import>
    <xsd:import namespace="http://www.sat.gob.mx/TimbreFiscalDigital" schemaLocation="TimbreFiscalDigital.xsd">
    </xsd:import></xsd:schema></wsdl:types>
  <wsdl:message name="timbradoCFDRequest">
    <wsdl:part element="xsd1:RequestTimbradoCFD" name="request" />
  </wsdl:message>
  <wsdl:message name="timbradoCFDResponse">
    <wsdl:part element="xsd2:TimbreFiscalDigital" name="response" />
  </wsdl:message>
  <wsdl:message name="timbradoCFD_faultMsg">
  <wsdl:part name="fault" element="tns:Error" />
  </wsdl:message>
  <wsdl:portType name="TimbradoCFDI">
    <wsdl:operation name="timbradoCFD">
      <wsdl:input message="tns:timbradoCFDRequest" />
      <wsdl:output message="tns:timbradoCFDResponse" />
            <wsdl:fault name="fault" message="tns:timbradoCFD_faultMsg" />
        </wsdl:operation>
  </wsdl:portType>
  <wsdl:binding name="TimbradoCFDISOAP" type="tns:TimbradoCFDI">
    <soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http" />
    <wsdl:operation name="timbradoCFD">
      <soap:operation soapAction="http://www.buzonfiscal.com/TimbradoCFDI/timbradoCFD" />
      <wsdl:input>
        <soap:body use="literal" />
      </wsdl:input>
      <wsdl:output>
        <soap:body use="literal" />
      </wsdl:output>
    </wsdl:operation>
  </wsdl:binding>
  <wsdl:service name="TimbradoCFDI">
    <wsdl:port binding="tns:TimbradoCFDISOAP" name="TimbradoCFDISOAP">
      <soap:address location="https://demotf.buzonfiscal.com:443/timbrado" />
    </wsdl:port>
  </wsdl:service>
</wsdl:definitions>


el problema es que SOAP, detras de un servidor web con conexion segura
es todo eso nuevo para mi.
segun yo con hacer un post en lugar de un get deberia de funcionar.

Código Delphi [-]
URL :string;
  XMLResponse : TStringStream;
  XMLRequest : TStringStream;
 
url:= 'https://demotf.buzonfiscal.com/timbrado?wsdl
';
 
// el XMLRequest es el archivo xml que timbre fiscal da de muestra sin timbrar
// para que se timbre con su servicio. se llama requestTimbrado.xml
 
  IdHTTP1.Post(URL,XMLRequest, XMLResponse);

el conteido del requestTimbrado.xml
es
Código:

<?xml version="1.0" encoding="UTF-8"?>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:tim="http://www.buzonfiscal.com/ns/xsd/bf/TimbradoCFD" xmlns:req="http://www.buzonfiscal.com/ns/xsd/bf/RequestTimbraCFDI" xmlns:cfdi="http://www.sat.gob.mx/cfd/3">
  <soapenv:Header/>
  <soapenv:Body>
    <tim:RequestTimbradoCFD>
      <cfdi:Comprobante xmlns:cfdi="http://www.sat.gob.mx/cfd/3" xmlns:ecb="http://www.sat.gob.mx/ecb" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:implocal="http://www.sat.gob.mx/implocal" xmlns:bfa2="http://www.buzonfiscal.com/ns/addenda/bf/2" xmlns:terceros="http://www.sat.gob.mx/terceros" xmlns:detallista="http://www.sat.gob.mx/detallista" xmlns:psgecfd="http://www.sat.gob.mx/psgecfd" xmlns:ecc="http://www.sat.gob.mx/ecc" xmlns:tfd="http://www.sat.gob.mx/TimbreFiscalDigital" tipoDeComprobante="ingreso" total="4.64" subTotal="4.00" certificado="MIIE/jCCA+agAwIBAgIUMzAwMDEwMDAwMDAxMDAwMDA4MDkwDQYJKoZIhvcNAQEFBQAwggFvMRgwFgYDVQQDDA9BLkMuIGRlIHBydWViYXMxLzAtBgNVBAoMJlNlcnZpY2lvIGRlIEFkbWluaXN0cmFjacOzbiBUcmlidXRhcmlhMTgwNgYDVQQLDC9BZG1pbmlzdHJhY2nDs24gZGUgU2VndXJpZGFkIGRlIGxhIEluZm9ybWFjacOzbjEpMCcGCSqGSIb3DQEJARYaYXNpc25ldEBwcnVlYmFzLnNhdC5nb2IubXgxJjAkBgNVBAkMHUF2LiBIaWRhbGdvIDc3LCBDb2wuIEd1ZXJyZXJvMQ4wDAYDVQQRDAUwNjMwMDELMAkGA1UEBhMCTVgxGTAXBgNVBAgMEERpc3RyaXRvIEZlZGVyYWwxEjAQBgNVBAcMCUNveW9hY8OhbjEVMBMGA1UELRMMU0FUOTcwNzAxTk4zMTIwMAYJKoZIhvcNAQkCDCNSZXNwb25zYWJsZTogSMOpY3RvciBPcm5lbGFzIEFyY2lnYTAeFw0xMDA3MzAxNjU4NDhaFw0xMjA3MjkxNjU4NDhaMIGXMRIwEAYDVQQDDAlNYXRyaXogU0ExEjAQBgNVBCkMCU1hdHJpeiBTQTESMBAGA1UECgwJTWF0cml6IFNBMSUwIwYDVQQtExxBQUEwMTAxMDFBQUEgLyBBQUFBMDEwMTAxQUFBMR4wHAYDVQQFExUgLyBBQUFBMDEwMTAxSERGUlhYMDExEjAQBgNVBAsMCVVuaWRhZCAxMDCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAsKL9mh8flpnQXVmtOvDnSYgtfRMTPe/4JQMivUYEr6sEAUIQu8tR0xlR0OcDP9LZBfTddUwK2zjiTCQiQhAkgsn8EQsZGI9cisqrePtRXfH/GwLl7l2IHMsAdI4Xvy6GRbszobt2IRuIZLj0MGv5/NcSmQTWv1QkSXMKaSUQ3BsCAwEAAaOB6jCB5zAMBgNVHRMBAf8EAjAAMAsGA1UdDwQEAwIGwDAdBgNVHQ4EFgQUTwXUS0hPz51Nk4KyPhJLgP9qMYYwLgYDVR0fBCcwJTAjoCGgH4YdaHR0cDovL3BraS5zYXQuZ29iLm14L3NhdC5jcmwwMwYIKwYBBQUHAQEEJzAlMCMGCCsGAQUFBzABhhdodHRwOi8vb2NzcC5zYXQuZ29iLm14LzAfBgNVHSMEGDAWgBTrWX0EIppTjZ5xGqBYlin1OeCgxTAQBgNVHSAECTAHMAUGAyoDBDATBgNVHSUEDDAKBggrBgEFBQcDAjANBgkqhkiG9w0BAQUFAAOCAQEAtIP05qlz0J4dITRpQ0mEz47svkoRNHqTlQOXgXGeEfpF9ZowHIjvOw6nL1srLJWHh+c/RhN03gJ1tevw9In5vxMPITlmTeUGrWNqVef5U5hDkA/bg0clEEiVAuyO+r9cYq8l8EZ9Ip6fl9YMmGD80gC/nFDdbhQ04RaelyUh9Gv6pRAOtDevhyjqNupuOoR/Zzt7qMIb5/F7xflPDV6YvO7CS/1E9KGnixIJmdH/JqHm4FdIkeal1zJlN6MBYXgIewnuxkfObS8ZS7GhX9YYCctk+FnHvHDRgx3kmtZWhh0AvEsaZMiZ3IoI1s8xLDPgmY8vJwlbe4IY+qFisczBKA==" noCertificado="30001000000100000809" formaDePago="Pago en una sola exhibición" sello="GzdNXbif5zGZ9wbbPSgHemd6vQZU+oLh7w1utC844O7CjScIPZ19DYn4pwmO7eZT1j9N/2CEkme6ep6YkjmvYNPgTKOE5seutyE2+UQ7n6BjJKtwFm8GIDPc4Xf6/7Y3QFAy6+REuIL1B51FWsUyy4zrJ7VnFkiOqkzikxdDwO0=" fecha="2011-01-08T12:16:40" folio="66" version="3.0" xsi:schemaLocation="http://www.sat.gob.mx/cfd/3 http://www.sat.gob.mx/sitio_internet/cfd/3/cfdv3.xsd http://www.sat.gob.mx/TimbreFiscalDigital http://www.sat.gob.mx/sitio_internet...calDigital.xsd http://www.sat.gob.mx/detallista http://www.sat.gob.mx/sitio_internet...detallista.xsd http://www.sat.gob.mx/implocal http://www.sat.gob.mx/sitio_internet...l/implocal.xsd http://www.buzonfiscal.com/ns/addenda/bf/2 http://www.buzonfiscal.com/schema/xs...da_BF_v2.2.xsd ">
        <cfdi:Emisor nombre="Empresa Demo" rfc="AAA010101AAA">
          <cfdi:DomicilioFiscal codigoPostal="53400" pais="México" estado="Nuevo Leon" municipio="Monterrey" colonia="Obispado" noExterior="1640" calle="Padre Mier"/>
        </cfdi:Emisor>
        <cfdi:Receptor nombre="Cliente Demo" rfc="CLI010101DEM">
          <cfdi:Domicilio codigoPostal="64060" pais="Mexico" estado="Nuevo Leon" municipio="Monterrey" noExterior="5512" calle="Padre Mier"/>
        </cfdi:Receptor>
        <cfdi:Conceptos>
          <cfdi:Concepto importe="4.00" valorUnitario="2.00" descripcion="2" unidad="2" cantidad="2">
            <cfdi:InformacionAduanera aduana="GDL" fecha="2010-12-12-06:00" numero="132456"/>
          </cfdi:Concepto>
        </cfdi:Conceptos>
        <cfdi:Impuestos totalImpuestosTrasladados="0.64">
          <cfdi:Traslados>
            <cfdi:Traslado importe="0.64" tasa="16.00" impuesto="IVA"/>
          </cfdi:Traslados>
        </cfdi:Impuestos>
        <cfdi:Complemento>
        </cfdi:Complemento>
      </cfdi:Comprobante>
      <req:InfoBasica RfcEmisor="AAA010101AAA" RfcReceptor="ccc010101ccc"/>
    </tim:RequestTimbradoCFD>
  </soapenv:Body>
</soapenv:Envelope>

el problema es que no se como enviar el post
por que el get si regresa algo y con post solo error interno del sistema
y cual es la forma de enviar un post a un web service
por que como esta detras de https://
la definicion usand el WSDL import wizard de delphi
no sirve.
ya he probado con esa deficion y salen que no hay partes definidas
por eso estoy unsando delphi 7 indy 9 y indy_openssl096g.zip

¿alguna idea de como se envia un post a un webservice con protoclo SOAP 1.2
con delphi e idhttp?

ya no se ni que hacer.

gracias por su atencion

ifarias 18-02-2011 08:15:32

Hola.

Por lo que yo entiendo, este se debe tratar como un WebService, o sea que debemos crear un webservice a partir del archivo TimbradoCFDI.wsdl proporcionado en el PAC_Kit.zip.


Se genera bien, pero no puedo compilarlo ya que no se encuentra la referencia:

Código Delphi [-]
  TimbradoCFDI = interface(IInvokable)
  ['{CA94D87A-2654-F586-A8FF-F54929CD4F7B}']
    function  timbradoCFD(const request: RequestTimbradoCFD): TimbreFiscalDigital; stdcall;
  end;

Pero la definición de RequestTimbradoCFD, y la TimbreFiscalDigital, no las encuentro o no se donde se definen.


Construyo los XMLDataBinding, para los archivos cfdv3.xsd, RequestTimbraCFDI.xsd, TimbreFiscalDigital.xsd, y en ninguno de ellos viene la definición, por lo que no puedo generar los .dcu


Estoy trabajando con Delphi 7.


Si alguien tiene alguna idea de por donde seguir, se lo agradeceríamos.

JXJ 18-02-2011 17:48:45

Asi es. faltan archivos de definicion de ese namespace

he hecho lo miso que tu.
pero no me resulta. asi que usar el xml databindig no es viable.

luego intente. usar el xml que se recibe de respuesta.
que es un envelope SOAP

pero solo obtengo texto en blanco. o errores de no se puede hacer
ole to string

osea no logro accesar a su estrutura.

intente acceder usando el xmldocument1
al response del timbrado osea al timbre

pero da errores tan solo para acceder al nodo raiz
por que no se definio un namespace

este es el contenido del archivo responsetimbrado.xml

Código:

<?xml version='1.0' encoding='UTF-8'?><S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/"><S:Body><ns2:TimbreFiscalDigital xmlns:ns2="http://www.sat.gob.mx/TimbreFiscalDigital" xmlns:ns3="http://www.buzonfiscal.com/TimbradoCFDI/" xmlns:ns4="http://www.buzonfiscal.com/ns/xsd/bf/RequestTimbraCFDI" xmlns:ns5="http://www.sat.gob.mx/cfd/3" xmlns:ns6="http://www.buzonfiscal.com/ns/xsd/bf/TimbradoCFD" xmlns:ns7="http://www.sat.gob.mx/detallista" xmlns:ns8="http://www.sat.gob.mx/terceros" xmlns:ns9="http://www.sat.gob.mx/ecc" xmlns:ns10="http://www.sat.gob.mx/implocal" xmlns:ns11="http://www.sat.gob.mx/ecb" xmlns:ns12="http://www.buzonfiscal.com/ns/referenceID/v1" xmlns:ns13="http://new.webservice.namespace" selloSAT="DTvowAJn9kFD83/7CVOVhhcOSzf5ZTCANOQmvJ+r58mH2ItSszMqb9ACTsI1MvUzdcehHC9OgrZuH/HLqHGtwBeuGeRrxMirqs+XnMSHD8nu79Ah9bhVQhOAN6YS5MXbGPhzOc+7/x3q6c2gOhA33/AJUuFJSesCdtifwBOwfvQ=" noCertificadoSAT="30001000000100000801" selloCFD="hJCk3eNMPB4a8klyUxNN/Esv/4OGTE8eCd7Ve+c3SmGqDdeH/4fr7yrjaGLnLwH1ABW4vniNN7c6pAXH1mwSS2Rv/3CGMp8x92zFJarsEW6CS+4k9fg8avF0Nt0XJkyyMun+yY1Zbghvqg3owVP10MmEJlu9GcxcOVqQh9l8j4E=" FechaTimbrado="2011-02-17T18:55:22" UUID="e17a2175-b5d9-4efb-8d9f-553b9bf897a5" version="1.0"/></S:Body></S:Envelope>

Pedjlb 27-04-2011 16:41:12

Hola
 
Buen dia.

Ifarias, comparto contigo mi experiencia en delphi 2010. Tenia exactamente ese problema, y lo unico que hice fue colocar todos los archivos de definicion XSD y el archivo wsdl en la misma carpeta del proyecto y compiló perfecto. No se si sea la solución idonea o si funcione para las referencias por internet. Solo te comparto mi experiencia, espero te ayude.

Ahora mi duda es como usar los certificados que me envia timbrefiscal para conectarme mediante soap con el webservice, si alguien pudiera ayudarme, se lo agradeceria mucho. Hasta luego.

ifarias 28-04-2011 00:31:59

Cita:

Empezado por Pedjlb (Mensaje 398166)
Buen dia.

Ifarias, comparto contigo mi experiencia en delphi 2010. Tenia exactamente ese problema, y lo unico que hice fue colocar todos los archivos de definicion XSD y el archivo wsdl en la misma carpeta del proyecto y compiló perfecto. No se si sea la solución idonea o si funcione para las referencias por internet. Solo te comparto mi experiencia, espero te ayude.

Ahora mi duda es como usar los certificados que me envia timbrefiscal para conectarme mediante soap con el webservice, si alguien pudiera ayudarme, se lo agradeceria mucho. Hasta luego.

Excelente idea, muchas gracias, yo resolví el problema cambiando los nombre que Delphi da por default, y con eso pude compilarlosi problema.

Todabía faltan detalles por resolver, pero bueno, un punto menos.

Sodesne 09-05-2011 20:11:08

Duda
 
¿Ya pudiste hacer la conexión completa con timbre fiscal, yo ando metiendome tmb con ellos pero se me hace muy confuso el asunto sobretodo pq no entiendo bien eso del webservice? ¿Cómo lo has solucionado? o por donde me recomiendas comenzar? para hacer la conexion con ellos o con qué componente? AAAHHRRRGH !!! me quiero volver chango!!! por la ignorancia :S

Saludos
gracias por cualquier ayuda que pudiesen darme


La franja horaria es GMT +2. Ahora son las 21:42:45.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi