Descarga masiva de CFDIs

Es posible descargar un grupo de CFDIs de dos maneras distintas:

  1. Archivos CFDI (XML) compromidos en un ZIP
    Se descarga un archivo ZIP con los archivos de tu consulta.

  2. Arreglo de JSON
    Cuando te interesa los valores del XML para realizar algún procesamiento, esta operación parsea cada XML en un JSON para facilitar la lectura.

Importante:

1. Archivos XML comprimidos en un ZIP

Una vez que ya tienes definidos tus parámetros de consulta, sólo necesitas mandar esos mismos parámetros al endpoint /attachments/export

curl "https://sync.paybook.com/v1/attachments/export" \
-d 'PARÁMETROS_DE_CONSULTA' \
-H "Authorization: api_key api_key=API_KEY, id_user=ID_USER" \
-H "Content-Type: application/json" \
-H "X-Http-Method-Override: GET" \
-X POST \
-o output.zip

Ejemplo de parámetros de consulta, véase paginación.

{
    "id_credential": "ID_CREDENTIAL",
    "keywords": "KEYWORDS", //(opcional)
    "dt_transaction_from": "FROM_DATE",
    "dt_transaction_to": "TO_DATE",
    "skip": "SKIP",
    "limit": "LIMIT"
}

2. Arreglo de JSON

Tus parámetros de consulta también los puedes utilizar para descargar todas las facturas resultantes a formato JSON, sólo necesitas enviarlos al endpoint /attachments/json

curl "https://sync.paybook.com/v1/attachments/json" \
-d 'PARÁMETROS_DE_CONSULTA' \
-H "Authorization: api_key api_key=API_KEY, id_user=ID_USER" \
-H "Content-Type: application/json" \
-H "X-Http-Method-Override: GET" \
-X POST 

Ejemplo de resultado



