AFIP – SDG SIT – DI INTR WebService: presentacionprocessor

Anuncio
AFIP – SDG SIT – DI INTR
ws presentacionprocessor – Manual para el Desarrollador
Fecha: 18/7/13
AFIP – SDG SIT – DI INTR
WebService: presentacionprocessor
Presentación de DDJJ desde
Organismos Externos
Manual para el desarrollador
Revisión correspondiente al 18/07/2013
Página 1 de 13
AFIP – SDG SIT – DI INTR
ws presentacionprocessor – Manual para el Desarrollador
Fecha: 18/7/13
Revisión Histórica
Versión
Fecha
Descripción
0.1.0
11/8/10
Creación del documento.
0.1.1
19/8/10
Actualización de URLs de documentación adicional.
0.1.2
19/4/13
Se ajusta el documento para cumplir estándares de los
WS de AFIP.
0.1.3
24/04/13
Se agrega descripción de un caso de uso típico donde se
usará este WebService
0.1.4
29/04/13
Se ajusta según observaciones de tecnología:
- Actualización URL de Producción
- Actualización operacion dummy
- Actualización nombres de campos y descripciones del
upload request
0.1.5
18/07/13
Se agrega aclaración del parámetro representadoCUIT en
punto 2.3 Lista de Operaciones
Página 2 de 13
AFIP – SDG SIT – DI INTR
ws presentacionprocessor – Manual para el Desarrollador
Fecha: 18/7/13
Contenido
WebService: presentacionprocessor _________ 1
1.
INTRODUCCIÓN..............................................................................................................................4
1.1.
1.2.
1.3.
1.4.
2.
Objetivo ____________________________________________________________ 4
Alcance ____________________________________________________________ 4
Precondiciones ______________________________________________________ 4
Caso de Uso ________________________________________________________ 4
ESPECIFICACIÓN DEL WEB SERVICE .....................................................................................5
2.1.
2.2
2.3
URLs del WSDL _____________________________________________________ 5
Servicio: presentacionprocessor__________________________________________ 5
Lista de Operaciones Posibles ___________________________________________ 5
Ejemplo para SOAPUI _________________________________________________ 7
3.
TRATAMIENTO DE ERRORES EN EL WS.................................................................................9
3.1.
4.
Ejemplos de errores: __________________________________________________ 9
EJEMPLOS DE CLIENTES...........................................................................................................10
4.1.
4.2.
Cliente java ________________________________________________________ 10
Cliente Visual Basic .NET _____________________________________________ 12
Página 3 de 13
AFIP – SDG SIT – DI INTR
ws presentacionprocessor – Manual para el Desarrollador
Fecha: 18/7/13
1. Introducción
1.1.
Objetivo
Este documento esta dirigido a los Organismos Externos que deban desarrollar
una aplicación cliente, para que puedan realizar la presentación de declaraciones
juradas de manera automática en el Sistema de Presentación de Declaraciones
Juradas y Pagos de la AFIP.
1.2.
Alcance
Este documento brinda las especificaciones técnicas para desarrollar el cliente del
Web Service que se comunicará con el sistema SETI, para la presentación
autómata de una DDJJ.
1.3.
Precondiciones
Lo detallado en este documento deberá complementarse con los relativos a
Servicio de Autenticación, Autorización y Establecimiento del canal de
comunicación.
El cliente deberá estar autenticado por el WSAA para poder invocar el servicio de
web service detallado en este documento.
1.4.
Caso de Uso
Breve descripción de un caso de uso típico donde se usará este WebService:
- El contribuyente ingresa al sitio web de un Organismo Recaudador (ej AGIP)
- El contribuyente selecciona la opción [Crear una nueva DJ]
- El contribuyente completa una DJ y da clic en la opción [Presentar la DJ]
- La aplicación envía la DJ a la AFIP mediante este WebService
Página 4 de 13
AFIP – SDG SIT – DI INTR
ws presentacionprocessor – Manual para el Desarrollador
Fecha: 18/7/13
2. Especificación del Web Service
2.1.
URLs del WSDL
Entorno
Testing
Producción
2.2
Dirección
https://awshomo.afip.gov.ar/setiws/webservices/uploadPresentacionService?wsdl
https://aws.afip.gov.ar/setiws/webservices/uploadPresentacionService?wsdl
Servicio: presentacionprocessor
El nombre de servicio ante WSAA es presentacionprocessor
El servicio es delegable: “El Organismo Recaudador usuario del servicio (ej AGIP)
podría, si lo cree conveniente, terciarizar la operación del cliente del ws con otra
empresa (ej: InterBanking)”
2.3
Lista de Operaciones Posibles
Request: dummy()
Operación para verificar disponibilidad de servicio sin autenticación (no espera
recibir token/sign)
<!-- Request dummy: -->
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:dom="http://domain.presentacion.seti.osiris.afip.gov/">
<soapenv:Header/>
<soapenv:Body>
<dom:dummy/>
</soapenv:Body>
</soapenv:Envelope>
Response: responde status de appserver, dbserver y authserver
<!-- Response dummy: -->
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<ns2:dummyResponse xmlns:ns2="http://domain.presentacion.seti.osiris.afip.gov/">
<return>
<appserver>OK</appserver>
Página 5 de 13
AFIP – SDG SIT – DI INTR
ws presentacionprocessor – Manual para el Desarrollador
Fecha: 18/7/13
<authserver>OK</authserver>
<dbserver>OK</dbserver>
</return>
</ns2:dummyResponse>
</soap:Body>
</soap:Envelope>
Request: upload( String token, String sign, Long representadoCuit, String
presentacionDataHandler, String fileName )
Operación que permite realizar la presentación de la DJ en el sistema SETI.
- token: obtenido desde el WSAA
- sign: obtenido desde el WSAA
- representadoCuit: cuit del organismo representado (usuario del servicio)
La CUIT debe coincidir con la CUIT que usa el certificado para firmar el ticket de
acceso al WSAA.
- presentacionDataHandler:
o referencia al archivo adjunto optimizado con MTOM
o xsd:base64Binary xmlmime:expectedContentType="application/octetstream"
-
fileName: nombre del archivo, debe tener formato valido para SETI, ejemplos:
o F5220.20246634360.txt
Para el Formulario 5220 donde la CUIT debe ser la del registro 1 de la
DJ
o 951616F0159.dat
Para el Formulario 159 donde los primeros 6 dígitos es el numero
verificador de la DJ
o 215983F0713.0cbf6f2f45d83adf11cd9d72b3992bdb.b64
Para el Formulario 713 donde los primeros 6 dígitos es el numero
verificador de la DJ
Página 6 de 13
AFIP – SDG SIT – DI INTR
ws presentacionprocessor – Manual para el Desarrollador
Fecha: 18/7/13
Ejemplo para SOAPUI
Setear en true las siguientes Request Properties
-
Enable MTOM = true
Force MTOM = true
Expand MTOM Attachments = true
Adjuntar archivo, en este caso:
215983F0713.0cbf6f2f45d83adf11cd9d72b3992bdb.b64
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:dom="http://domain.presentacion.seti.osiris.afip.gov/">
<soapenv:Header/>
<soapenv:Body>
<dom:upload>
<token>PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9I
nllcyI/Pgo8c3NvIHZlcnNpb249IjIuMCI+CiAgICA8aWQgdW5pcXVlX2lkPSIzMjQ1MDQxODkzIiBzc
mM9IkNOPXdzYWFob21vLCBPPUFGSVAsIEM9QVIsIFNFUklBTE5VTUJFUj1DVUlUIDMzNjkzNDUwMjM5I
iBnZW5fdGltZT0iMTM2NjIyNTQwNCIgZXhwX3RpbWU9IjEzNjYyNjg2NjQiLz4KICAgIDxvcGVyYXRpb
24gdmFsdWU9ImdyYW50ZWQiIHR5cGU9ImxvZ2luIj4KICAgICAgICA8bG9naW4gdWlkPSJDPWFyLCBPP
WFmaXAsIFNFUklBTE5VTUJFUj1DVUlUIDIwMjY3MzM1NTY4LCBDTj1wcmVzZW50YWNpb25wcm9jZXNzb
3IiIHNlcnZpY2U9InByZXNlbnRhY2lvbnByb2Nlc3NvciIgcmVnbWV0aG9kPSIyMiIgZW50aXR5PSIzM
zY5MzQ1MDIzOSIgYXV0aG1ldGhvZD0iY21zIj4KICAgICAgICAgICAgPHJlbGF0aW9ucz4KICAgICAgI
CAgICAgICAgIDxyZWxhdGlvbiByZWx0eXBlPSI0IiBrZXk9IjIwMjY3MzM1NTY4Ii8+CiAgICAgICAgI
CAgIDwvcmVsYXRpb25zPgogICAgICAgIDwvbG9naW4+CiAgICA8L29wZXJhdGlvbj4KPC9zc28+Cgo=
</token>
<sign>fw08JYAXZezAKpPjk58+YMARjipdh29IgkLNv6pqndV9fecW2R30c6TDPdqetJNhTV
BoIPKJNQgCdN2EHMGlepzDCG6blB7bJtHhVGYCbE2Uejq0d8FiH+NFXk1cHhcFTVo0sODlMLthSLf0Vn
3+/g5RsDEvVbVqTd1UDzfNwNg=</sign>
<representadoCuit>20267335568</representadoCuit>
<presentacion>
<presentacionDataHandler>cid:215983F0713.0cbf6f2f45d83adf11cd9d72b3992bdb.b64</presentacionData
Handler>
<fileName>215983F0713.0cbf6f2f45d83adf11cd9d72b3992bdb.b64</fileName>
</presentacion>
</dom:upload>
Página 7 de 13
AFIP – SDG SIT – DI INTR
ws presentacionprocessor – Manual para el Desarrollador
Fecha: 18/7/13
</soapenv:Body>
</soapenv:Envelope>
Response: número único asignado a la presentación de la DJ por parte de AFIP.
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<ns2:uploadResponse xmlns:ns2="http://domain.presentacion.seti.osiris.afip.gov/">
<return>62372464</return>
</ns2:uploadResponse>
</soap:Body>
</soap:Envelope>
Página 8 de 13
AFIP – SDG SIT – DI INTR
ws presentacionprocessor – Manual para el Desarrollador
Fecha: 18/7/13
3. Tratamiento de errores en el WS
La operación upload del webService devuelve un SOAP Fault en caso de error.
(Ver http://www.w3.org/TR/2000/NOTE-SOAP-20000508/#_Toc478383507)
Clasificación de errores:
#
1
FaultCode
Client.contentError
2
User.businessError
3
Server.processError
3.1.
FaultString
- CUIT contribuyente inválida
etc
- Request mal formado
- Archivo adjunto inválido
- El período fiscal no corresponde
etc
- Error accediendo a base de datos
etc
Ejemplos de errores:
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<soap:Fault>
<faultcode>soap:Client.contentError</faultcode>
<faultstring>La cuit [20111111112] no corresponde con ninguna de las cuits habilitadas para la
sesion</faultstring>
<detail>
<server>1</server>
</detail>
</soap:Fault>
</soap:Body>
</soap:Envelope>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<soap:Fault>
<faultcode>soap:User.businessError</faultcode>
<faultstring>El nombre del archivo [F05680.txt] no corresponde con ningún formato válido</faultstring>
<detail>
<server>1</server>
</detail>
</soap:Fault>
</soap:Body></soap:Envelope>
Página 9 de 13
AFIP – SDG SIT – DI INTR
ws presentacionprocessor – Manual para el Desarrollador
Fecha: 18/7/13
4. Ejemplos de Clientes
4.1.
Cliente java
package gov.afip.osiris.seti.presentacion.domain;
import gov.afip.osiris.seti.presentacion.domain.service.implementation.ws.Upload;
import java.io.File;
import java.net.URI;
import java.net.URL;
import javax.activation.DataHandler;
import javax.activation.FileDataSource;
import javax.xml.namespace.QName;
import javax.xml.ws.BindingProvider;
import javax.xml.ws.soap.SOAPBinding;
public final class PresentacionProcessorMTOMService_PresentacionProcessorMTOMImplPort_Client {
private static final QName SERVICE_NAME = new
QName("http://ws.implementation.service.domain.presentacion.seti.osiris.afip.gov/", "upload");
private PresentacionProcessorMTOMService_PresentacionProcessorMTOMImplPort_Client() {}
public static void main(String args[]) throws java.lang.Exception {
URL wsdlURL =
PresentacionProcessorMTOMService_PresentacionProcessorMTOMImplPort_Client.class.getResource(
"uploadPresentacionService.wsdl" );
PresentacionProcessorMTOMService port = (new Upload(wsdlURL,
SERVICE_NAME)).getPresentacionProcessorMTOMImplPort();
((SOAPBinding)((BindingProvider)port).getBinding()).setMTOMEnabled(true);
File aFile = new File(new
URI((PresentacionProcessorMTOMService_PresentacionProcessorMTOMImplPort_Client.class.getResource(
"951616F0159.dat" )).toString()));
System.out.println("Invoking upload...");
String _upload_token = "PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9I
nllcyI/Pgo8c3NvIHZlcnNpb249IjIuMCI+CiAgICA8aWQgdW5pcXVlX2lkPSIzMjQ1MDQxODkzIiBzc
mM9IkNOPXdzYWFob21vLCBPPUFGSVAsIEM9QVIsIFNFUklBTE5VTUJFUj1DVUlUIDMzNjkzNDUwMjM5I
iBnZW5fdGltZT0iMTM2NjIyNTQwNCIgZXhwX3RpbWU9IjEzNjYyNjg2NjQiLz4KICAgIDxvcGVyYXRpb
24gdmFsdWU9ImdyYW50ZWQiIHR5cGU9ImxvZ2luIj4KICAgICAgICA8bG9naW4gdWlkPSJDPWFyLCBPP
WFmaXAsIFNFUklBTE5VTUJFUj1DVUlUIDIwMjY3MzM1NTY4LCBDTj1wcmVzZW50YWNpb25wcm9jZXNzb
3IiIHNlcnZpY2U9InByZXNlbnRhY2lvbnByb2Nlc3NvciIgcmVnbWV0aG9kPSIyMiIgZW50aXR5PSIzM
zY5MzQ1MDIzOSIgYXV0aG1ldGhvZD0iY21zIj4KICAgICAgICAgICAgPHJlbGF0aW9ucz4KICAgICAgI
CAgICAgICAgIDxyZWxhdGlvbiByZWx0eXBlPSI0IiBrZXk9IjIwMjY3MzM1NTY4Ii8+CiAgICAgICAgI
CAgIDwvcmVsYXRpb25zPgogICAgICAgIDwvbG9naW4+CiAgICA8L29wZXJhdGlvbj4KPC9zc28+Cgo=";
String _upload_sign = "fw08JYAXZezAKpPjk58+YMARjipdh29IgkLNv6pqndV9fecW2R30c6TDPdqetJNhTV
BoIPKJNQgCdN2EHMGlepzDCG6blB7bJtHhVGYCbE2Uejq0d8FiH+NFXk1cHhcFTVo0sODlMLthSLf0Vn
3+/g5RsDEvVbVqTd1UDzfNwNg=";
String _upload_representadoCuit = "20267335568";
PresentacionFileB2B _upload_presentacion = new PresentacionFileB2B();
_upload_presentacion.setPresentacionDataHandler( new DataHandler( new FileDataSource(aFile) ) );
_upload_presentacion.setFileName("951616F0159.dat");
try {
long _upload__return = port.upload(_upload_token, _upload_sign, _upload_representadoCuit,
_upload_presentacion);
System.out.println("upload.result[" + _upload__return + "]");
Página 10 de 13
AFIP – SDG SIT – DI INTR
ws presentacionprocessor – Manual para el Desarrollador
Fecha: 18/7/13
} catch (Exception_Exception e) {
System.out.println("Expected exception: Exception has occurred.");
System.out.println(e.toString());
}
System.out.println("Invoking dummy...");
try {
gov.afip.osiris.seti.presentacion.domain.DummyReturn _dummy__return = port.dummy();
System.out.println("dummy.result[appserver=" + _dummy__return.getAppserver() + ", authserver=" +
_dummy__return.getAuthserver() + ", dbserver=" + _dummy__return.getDbserver() );
} catch (Exception_Exception e) {
System.out.println("Expected exception: Exception has occurred.");
System.out.println(e.toString());
}
System.exit(0);
}
}
Página 11 de 13
AFIP – SDG SIT – DI INTR
ws presentacionprocessor – Manual para el Desarrollador
4.2.
Fecha: 18/7/13
Cliente Visual Basic .NET
Module Module1
Sub Main()
Dim ws As New ConsoleApplication1.presentacionService.PresentacionProcessorMTOMServiceClient
Dim dummyReturn As New ConsoleApplication1.presentacionService.dummyReturn
Dim presentacion As New ConsoleApplication1.presentacionService.presentacionFileB2B
Dim nroTx As New Long
Dim token As String
Dim sign As String
dummyReturn = ws.dummy()
Console.WriteLine("dummy response[" + dummyReturn.appserver.ToString + "]")
Console.ReadKey()
token = " PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9I
nllcyI/Pgo8c3NvIHZlcnNpb249IjIuMCI+CiAgICA8aWQgdW5pcXVlX2lkPSIzMjQ1MDQxODkzIiBzc
mM9IkNOPXdzYWFob21vLCBPPUFGSVAsIEM9QVIsIFNFUklBTE5VTUJFUj1DVUlUIDMzNjkzNDUwMjM5I
iBnZW5fdGltZT0iMTM2NjIyNTQwNCIgZXhwX3RpbWU9IjEzNjYyNjg2NjQiLz4KICAgIDxvcGVyYXRpb
24gdmFsdWU9ImdyYW50ZWQiIHR5cGU9ImxvZ2luIj4KICAgICAgICA8bG9naW4gdWlkPSJDPWFyLCBPP
WFmaXAsIFNFUklBTE5VTUJFUj1DVUlUIDIwMjY3MzM1NTY4LCBDTj1wcmVzZW50YWNpb25wcm9jZXNzb
3IiIHNlcnZpY2U9InByZXNlbnRhY2lvbnByb2Nlc3NvciIgcmVnbWV0aG9kPSIyMiIgZW50aXR5PSIzM
zY5MzQ1MDIzOSIgYXV0aG1ldGhvZD0iY21zIj4KICAgICAgICAgICAgPHJlbGF0aW9ucz4KICAgICAgI
CAgICAgICAgIDxyZWxhdGlvbiByZWx0eXBlPSI0IiBrZXk9IjIwMjY3MzM1NTY4Ii8+CiAgICAgICAgI
CAgIDwvcmVsYXRpb25zPgogICAgICAgIDwvbG9naW4+CiAgICA8L29wZXJhdGlvbj4KPC9zc28+Cgo="
sign = " fw08JYAXZezAKpPjk58+YMARjipdh29IgkLNv6pqndV9fecW2R30c6TDPdqetJNhTV
BoIPKJNQgCdN2EHMGlepzDCG6blB7bJtHhVGYCbE2Uejq0d8FiH+NFXk1cHhcFTVo0sODlMLthSLf0Vn
3+/g5RsDEvVbVqTd1UDzfNwNg="
presentacion.fileName = "215983F0713.0cbf6f2f45d83adf11cd9d72b3992bdb.b64"
presentacion.presentacionDataHandler =
FileToByteArray("c:\Temp\cxf\215983F0713.0cbf6f2f45d83adf11cd9d72b3992bdb.b64")
nroTx = ws.upload(token, sign, "20267335568", presentacion)
Console.WriteLine("nroTx[" + nroTx.ToString + "]")
Console.ReadKey()
End Sub
Public Function FileToByteArray(ByVal _FileName As String) As Byte()
Dim _Buffer() As Byte = Nothing
Try
' Open file for reading
Dim _FileStream As New System.IO.FileStream(_FileName, System.IO.FileMode.Open,
System.IO.FileAccess.Read)
' attach filestream to binary reader
Dim _BinaryReader As New System.IO.BinaryReader(_FileStream)
' get total byte length of the file
Dim _TotalBytes As Long = New System.IO.FileInfo(_FileName).Length
' read entire file into buffer
_Buffer = _BinaryReader.ReadBytes(CInt(Fix(_TotalBytes)))
' close file reader
_FileStream.Close()
_FileStream.Dispose()
_BinaryReader.Close()
Página 12 de 13
AFIP – SDG SIT – DI INTR
ws presentacionprocessor – Manual para el Desarrollador
Fecha: 18/7/13
Catch _Exception As Exception
' Error
Console.WriteLine("Exception caught in process: {0}", _Exception.ToString())
End Try
Return _Buffer
End Function
End Module
Página 13 de 13
Descargar