Sandbox y producción
Son dos ambientes separados, cada uno con su dominio, sus cuentas y sus llaves. La API es la misma en los dos: lo que pruebas en sandbox funciona igual en producción cambiando la dirección y la llave.
Los dos ambientes
- Sandbox
-
API en
api.staging.oden.tax, panel enapp.staging.oden.tax. Ambiente de pruebas del PAC. Pagos con tarjetas de prueba de Stripe. Lo que se timbra aquí no existe para el SAT. - Producción
-
API en
api.oden.tax, panel enapp.oden.tax. El PAC de verdad. Cada factura es un CFDI con efectos fiscales y consume un timbre de tu plan.
Una llave de sandbox no sirve en producción ni al revés: son cuentas distintas. Y un certificado de prueba cargado en
producción se acepta, pero cada timbrado regresa csd_not_from_sat, porque el PAC de
verdad sólo firma con sellos que el SAT expidió.
Empezar en sandbox
-
Entra a
app.staging.oden.taxcon tu correo. Se crea una cuenta de prueba. - Da de alta el emisor con uno de los contribuyentes de prueba de abajo: RFC, razón social, régimen y código postal tal como aparecen.
-
Elige cualquiera de los dos planes; los dos incluyen la API. En sandbox se paga con la tarjeta de prueba
4242 4242 4242 4242, cualquier fecha futura y cualquier CVC; no se cobra nada. - Crea una llave en Cuenta → API, sección Llaves de API.
-
Sube el certificado de ese mismo RFC desde el panel o por la API, y timbra contra
api.staging.oden.tax.
Emisores y certificados de prueba
Son los CSD que el SAT publica para el ambiente de pruebas de los PAC. No son secretos: la contraseña de las dos
llaves es 12345678a. El RFC del emisor tiene que ser el del certificado; si no, la
subida se rechaza con wrong_taxpayer. Vencen en mayo de 2027.
EKU9003173C9
- Razón social
- ESCUELA KEMPER URGATE
- Régimen
- 601 · General de Ley Personas Morales
- Código postal
- 20928
- Contraseña
12345678a
MISC491214B86
- Razón social
- CECILIA MIRANDA SANCHEZ
- Régimen
- 612 · Personas Físicas con Actividades Empresariales y Profesionales
- Código postal
- 80290
- Contraseña
12345678a
Receptores de prueba
El sandbox revisa al receptor contra la lista real del SAT: razón social, código postal y régimen tienen que coincidir, igual que en producción. Un RFC inventado o un nombre con otra escritura se rechaza. Estos tres timbran:
| tax_id | legal_name | tax_regime | postal_code | cfdi_use |
|---|---|---|---|---|
| CUSC850516316 | CESAR OSBALDO CRUZ SOLORZANO | 612 | 45638 | G03 |
| MISC491214B86 | CECILIA MIRANDA SANCHEZ | 612 | 80290 | G03 |
| EKU9003173C9 | ESCUELA KEMPER URGATE | 601 | 20928 | G03 |
XAXX010101000, público en general, también sirve, pero sólo en una factura global
(con global_information): nosotros ponemos el nombre, el régimen 616, el uso S01 y
el código postal del emisor. En una factura normal el SAT lo rechaza con global_needs_generic_recipient.
Cancelar en sandbox
Una factura recién timbrada todavía no se puede cancelar: el SAT de pruebas tarda unos minutos en registrarla, y mientras tanto la cancelación contesta que no la encuentra. Espera unos minutos y vuelve a intentarlo.
En sandbox ninguna cancelación pide la aceptación del receptor, sin importar el total. La respuesta llega como solicitada y en menos de media hora pasa a cancelada definitiva. Aceptar o rechazar una cancelación sólo se ve en producción.
Los timbres
Un timbre se consume cuando el PAC certifica el comprobante. Un rechazo no lo gasta, y por eso vale la pena que lo que esté mal se rechace lo antes posible: antes de llegar al PAC revisamos el uso del CFDI contra el régimen del receptor, que la fecha caiga dentro de las 72 horas y el XML contra el esquema del SAT.
Los del sandbox no se cobran. Es el lugar para probar los casos que dan miedo: una nota de crédito, una cancelación con motivo 01, una factura en dólares.
Timbrar es síncrono
Timbrar no pasa por una cola. POST /v1/mx/invoices
sostiene la petición hasta que el
PAC contesta y devuelve el comprobante timbrado, o el motivo por el que no. Cuando la llamada regresa, la respuesta
es definitiva, salvo dos. pac_unavailable
dice que el PAC no contestó y pudo haber
timbrado: reintenta con la misma llave y le preguntamos antes de timbrar otra vez. Y un
201
con status: "stamping"
y sin uuid
es lo que contesta la misma llave mientras la primera llamada sigue esperando al
PAC: vuelve a preguntar en unos segundos.
Eso implica un timeout generoso de tu lado. Damos hasta 45 segundos al PAC; en la práctica contesta en dos o tres. Si tu cliente corta antes que nosotros, la factura pudo haberse timbrado sin que lo sepas, y para eso está la llave de idempotencia. Lo que sí llega después es la respuesta del SAT a una cancelación, y para eso están los webhooks.