{
	"rid": "cb036508-0f44-43dd-9d69-fbd4baf27d89",
	"code": 200,
	"errors": null,
	"status": true,
	"message": null,
	"response": [
		{
			"id_attachment": "5716ed5123428393108b4587",
			"id_user": "585051220b212a90058b78a3",
			"id_external": null,
			"file": "EE198AA41DDF4BF99949DBC35F29083A.xml",
			"json": {
				"CFDI:COMPROBANTE": {
					"LUGAREXPEDICION": "Celaya, Gto",
					"MONEDA": "MXN",
					"TIPOCAMBIO": "1.00",
					"CERTIFICADO": "MIIEwjCCA6qgAwIBAgIUMDAwMDEwMDAwMDAzMDUwMjk3MzgwDQYJKoZIhvcNAQEFBQAwggGKMTgwNgYDVQQDDC9BLkMuIGRlbCBTZXJ2aWNpbyBkZSBBZG1pbmlzdHJhY2nDs24gVHJpYnV0YXJpYTEvMC0GA1UECgwmU2VydmljaW8gZGUgQWRtaW5pc3RyYWNpw7NuIFRyaWJ1dGFyaWExODA2BgNVBAsML0FkbWluaXN0cmFjacOzbiBkZSBTZWd1cmlkYWQgZGUgbGEgSW5mb3JtYWNpw7NuMR8wHQYJKoZIhvcNAQkBFhBhY29kc0BzYXQuZ29iLm14MSYwJAYDVQQJDB1Bdi4gSGlkYWxnbyA3NywgQ29sLiBHdWVycmVybzEOMAwGA1UEEQwFMDYzMDAxCzAJBgNVBAYTAk1YMRkwFwYDVQQIDBBEaXN0cml0byBGZWRlcmFsMRQwEgYDVQQHDAtDdWF1aHTDqW1vYzEVMBMGA1UELRMMU0FUOTcwNzAxTk4zMTUwMwYJKoZIhvcNAQkCDCZSZXNwb25zYWJsZTogQ2xhdWRpYSBDb3ZhcnJ1YmlhcyBPY2hvYTAeFw0xNDA5MDIyMDAxNTRaFw0xODA5MDIyMDAyMzRaMIG1MRYwFAYDVQQDEw1KVUFOIEJBVVRJU1RBMRYwFAYDVQQpEw1KVUFOIEJBVVRJU1RBMRYwFAYDVQQKEw1KVUFOIEJBVVRJU1RBMQswCQYDVQQGEwJNWDEpMCcGCSqGSIb3DQEJARYaZnJ1dGVyaWFiYXV0aXN0YUBnbWFpbC5jb20xFjAUBgNVBC0TDUJBSlU1NjA3MTdKNTYxGzAZBgNVBAUTEkJBWEo1NjA3MTdIR1RUWE4wMjCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAh+3biwqgyPStvTGH2KW+KYCcA+ssEUVLbEIHCPxIgcrsPbFloEZFesSqVZW+AW2e1wTHFZ9j8PxovZM8GW4f+2Y8qwXoFCePk/dElarEdRGI6jtUoDxXGAolhWYNA4g1NNVt6YbLOh12uLDC1ySwo5e9F+17+eMO2rRWVShIqukCAwEAAaN2MHQwDAYDVR0TAQH/BAIwADALBgNVHQ8EBAMCA9gwEQYJYIZIAYb4QgEBBAQDAgWgMB0GA1UdJQQWMBQGCCsGAQUFBwMEBggrBgEFBQcDAjAlBgNVHREEHjAcgRpmcnV0ZXJpYWJhdXRpc3RhQGdtYWlsLmNvbTANBgkqhkiG9w0BAQUFAAOCAQEAg5TqqFa6htzCOrFffmYDrlXU/nwFCtMfkrSZfRG2MCv1KYAcZSSGxY3Wkc6kprHrnEY58ZhCqwz5eCjb8g18i+BwQaONwhVQty98c7pgUai8bmA0dp41+XrOrJoUwEWlzzB63GiVgQEWanCoD7k0VVgMBwmGi70JwTv3XCo6uC1tcb9N/jS/SFHDpPtIsJAlOFVBq9vjO8yD5hf3PYxcZP0PspaooXx9KjH45jowCQUz9a489CnJkrhn/nZgiwqs3AhJIfSgIhBS/MOHYVfqi3G2W4FThmnjQw+AM7UH2v09gD2bgX3tnok6/zTTaSQA8gXhxjC6+7UZXC90+IT2UA==",
					"DESCUENTO": "0",
					"FECHA": "2014-09-23T13:19:00",
					"FOLIO": "cfdi1411496374309",
					"FORMADEPAGO": "Pago en una sola exhibici?n",
					"METODODEPAGO": "efectivo",
					"NOCERTIFICADO": "00001000000305029738",
					"SELLO": "NXHNB/7qhd2AUHElGQ/H/DI/wc0dOIzbOoTkDrUmrFVXP1Kx5fR6+xFrvVobn7ceI6w614jOwuScxxX62fVOFJbkXQxTcO4MM7XXL7/FrnPvqCoVs0Dn4vuSZ3mLtXebeu7mGuwaPqBr1VE6ZraGRUlSPWEqrdR125lpXFXrY8Q=",
					"SUBTOTAL": "1.000000",
					"TIPODECOMPROBANTE": "ingreso",
					"TOTAL": "1.000000",
					"VERSION": "3.2",
					"XMLNS:CFDI": "http://www.sat.gob.mx/cfd/3",
					"XMLNS:XSI": "http://www.w3.org/2001/XMLSchema-instance",
					"XSI:SCHEMALOCATION": "http://www.sat.gob.mx/cfd/3 http://www.sat.gob.mx/sitio_internet/cfd/3/cfdv32.xsd",
					"CFDI:EMISOR": {
						"NOMBRE": "JUAN BAUTISTA",
						"RFC": "BAJU560717J56",
						"CFDI:DOMICILIOFISCAL": {
							"CALLE": "Villa Verde",
							"CODIGOPOSTAL": "38020",
							"COLONIA": "Villas de la Hacienda",
							"ESTADO": "Guanajuato",
							"LOCALIDAD": "Celaya",
							"MUNICIPIO": "Celaya",
							"NOEXTERIOR": "208",
							"PAIS": "M?xico"
						},
						"CFDI:EXPEDIDOEN": {
							"CALLE": "Villa Verde",
							"CODIGOPOSTAL": "38020",
							"COLONIA": "Villas de la Hacienda",
							"ESTADO": "Guanajuato",
							"LOCALIDAD": "Celaya",
							"MUNICIPIO": "Celaya",
							"NOEXTERIOR": "208",
							"PAIS": "M?xico"
						},
						"CFDI:REGIMENFISCAL": {
							"REGIMEN": "Personas F?sicas: R?gimen de Incorporaci?n Fiscal"
						}
					},
					"CFDI:RECEPTOR": {
						"NOMBRE": "ACCEM SERVICIOS EMPRESARIALES SC",
						"RFC": "AAA010101AAA",
						"CFDI:DOMICILIO": {
							"CALLE": "Villa Verde 208",
							"CODIGOPOSTAL": "38020",
							"COLONIA": "Villas de la Hacienda",
							"ESTADO": "Guanajuato",
							"MUNICIPIO": "Celaya",
							"NOEXTERIOR": "200",
							"PAIS": "M?xico"
						}
					},
					"CFDI:CONCEPTOS": {
						"CFDI:CONCEPTO": {
							"CANTIDAD": "1",
							"DESCRIPCION": "Prueba",
							"IMPORTE": "1.000000",
							"UNIDAD": "0",
							"VALORUNITARIO": "1.000000"
						}
					},
					"CFDI:IMPUESTOS": {
						"TOTALIMPUESTOSRETENIDOS": "0.000000",
						"TOTALIMPUESTOSTRASLADADOS": "0.000000"
					},
					"CFDI:COMPLEMENTO": {
						"TFD:TIMBREFISCALDIGITAL": {
							"FECHATIMBRADO": "2014-09-23T13:19:50",
							"UUID": "EE198AA4-1DDF-4BF9-9949-DBC35F29083A",
							"NOCERTIFICADOSAT": "00001000000203220518",
							"SELLOCFD": "NXHNB/7qhd2AUHElGQ/H/DI/wc0dOIzbOoTkDrUmrFVXP1Kx5fR6+xFrvVobn7ceI6w614jOwuScxxX62fVOFJbkXQxTcO4MM7XXL7/FrnPvqCoVs0Dn4vuSZ3mLtXebeu7mGuwaPqBr1VE6ZraGRUlSPWEqrdR125lpXFXrY8Q=",
							"SELLOSAT": "cC/8NZPkyg9OVW0aA3VblJSe2AzN1wJae5yv2mXR320yrz7p1TrK6Wn2SOidu+lSV5pmaI6IXUPOf2S8xvG7E9/1FX2mSQnxEN9fJ9X/s3zoaF4EWdimj1dU/Hkgjq4bTSVC5nrCJ7bxuYPdipHPeBLopwon4LQhM0iiOzSpARk=",
							"VERSION": "1.0",
							"XMLNS:TFD": "http://www.sat.gob.mx/TimbreFiscalDigital",
							"XSI:SCHEMALOCATION": "http://www.sat.gob.mx/TimbreFiscalDigital http://www.sat.gob.mx/TimbreFiscalDigital/TimbreFiscalDigital.xsd"
						}
					}
				}
			}
		}
	]
}
1 me gusta

