Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   consumir web service SUNAT - facturacion electronica (https://www.clubdelphi.com/foros/showthread.php?t=94262)

oscarac 24-10-2019 19:21:24

consumir web service SUNAT - facturacion electronica
 
una mano por favor con este tema
intento leer el CDR de un documento
segun la documentacion del web services establece lo siguiente
Cita:

SERVICIO WEB CONSULTA DE FACTURAS Y NOTAS



1. La consulta es un servicio web

2. Esta versión sólo permite consultar facturas y notas de crédito y debito, que inicien con “F”

3. Para utilizar esta consulta, se tiene que construir un cliente que se conecte al servicio web.

La URL del servicio web es la siguiente:
https://www.sunat.gob.pe/ol-it-wscon...ConsultService


4. El cliente envía una petición al servidor en formato XML; un ejemplo de esta petición es:


<soapenv:Envelope xmlns:ser="http://service.sunat.gob.pe"
xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd">
<soapenv:Header>
<wsse:Security>
<wsse:UsernameToken>
<wsse:Username>20100066603MODDATOS</wsse:Username>
<wsse:Password>moddatos</wsse:Password>
</wsse:UsernameToken>
</wsse:Security>
</soapenv:Header>
<soapenv:Body>
<ser:getStatus>
<rucComprobante>1028308796</rucComprobante>
<tipoComprobante>01</tipoComprobante>
<serieComprobante>f213</serieComprobante>
<numeroComprobante>12345</numeroComprobante>
</ser:getStatus>
</soapenv:Body>
</soapenv:Envelope>


Donde:
- <wsse:Username>20100066603MODDATOS</wsse:Username>
20100066603MODDATOS = RUC contribuyente más usuario sol.

- <wsse:Password>moddatos</wsse:Password>
moddatos =clave sol del contribuyente

- <rucComprobante>1028308796</rucComprobante>
1028308796 = RUC del comprobante que se quiere consultar

- <tipoComprobante>01</tipoComprobante>
01 = tipo de comprobante que se quiere consultar (01:factura, 07: nota de crédito y 08:nota de debito)

- <serieComprobante>f213</serieComprobante>
f213 = número de serie del comprobante que se quiere consultar

- <numeroComprobante>12345</numeroComprobante>
12345 = numero del comprobante que se quiere consultar

5. La consulta es solo del estado del documento electrónico.

Ejemplo del XML de retorno del servidor.


ya descargue el archivo [url="https://www.sunat.gob.pe:443/ol-ti-it cpgem-beta/bill Service?wsdl"] y se convirtio en una unidad llamada billservice.pas
la cual analizandola tiene 3 funciones

Código Delphi [-]
  billService = interface(IInvokable)
  ['{3D02E3B8-C614-3CC3-895A-7695F0354EB7}']
    function  sendBill(const parameters: sendBill): sendBillResponse; stdcall;
    function  sendSummary(const parameters: sendSummary): sendSummaryResponse; stdcall;
    function  getStatus(const parameters: getStatus): getStatusResponse; stdcall;
  end;

SendBill enviar factura
sendSummary enviar resumen
getStatus obtener respuesta sobre el documento

este ultimo punto es el que me interesa desarrollar

ya tengo creado el XML con la estructura solicitada, ahora solo me falta entender como utilizo el httprio para la lectura de los datos

alguien me echa una mano?

oscarac 24-10-2019 22:27:28

me corrijo
leyendo la documentacion no habla nada del archivo q mencione (billservice.pas)

aqui el tema es entrar a consultar una pagina, con ciertos datos de entrada

Casimiro Notevi 25-10-2019 00:10:15

No me queda claro el problema que tienes.
Y pon el código que usas.

oscarac 25-10-2019 00:17:17

en la cita esta lo q pido
basicamente es consumir un servicio de esta direccion
https://www.sunat.gob.pe/ol-it-wscon...ConsultService

dandole datos de entrada en xml con la siguiente estructira

Código:

<soapenv:Envelope xmlns:ser="http://service.sunat.gob.pe"
xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd">
<soapenv:Header>
<wsse:Security>
<wsse:UsernameToken>
<wsse:Username>20100066603MODDATOS</wsse:Username>
<wsse:Password>moddatos</wsse:Password>
</wsse:UsernameToken>
</wsse:Security>
</soapenv:Header>
<soapenv:Body>
<ser:getStatus>
<rucComprobante>1028308796</rucComprobante>
<tipoComprobante>01</tipoComprobante>
<serieComprobante>f213</serieComprobante>
<numeroComprobante>12345</numeroComprobante>
</ser:getStatus>
</soapenv:Body>
</soapenv:Envelope>


Casimiro Notevi 25-10-2019 10:37:30

Cita:

Empezado por oscarac (Mensaje 534094)
en la cita esta lo q pido
basicamente es consumir un servicio de esta direccion
https://www.sunat.gob.pe/ol-it-wscon...ConsultService

La página que Ud. desea consultar no existe o en éste momento no se encuentra disponible, por favor revise el URL que está solicitando o intente de ubicarlo desde nuestra página principal.


De todas formas, creo que se te olvidó decir cuál es el problema :)


