Skip to content

Commit

Permalink
Merge pull request #37 from ralcorta/docs/improvement
Browse files Browse the repository at this point in the history
Docs/improvement
  • Loading branch information
ralcorta authored Oct 3, 2023
2 parents 7880c7f + 6e1c00a commit 25b31df
Show file tree
Hide file tree
Showing 3 changed files with 112 additions and 51 deletions.
110 changes: 60 additions & 50 deletions docs/.vitepress/config.mts
Original file line number Diff line number Diff line change
Expand Up @@ -30,74 +30,84 @@ export default defineConfig({
{ text: "🚀 Uso basico", link: "/basic-use" },
{ text: "⚙️ Configuración", link: "/config" },
{ text: "🧐 Comportamiento", link: "/behaviour" },
{
text: "🛠️ Servicios",
base: "/services",
items: [
{
text: "💸 Facturación electrónica",
link: "/facturacion_electronica",
},
{
text: "🔍 Consultas de padron",
collapsed: true,
items: [
{
text: "4️⃣ Alcance 4",
link: "/consulta_padron_alcance_4",
},
{
text: "5️⃣ Alcance 5",
link: "/consulta_padron_alcance_5",
},
{
text: "🔟 Alcance 10",
link: "/consulta_padron_alcance_10",
},
{
text: "1️⃣ 3️⃣ Alcance 13",
link: "/consulta_padron_alcance_13",
},
],
},
],
},
{
text: "☁️ Gestión de Credenciales",
link: "/credential_management",
},
],
},
{
text: "🛠️ Servicios",
base: "/services",
items: [
{
text: "💸 Facturación electrónica",
link: "/facturacion_electronica",
},
{
text: "📚 Obtener certificados",
base: "tutorial",
text: "🔍 Consultas de padron",
collapsed: true,
items: [
{
text: "Habilitar certificados de testing",
link: "/enable_testing_certificates",
},
{
text: "Obtener certificado de testing",
link: "/obtain-testing-certificate",
},
{
text: "Autorizar servicio web de testing",
link: "/authorize-test-web-service",
text: "4️⃣ Alcance 4",
link: "/consulta_padron_alcance_4",
},
{
text: "Habilitar administrador de certificados de producción",
link: "/enable-production-certificate-manager",
text: "5️⃣ Alcance 5",
link: "/consulta_padron_alcance_5",
},
{
text: "Obtención de certificado de producción",
link: "/obtain-production-certificate",
text: "🔟 Alcance 10",
link: "/consulta_padron_alcance_10",
},
{
text: "Autorizar web service de producción",
link: "/authorize-web-production-service",
text: "1️⃣ 3️⃣ Alcance 13",
link: "/consulta_padron_alcance_13",
},
],
},
],
},
{
text: "📚 Obtener certificados",
base: "tutorial",
items: [
{
text: "Habilitar certificados de testing",
link: "/enable_testing_certificates",
},
{
text: "Obtener certificado de testing",
link: "/obtain-testing-certificate",
},
{
text: "Autorizar servicio web de testing",
link: "/authorize-test-web-service",
},
{
text: "Habilitar administrador de certificados de producción",
link: "/enable-production-certificate-manager",
},
{
text: "Obtención de certificado de producción",
link: "/obtain-production-certificate",
},
{
text: "Autorizar web service de producción",
link: "/authorize-web-production-service",
},
],
},
{
text: "💬 FAQ",
base: "faq",
items: [
{
text: "❗Errores",
link: "/errors",
},
],
},
],