estoy haciendo varias pruebas con los filtros, en las fechas del 1 enero 2014 al 31 de enero de 2014 y me exporta 5000 facturas como si no estuviera tomando en cuenta los filtros de fecha:
curl “https://sync.paybook.com/v1/attachments/export” -d ‘{“id_credential”:"—",“dt_transaction_from”:“1388534400”,“dt_transaction_to”:“1391212799”,“keywords”:“emitidas,vigente”}’ -H “Authorization: api_key api_key=—, id_user=—” -H “Content-Type: application/json” -H “X-Http-Method-Override: GET” -X POST -o emitidas-f-ene2014.zip

Hola, veo que estás invocando el endpoint con el método POST.

Podrías intentarlo con el método GET?

Saludos!

estoy viendo el json desde el navegador y me deberia mostrar solo de enero 2014 y me muestra de junio de ese año:
https://sync.paybook.com/v1/attachments/json?api_key=XXXXXXXXXXXXXXXX&id_user=XXXXXXXXXX&id_credential=XXXXXXXXXXX&dt_transaction_from=1388534400&dt_transaction_to=1391212799&keywords=emitidas,vigente&limit=2

Hola, una recomendación.

Por razones de seguridad no es recomendable que publiques tu API key ya que puede ser usado por alguien más para visualizar o bien agregar más credenciales.

Estamos revisando el caso, por lo pronto ocultamos tu post anterior.

Te envío documentación de como trabajar con sesiones para evitar estar enviando tu API key en cada petición.

https://www.paybook.com/sync/docs#es&sessions

Saludos

Hola que tal.

Podrías intentar de nuevo invocando el método /v1/attachments/json. La descarga de attachments aún no terminaba y es por eso que se mostraban otros diferentes. Vamos a trabajar en una validación para que no se de este caso.

Saludos

ya termino de descargar? y la validación?

Hola buenos días,

Si ya terminó de descargar, lo de la validación lo estaremos trabajando para liberarlo en próximas versiones.

Saludos!

Una solución temporal y no tan óptima es lanzar la petición al endpoint sin mandar los keywords. Eso filtrará los attachments de forma correcta en el rango de fechas. Cómo quiera seguimos trabajando para que funcionen correctamente los filtros.

Saludos

Cluadio por favor en cuanto quede avisame para seguir haciendo pruebas ya que es un tema que nos urge.

Hola buenas tardes.

Claro que si lo consideraremos y les avisamos cuando haya quedado resuelto.

Podrían apoyarnos replicando el mismo problema con otra credencial? Y nos pueden facilitar el RID para tener varios escenarios de prueba?

Saludos

rid = be426ab-72d8-46bf-9443-7d9c70d00b2a

Hola Humberto,

Ya revisamos el caso con nuestro equipo y nos comentan que si va tomar tiempo resolver esta situación. Tenemos una solución alterna que sería consultando directamente el endpoint de transacciones con los filtros que requieres.