Neftali [Germán.Estévez] 25-10-2019 14:39:33

Si revisas este link (https://neftali.clubdelphi.com/35-ge...ice-en-delphi/) habla del tema.
En concreto, en los ejemplos, el CLIENTE 3, hare justo lo que necesitas tú, pero con un WSDL distinto. Te puede servir para seguir lospasos.

En tu caso te serviría el componente THTTPRIO y el código debería ser similar a esto:

Código Delphi [-]
var
  params:getStatus;
begin
  // Según el rellenado llamamos a uno u otro
  params := getStatus.Create;
  try
    params.rucComprobante := '1028308796';
    params.tipoComprobante := '01';
    params.serieComprobante := 'f213';
    params.numeroComprobante := 12345;
    (HTTPRIO1 as billService).getStatus(params);
  finally
    FreeAndNil(params);
  end;


Fíjate en los parámetros de entrada y salida, que están definidos en la unit que has generado al importar.

Revisa los otros ejemplos, porque también puedes hacerlo utilizando componentes de REST.

oscarac 27-10-2019 05:52:55

Cita:

Empezado por Casimiro Notevi (Mensaje 534101)
La página que Ud. desea consultar no existe o en éste momento no se encuentra disponible, por favor revise el URL que está solicitando o intente de ubicarlo desde nuestra página principal.


De todas formas, creo que se te olvidó decir cuál es el problema :)


[text]https://e-factura.sunat.gob.pe/ol-ti-itcpfegem/billService?wsdl[/text]

esa es la pagina... creo que cuando se coloca como link no aparece completa

el problema es que no hallo la manera de consumir ese web service
creo que me estoy confundiendo, porque en la documentacion no menciona este link si no otro
dejame revisar bien

Casimiro Notevi 27-10-2019 10:12:42

Ese link sí muestra esta información:


Código:

<wsdl:definitions targetNamespace="http://service.gem.factura.comppago.registro.servicio.sunat.gob.pe/">
<wsdl:import location="billService?ns1.wsdl" namespace="http://service.sunat.gob.pe"/>
<wsdl:import location="billService?ns2.wsdl" namespace="http://www.datapower.com/extensions/http://schemas.xmlsoap.org/wsdl/soap12/"/>
<wsdl:binding name="BillServicePortBinding" type="ns1:billService">
<soap11:binding transport="http://schemas.xmlsoap.org/soap/http" style="document"/>
<wsdl:operation name="getStatus">
<soap11:operation soapAction="urn:getStatus" style="document"/>
<wsdl:input name="getStatusRequest">
<soap11:body use="literal"/>
</wsdl:input>
<wsdl:output name="getStatusResponse">
<soap11:body use="literal"/>
</wsdl:output>
</wsdl:operation>
<wsdl:operation name="sendBill">
<soap11:operation soapAction="urn:sendBill" style="document"/>
<wsdl:input name="sendBillRequest">
<soap11:body use="literal"/>
</wsdl:input>
<wsdl:output name="sendBillResponse">
<soap11:body use="literal"/>
</wsdl:output>
</wsdl:operation>
<wsdl:operation name="sendPack">
<soap11:operation soapAction="urn:sendPack" style="document"/>
<wsdl:input name="sendPackRequest">
<soap11:body use="literal"/>
</wsdl:input>
<wsdl:output name="sendPackResponse">
<soap11:body use="literal"/>
</wsdl:output>
</wsdl:operation>
<wsdl:operation name="sendSummary">
<soap11:operation soapAction="urn:sendSummary" style="document"/>
<wsdl:input name="sendSummaryRequest">
<soap11:body use="literal"/>
</wsdl:input>
<wsdl:output name="sendSummaryResponse">
<soap11:body use="literal"/>
</wsdl:output>
</wsdl:operation>
</wsdl:binding>
<wsdl:service name="billService">
<wsdl:port name="BillServicePort" binding="ns0:BillServicePortBinding">
<soap11:address location="https://e-factura.sunat.gob.pe:443/ol-ti-itcpfegem/billService"/>
</wsdl:port>
<wsdl:port name="BillServicePort.0" binding="ns2:BillServicePortBinding">
<soap12:address location="https://e-factura.sunat.gob.pe:443/ol-ti-itcpfegem/billService"/>
</wsdl:port>
<wsdl:port name="BillServicePort.1" binding="ns0:BillServicePortBinding">
<soap11:address location="https://e-factura.sunat.gob.pe:443/ol-ti-itcpfegem/billService"/>
</wsdl:port>
</wsdl:service>
</wsdl:definitions>



La franja horaria es GMT +2. Ahora son las 07:37:05.

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