SAT - ¿Cómo saber si rfc y contraseña son correctos?

El POST a /credentials me regresa siempre 200 como si fueran correctas.

{"id_site": "59aefe28056f29793a58c091", "credentials": {"username": "wesddsrew", "password": "cdvdsvsvdvs"}}

me regresa

{
“rid”: “13c47a5a-60d2-4a50-b55c-0ca92c6daeb2”,
“code”: 200,
“errors”: null,
“status”: true,
“message”: null,
“response”: {
“id_credential”: “5b04410c0c212a466a8b4687”,
“id_job_uuid”: “5b04433e0c212a0b698b459d”,
“id_job”: “5b04433e0c212a0b698b459e”,
“username”: “w*******w”,
“ws”: “wss://sync.paybook.com/v1/status/5b04433e0c212a0b698b459e”,
“status”: “https://sync.paybook.com/v1/jobs/5b04433e0c212a0b698b459e/status”,
“twofa”: “https://sync.paybook.com/v1/jobs/5b04433e0c212a0b698b459e/twofa
}
}

Hola Patricio, cuando tú deseas obtener información del SAT lo primero que debes hacer es crear una credencial, éste evento generará una conexión con el SAT.

Al momento de crear una credencial el servicio realiza una primera validación, ésta validación obedece las reglas establecidas en el catálogo de sitios (https://sync.paybook.com/v1/catalogues/sites), para el caso del SAT:

{
			"id_site": "56cf5728784806f72b8b456f",
			"id_site_organization": "56cf4ff5784806152c8b4568",
			"id_site_organization_type": "56cf4f5b784806cf028b4569",
			"is_business": 1,
			"is_personal": 1,
			"name": "CIEC",
			"credentials": [
				{
					"name": "rfc",
					"type": "text",
					"label": "RFC",
					"required": true,
					"username": true,
					"token": false,
					"validation": null
				},
				{
					"name": "password",
					"type": "password",
					"label": "Clave CIEC",
					"required": true,
					"username": false,
					"token": false,
					"validation": null
				}
			]
}

Así, para que tu petición pueda ser procesada deberás hacerlo de la siguiente forma:

POST /credentials?token={TOKEN}
parameters

{
	id_site : "59aefe28056f29793a58c091",
	credentials : {
		rfc : "AAA010101AAA",
		password : "12345678a"
	}
}

(El siguiente body te regresará un error indicándo que hay un problema con las credenciales porque no estás enviando un parámetro requerido rfc)

{
	id_site : "59aefe28056f29793a58c091",
	credentials : {
		u : "AAA010101AAA",
		password : "12345678a"
	}
}

Hasta aquí todavía no se sabe si las credenciales pueden iniciar sesión en el SAT, esa información se obtiene siguiendo el status de la conexión.
Cuando tu creas una credencial en la respuesta se te entregan dos URLs status y ws (como fue el caso que publicaste). Ambos URL te sirven para dar seguimiento a la conexión que se estableció con el SAT la diferencia es que ws lo puedes utilizar para conectar un websocket. En ambos obtendrás una respuesta como la siguiente:

{
	"rid": "RID",
	"code": 200,
	"errors": null,
	"status": true,
	"message": null,
	"response": [
		{
			"code": 100
		},
		{
			"code": 101
		},
		{
			"code": 102
		},
		{
			"code": 201
		}
	]
}

Si el código final es un 401, significa que las credenciales a pesar de que se crearon de manera correcta NO PUDIERON INICIAR SESIÓN EN EL SAT por lo tanto, es necesario actualizar sus valores. (Para obtener información de otros códigos: https://www.paybook.com/sync/docs/API#es&response.code)

{
	"rid": "RID",
	"code": 200,
	"errors": null,
	"status": true,
	"message": null,
	"response": [
		{
			"code": 100
		},
		{
			"code": 401
		}
	]
}

Espero haber respondido a tu pregunta.

1 me gusta

Gracias, Miguel. Sí respondes a mi pregunta, sin embargo, podrías revisar los POSTS que hice el viernes a /credentials que no regresaron en 200? Estoy seguro que hice algunos que me regesaron “credenciales incorrectas” ya que sobre ese flujo basé mi implementación.
Gracias!

Hola Patricio, justamente fue la primera validación la que no pasó debido a que mandaste los siguientes parámetros:

{
	id_site : "59aefe28056f29793a58c091",
	credentials : {
		u : "AAA010101AAA",
		password : "12345678a"
	}
}

Cada que no envíes los parámetros establecidos en el catálogo de sitios, obtendrás un error similar a éste:

{
	rid:  "RID" 
	code:  400 
	errors:  null 
	status:  false 
	message:  "Missing credential: username" 
	response:  null 
}

El error sólo indica que no estás enviando los parámetros necesarios para crear la credencial.

Saludos.

Esto es inconveniente porque me estoy encontrando con el caso de que registro credenciales e inmediatamente checo el status de estas, ya que le tengo que indicar al cliente si sus credenciales son correctas o no inmediatamenete, y el endpoint de status me regresa 100 porque no ha llegado a 401 y las toma como buenas.
¿Hay manera de inmediatamente saber si las credenciales son válidas de manera inmediata como en cualquier forma de login?

Patricio

[edit] Mi solución por ahora ha sido poner un sleep de 10 segundos entre el registro de credenciales y check de status pero me parece no ideal en cuanto a experiencia del cliente (y supongo que podría tardar mas de 10 segudnos en alcanzar 401)

Algo que puedes hacer es implementar un websocket para que puedas ser notificado en tiempo real sobre cada cambio de estado, toda ésta lógica ya la integra nuestro Widget que puedes insertar de manera sencilla en tu App si es Web y puedes interactuar con él mediante una función callback (Paybook)

Respecto a los tiempos de respuesta me gustaría comentarte que están en función del sitio con el que se solicita la conexión, es por eso que no obtenemos el resultado de manera inmediata.

Saludos!

Buen dia! Tengo exactamente el mismo problema, decidi implementar el widget como mencionan.

Hay manera de recuperar la data que se capturó en el widget, en algun evento o algo??