/v1//transactions?id_user=xxxxx&
token=xxxxx&
id_credential=xxxxxxx&
dt_transaction_from=xxxxx&
dt_transaction_to=xxxxx&
keywords=xxxxx,xxxxx

Este te regresará una respuesta así

[
	{
		id_transaction: "571b9a9278480663568b4553",
		id_user: "12f98da7785306ef028b4572",
		id_external: "12f98da7785306ef028b4572",
		id_site: "24de2130784806d7028b4583",
		id_site_organization: "56de2121784806a90a8b4586",
		id_site_organization_type: "56cf4f5b634806cf028b4582",
		id_account: "571b9a9828480617468b4593",
		id_account_type: "180d3aa93b8e778e0d630094",
		id_currency: "730d3aa93b8e8e0d630093",
        attachments:[
        {
           id_attachment:  "571b9a9828480617468b4594" 
           id_attachment_type:  "56bcdfca784806d1378b4567" 
           is_valid:  1 
           file:  "0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A.xml" 
           mime:  "text/xml" 
            url:  "/attachments/571b9a9828480617468b4594" 
        }
        ],
		is_disable: 0,
		description: "TRANSACTION DESCRIPTION",
		amount: 12,
		currency: "MXN",
		dt_transaction: 1456984850,
		dt_refresh: 1461288945
	},
	{
		id_transaction: "741b9a9278480663128b4592",
		id_user: "12f98da7785306ef028b4545",
		id_external: "12f98da7785306ef028b4545",
		id_site: "24de2130784806d70282b2393",
		id_site_organization: "56de2121784806a82a8b4574",
		id_site_organization_type: "56cf4f8b634806cf028b4513",
		id_account: "571b9a9828480617468b2593",
		id_account_type: "180d3aa93b8e778e0d630093",
		id_currency: "730d3aa93b8e8e0d630093",
        attachments:[
        {
           id_attachment:  "571b9a9828480617468b4595" 
           id_attachment_type:  "56bcdfca784806d1378b4567" 
           is_valid:  1 
           file:  "0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A.xml" 
           mime:  "text/xml" 
            url:  "/attachments/571b9a9828480617468b4595" 
        }
        ],
		is_disable: 0,
		description: "TRANSACTION DESCRIPTION",
		amount: 1743,
		currency: "MXN",
		dt_transaction: 1456986760,
		dt_refresh: 1456986765
	}
	..
]

La respuesta de las transacciones traerán un arreglo de attachments (en caso que estas tengan) y de ahí se pueden hacer las peticiones individuales a estos.

/v1/attachments/:id_attachment?
id_user=xxxxxxx&
token=xxxxxxx

Información del XML parseado a JSON

/v1/attachments/:id_attachment/extra?
id_user=xxxxxxx&
token=xxxxxxx

Por lo pronto es la única manera que tenemos para filtrar las transacciones y sus respectivos attachments.

Como descargo los cfdi de un RFC???

con cual de estos metodos?

https://sync.paybook.com/v1/attachments/json

/v1/attachments/

/v1//transactions???’

Urge por favor

Hola Felipe.

Veo que en tu petición no estás enviando el parámetro de autenticación que es el api_key o bien el token que generas con la sesión. Aquí dejo la referencia a la documentación en donde menciona los parámetros a enviar al endpoint /v1/attachments

https://www.paybook.com/sync/docs/API#es&endpoints.attachments

La autenticación es necesaria para consultar información relacionada a los siguientes objetos.

credentials
accounts
transactions
attachments

La descarga de los CFDI’s de un RFC son mediante el mismo endpoint de attachments una vez que son descargados de la fuente de información en este caso el SAT.

Si deseas que se te asigne un ingeniero contamos con planes de soporte personalizados los cuales los puedes revisar con el área comercial.

Saludos

Gracias por la respuesta, donde puedo o con quien veo lo del ing?

En un minuto te mando el request que hacemos

Claudio, este es el request de lo que estamos haciendo:

https://sync.paybook.com/v1/attachments/json

jsonResponse = Unirest.post(url)
.header(“X-Http-Method-Override”, “GET”)
.header(“Authorization”, token)
.body(json_data.ToString())
.asJson();

Mi pregunta, fue cual de los métodos, que puse en el primer post son los que funcionan para la descarga ??

Hola, el método de /v1/attachments.

Tal y como lo menciono en el post de arriba.

Cómo sugerencia puedes hacer la petición directamente con un POSTMAN para probar antes de insertarla en tu código.

Saludos

Hola Claudio, cuando lo hago por POSTMAN o por mi código recibo la siguiente respuesta
{
“rid”: “ab417ec2-bc72-40ca-84df-dc1fb6ea58d9”,
“code”: 200,
“errors”: null,
“status”: true,
“message”: null,
“response”: []
}

Endpoint
https://sync.paybook.com/v1/attachments/json?