socialLinks: [
Expand Down
16 changes: 15 additions & 1 deletion docs/behaviour.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,4 +9,18 @@ Muchos otros paquetes resuelven este problema almacenando internamente estos tok

Nuestro paquete, en cambio, ofrece una solución versátil para gestionar estos tickets de acceso (TA que devuelve AFIP). Podés optar por manejar estos datos de manera personalizada, lo que te permite tomar esos datos y guardarlos en el lugar que más te convenga, como una base de datos, un sistema de almacenamiento S3 o cualquier otro proveedor de almacenamiento que prefieras.

Sin embargo, si prefieres que los tokens se gestionen automáticamente y se almacenen en el servidor, simplemente puedes no especificar ninguna configuración en el contexto de la clase Afip al instanciarla. El paquete se encargará de guardar los tokens en formato JSON dentro de la carpeta predeterminada (por defecto, en root/src/auth/tickets), aunque también tienes la flexibilidad de personalizar la ubicación de almacenamiento desde el constructor según tus necesidades.
Sin embargo, si prefieres que los tokens se gestionen automáticamente y se almacenen en el servidor, simplemente puedes no especificar ninguna configuración en el contexto de la clase Afip al instanciarla. El paquete se encargará de guardar los tokens en formato JSON dentro de la carpeta predeterminada (por defecto, en root/src/auth/tickets), aunque también tienes la flexibilidad de personalizar la ubicación de almacenamiento desde el constructor según tus necesidades.

### En resumen

- **Autenticación Crucial:** La autenticación a través del servicio WSAA de AFIP es esencial para acceder a sus servicios web.
- **Validez de Tokens:** Los tokens generados tienen una validez de hasta 12 horas.
- **Restricciones de Tiempo:** El servicio de autenticación tiene restricciones de tiempo:
- 2 minutos en producción
- 10 minutos en entornos de homologación (testing).
- **Necesidad de Almacenamiento:** Para futuros accesos, es necesario guardar las credenciales de manera segura.
- **Desafío en Entornos Serverless:** Algunos paquetes almacenan tokens internamente en archivos locales, lo que puede ser problemático en entornos serverless como AWS Lambda.
- **Solución Versátil:** Nuestro paquete ofrece una solución versátil para gestionar los tokens de acceso (TA) de AFIP.
- **Opción Personalizada:** Puedes optar por gestionar estos datos de manera personalizada y elegir dónde almacenarlos.
- **Almacenamiento Automático:** Si prefieres, el paquete puede encargarse del almacenamiento automático en el servidor.
- **Flexibilidad de Ubicación:** Tienes la flexibilidad de personalizar la ubicación de almacenamiento según tus necesidades desde el constructor.
37 changes: 37 additions & 0 deletions docs/faq/errors.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
# Errores Frecuentes

## ⚠️ Advertencia: Uso de la constante no definida SOAP_1_2 - asumida "SOAP_1_2"
Este problema ocurre cuando la extensión SOAP de PHP está desactivada. Para solucionarlo, debes habilitar la extensión SOAP en el archivo php.ini (Asegúrate de reiniciar Apache para aplicar los cambios).

## ❌ Error: (11002) El punto de venta no se encuentra habilitado para usar este WS. Consulta el método FEParamGetPtosVenta
Debes habilitar el punto de venta para que sea accesible desde los servicios web. Esto se hace desde la página de AFIP.

## 💥 Error Fatal: Uncaught Exception: SOAP Fault: ns1:coe.alreadyAuthenticated El CEE ya posee un TA válido para el acceso al WSN solicitado
Este error ocurre cuando ya se ha creado un Token de Acceso (TA) para el certificado que estás utilizando. Esto puede suceder si borras el archivo del Token y debes esperar un tiempo para obtener uno nuevo o si estás utilizando el mismo certificado en otro servidor o computadora. En este último caso, debes crear un certificado nuevo para el servidor que estás utilizando, ya que no se debe usar el mismo certificado en servidores diferentes.

## (10016) El número o la fecha del comprobante no se corresponden con el próximo a autorizar
Asegúrate de que en los campos CbteDesde y CbteHasta estés ingresando el número del siguiente comprobante a autorizar. La documentación de la librería te muestra cómo obtener el número del último comprobante. Además, la versión PRO incluye ejemplos para diferentes tipos de facturas. Este error también puede ocurrir si intentas enviar un comprobante con una fecha anterior a la del último comprobante enviado. Para solucionarlo, debes enviarlo con una fecha igual o posterior.

## 📜 Certificado no emitido por AC de confianza
Este error se produce cuando intentas utilizar certificados de prueba en modo producción o viceversa. Se soluciona cambiando los certificados por los correspondientes o cambiando el modo de la librería (modo de prueba o producción).

## ⚠️ Advertencia: openssl_pkcs7_sign(): error al obtener el certificado
Este error suele aparecer cuando se confunde el certificado con el CSR. Asegúrate de que la primera línea del certificado diga "--BEGIN CERTIFICATE--". Si encuentras algo diferente, ese no es el certificado correcto. Si este método no soluciona el problema, puedes generar un certificado nuevamente siguiendo los tutoriales en la página de AFIP.

## (600) Validación de Token: Error al verificar el hash: Validación de Hash: No se validó la firma digital
Este error suele aparecer al cambiar entre los modos de producción y prueba. Para solucionarlo, debes borrar el archivo .xml que se genera en la carpeta Afip_res correspondiente al servicio web al que intentas acceder.

## (600) Validación de Token: CUIT no aparece en la lista de relaciones
Este error ocurre cuando intentas usar la librería con un CUIT diferente al que se utilizó al generar el certificado. Para solucionarlo, debes utilizar el mismo CUIT.

## 🚫 Error 500
Este error aparece cuando hay un error en el código pero no se muestra cuál es el error real. Deberías agregar `error_reporting(E_ALL); ini_set("display_errors", "1");` en tu código para identificar el error exacto.

## (501) Error Interno de la Base de Datos
Este es un error interno de AFIP. La única solución es esperar a que lo solucionen.

## SOAP Fault: ns1:coe.notAuthorized Computador no autorizado a acceder al servicio
El problema radica en la falta de autorización para acceder al servicio web con el certificado que estás utilizando. Consulta el tutorial "Autorizar un Servicio Web de Prueba" para obtener instrucciones sobre cómo autorizar en modo de prueba y el tutorial "Autorizar un Servicio Web de Producción" para autorizar en modo de producción.

## Unable to verify the first certificate
Este problema surge cuando tus certificados no tienen permisos para acceder al servicio solicitado, como por ejemplo, al consultar el padrón 5. Para solucionarlo, es necesario otorgar permisos de acceso, de manera similar a cómo lo hicimos al habilitar el servicio de facturación desde el sitio de AFIP.

0 comments on commit 25b31df

Please sign in to comment.