# Error llamando API con metodo POST

**URL:** <https://foros.velneo.com/t/error-llamando-api-con-metodo-post/11409>\
**Category:** Velneo\
**Created:** [21 Diciembre, 2023 12:39 UTC](https://foros.velneo.com/t/error-llamando-api-con-metodo-post/11409 "2023-12-21T12:39:26Z")\
**Posts on this page:** 7\
**Page:** 1

<div class="post-metadata">

**Author:** ![davidpm](https://avatars.discourse-cdn.com/v4/letter/d/a87d85/32.png) [@davidpm](https://foros.velneo.com/u/davidpm)\
**Post date:** [21 Diciembre, 2023 12:39 UTC](https://foros.velneo.com/t/error-llamando-api-con-metodo-post/11409/1 "2023-12-21T12:39:26Z")

</div>

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](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.

 ![Captura de pantalla Api](https://canada1.discourse-cdn.com/flex035/uploads/velneo/original/2X/7/7f4871ee3088df9508241b53e2e21d81707004bd.jpeg)  
 ![Captura de pantalla II](https://canada1.discourse-cdn.com/flex035/uploads/velneo/original/2X/8/8428043e452bbae40c9b0c14ad2fee015c298643.jpeg)

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

Adjunto captura de pantalla.

 ![Llamada APi](https://canada1.discourse-cdn.com/flex035/uploads/velneo/original/2X/b/bf6d864cc1f371747aeb3374f70fb51399305dbc.jpeg)

Un saludo.

---

<div class="post-metadata">

**Author:** ![pporlan](https://yyz1.discourse-cdn.com/flex035/user_avatar/foros.velneo.com/pporlan/32/5254_2.png) [@pporlan](https://foros.velneo.com/u/pporlan)\
**Post date:** [21 Diciembre, 2023 14:47 UTC](https://foros.velneo.com/t/error-llamando-api-con-metodo-post/11409/2 "2023-12-21T14:47:31Z")

</div>

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

---

<div class="post-metadata">

**Author:** ![davidpm](https://avatars.discourse-cdn.com/v4/letter/d/a87d85/32.png) [@davidpm](https://foros.velneo.com/u/davidpm)\
**Post date:** [21 Diciembre, 2023 17:16 UTC](https://foros.velneo.com/t/error-llamando-api-con-metodo-post/11409/3 "2023-12-21T17:16:49Z")

</div>

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.

---

<div class="post-metadata">

**Author:** ![pacosatu](https://yyz1.discourse-cdn.com/flex035/user_avatar/foros.velneo.com/pacosatu/32/5131_2.png) [@pacosatu](https://foros.velneo.com/u/pacosatu)\
**Post date:** [21 Diciembre, 2023 21:53 UTC](https://foros.velneo.com/t/error-llamando-api-con-metodo-post/11409/4 "2023-12-21T21:53:55Z")

</div>

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é

---

<div class="post-metadata">

**Author:** ![davidpm](https://avatars.discourse-cdn.com/v4/letter/d/a87d85/32.png) [@davidpm](https://foros.velneo.com/u/davidpm)\
**Post date:** [10 Enero, 2024 10:21 UTC](https://foros.velneo.com/t/error-llamando-api-con-metodo-post/11409/5 "2024-01-10T10:21:01Z")

</div>

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](https://foros.velneo.com/uploads/short-url/wN3UO72daBVs6vx9mLdOd2d6X5E.pdf) (31,3 KB)

---

<div class="post-metadata">

**Author:** ![davidpm](https://avatars.discourse-cdn.com/v4/letter/d/a87d85/32.png) [@davidpm](https://foros.velneo.com/u/davidpm)\
**Post date:** [10 Enero, 2024 10:21 UTC](https://foros.velneo.com/t/error-llamando-api-con-metodo-post/11409/6 "2024-01-10T10:21:55Z")

</div>

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

---

<div class="post-metadata">

**Author:** ![pacosatu](https://yyz1.discourse-cdn.com/flex035/user_avatar/foros.velneo.com/pacosatu/32/5131_2.png) [@pacosatu](https://foros.velneo.com/u/pacosatu)\
**Post date:** [10 Enero, 2024 14:36 UTC](https://foros.velneo.com/t/error-llamando-api-con-metodo-post/11409/7 "2024-01-10T14:36:06Z")

</div>

Hola davidpm.

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

```auto
// 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é
