LibreDTE / libredte-lib-core

LibreDTE: Biblioteca PHP (Núcleo)
https://lib-core.docs.libredte.cl
GNU Affero General Public License v3.0
194 stars 157 forks source link

Se agrega al header Content-Type al request #75

Closed dleo closed 2 years ago

dleo commented 2 years ago

Este cambio corrige el problema de respuesta de SII al envio de DTE con error por falta del archivo. Además se corrige el envio duplicado.

estebandelaf commented 2 years ago
'Content-Type: multipart/form-data'

¿En qué caso esto se requiere? Nosotros en la versión oficial no hemos visto el error mencionado o que sea necesario el cambio indicado.

for ($i=0; $i<=$retry; $i++) {

En este caso, es incorrecto un for <= si parte en 0. Ya que el objetivo de retry es hacer tanto envíos como retry indica. En realidad el nombre retry son los envíos, y no los reintentos, está mal el nombre de la variable. Si retry = 0, se deben efectivamente hacer 0 envíos (ese es el comportamiento esperado).

dleo commented 2 years ago

Revisando la documentación oficial del SII, encontramos que es requerido, hemos visto algunas respuestas de parte del SII, donde hace falta el archivo.

Este es un ejemplo según el SII:


POST /cgi_dte/UPL/DTEUpload HTTP/1.0^M
Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg,
application/vnd.ms-powerpoint, application/ms-excel,
application/msword, */*^M
Referer: {URL que referencia a upload Ej.
http://empresaabc.cl/test.html}^M
Accept-Language: es-cl^M
Content-Type: multipart/form-data: boundary={boundary data: Ej. ------
---------------------7d23e2a11301c4}^M
Accept-Encoding: gzip, deflate^M
User-Agent: Mozilla/4.0 (compatible; PROG 1.0; Windows NT 5.0; YComp
5.0.2.4)^M
Host: {Host Id. Ej: https://maullin.sii.cl}^M
Content-Length: {largo total de mensaje sin Req. Header. Ej.: 10240}^M
Connection: Keep-Alive^M
Cache-Control: no-cache^M
Cookie: TOKEN={Entregado por Autenticación. Ej.: YZD0II2ApZjlM}^M 
estebandelaf commented 2 years ago

El cambio no corresponde

Al existir adjuntos en la llamada a curl, automáticamente se añade el Content-Type a la cabecera de la solicitud. De hecho, ese campo, es obligatorio por el boundary que se debe incluir al enviar archivos adjuntos y lo añade curl automáticamente.

Este es un ejemplo de las cabeceras enviadas con la versión actual del código. Se puede ver que se añade automáticamente el Content-Type antes de hacer la consulta vía curl:

POST /cgi_dte/UPL/DTEUpload HTTP/1.1
Host: maullin.sii.cl
Accept: */*
User-Agent: Mozilla/4.0 (compatible; PROG 1.0; LibreDTE)
Referer: https://libredte.cl
Cookie: TOKEN=TOKEN-SII
Content-Length: 11267
Content-Type: multipart/form-data; boundary=------------------------5f27ce8700aebb79
Expect: 100-continue

Acá detalles para ver las cabeceras enviadas https://stackoverflow.com/questions/3164405/show-curl-post-request-headers-is-there-a-way-to-do-this