Error llamando API con metodo POST

Estoy intentando hacer una llamada en JavaScript a la api para obtener un Token.

El EndPoint que uso es: https://integra-servicio.mapa.gob.es/wsregcontratosaica/oauth/token

El error de estatus que recibo es el 401: El código de error HTTP 401 indica que la solicitud no ha sido autorizada. Este código se devuelve cuando el servidor requiere autenticación y la solicitud no incluye o proporciona credenciales válidas.

El errorCode que recibo es el 204: Código de error 204 generalmente se refiere a la respuesta exitosa sin contenido en el protocolo HTTP.

El usuario y la clave son correctos ya que los hemos probado en VSCode y nos ha funcionado correctamente.
El método que debe de usar es POST y los parámetros que recibe lo pongo en la captura de pantalla.


Me gustaría saber si tienen algún ejemplo hecho en javascript.

Adjunto captura de pantalla.

Un saludo.

Buenas tardes David,

Prueba a incluir al menos el header de content-type.

Mira en la pestaña Headers de postman por si hay definido algún otro header.

Un saludo

Pedro Porlán

Muchas Gracias. Con la ayuda de un compañero y mirando el proceso de vERP y Postman lo he conseguido solucionar. Al final ha sido basándome en vERP.

Hola davidpm.

No te quedes ahí.
Cuéntanos cuál era el problema y detalla cómo lo has resuelto.
Muchos usuarios del Foro no conocen vERP.

Seguro que la solución valdrá en el futuro para otros con el mismo problema.

Saludos
Paco Satué

1 me gusta

AL final me base en el script de vERP para hacer funcionar la llamada. Mediante un manejador le paso los parámetros correspondientes al script y el script ya se encarga de hacer la llamada correctamente. Yo lo estaba intentando hacer por mi cuenta pero en vERP esta ya hecho. Subo el archivo en formato PDF para el que lo quiera usar. Este texto habria que meterlo en un archivo script.
Api.pdf (31,3 KB)

Tienes toda la razón. Abajo pongo la solución. Gracias.

Hola davidpm.

Seguro que sirve a otros programadores.
Lo pongo aquí para facilitar el copia y pega.

// Importamos la clase XMLHttpRequest
importClass("XMLHttpRequest");
importClass("VFile");
var url = theRoot.varToString("URL");
var met = theRoot.varToString("MET");
var hea = theRoot.varToString("HEA");
var par = theRoot.varToString("PAR");
var bod = theRoot.varToString("BOD");
var cer = theRoot.varToString("CER");
var key = theRoot.varToString("KEY");
var clv = theRoot.varToString("CLV");
var pre = theRoot.varToString("PRE");
var err = 0;
// Declaramos el objeto XMLHttpRequest a utilizar
var xhr = new XMLHttpRequest();
if ("" !== cer) {
	xhr.withCredentials = true;
	xhr.setClientCertificate(cer, key, clv);
}
// Si tiene parametros, los agregamos a la URL
if ("" !== par) {
	try {
		var oJson = JSON.parse(par);
		var params = [];
		for (var i in oJson) {
			params.push(i + "=" + oJson[i]);
		}
		url += "?" + params.join("&");
	} catch (e) {
		alert("El JSON de los parametros esta mal formateado, debe verificarlo");
		err = 1;
	}
}
// Continuamos
if (0 === err) {
	// Seteamos la conexion
	xhr.open(met, url, false);
	// Si tiene headers, los agregamos
	if ("" !== hea) {
		try {
			var oJson = JSON.parse(hea);
			var params = [];
			for (var i in oJson) {
				xhr.setRequestHeader(i, oJson[i]);
			}
		} catch (e) {
			alert("El JSON de los headers esta mal formateado, debe verificarlo");
			err = 1;
		}
	}
	//Continuamos
	if (0 === err) {
		//Evaluamos si hay un pre-script para ejecutarlo
		if ("" !== pre) {
			eval(pre);
		}
		//Enviamos la consulta
		xhr.send(bod);
		//Esperamos a que responda
		while (4 !== xhr.readyState) {
			xhr.processEvents();
		}
		//Procesamos el retorno
		theRoot.setVar("STA", xhr.status.toString() || "");
		theRoot.setVar("STA_TXT", xhr.statusText || "");
		theRoot.setVar("RES_TXT", xhr.responseText || "");
		theRoot.setVar("RES_TYP", xhr.responseType || "");
		theRoot.setVar("RES_HEA", xhr.getAllResponseHeaders());
	}
}

Saludos
Paco Satué

1 me gusta