# Otro web service

### Requisitos previos

Para poder usar esta guía, primero necesitarás:

* [Integrar Afip SDK en tu proyecto](/readme.md#integracion)

***

En esta documentación solo encontrarás los web services de ARCA más usados, pero en la [Referencia de API](https://afipsdk.com/docs/api-reference/introduction/) podés encontrar ejemplos de código para usar cada método de todos los web services de ARCA.

{% embed url="<https://afipsdk.com/docs/api-reference/introduction/>" %}

En caso de no encontrar en la Referencia de la API el web service que necesitás, no dudes en [contactarnos](https://afipsdk.com/contact/).

***

Aquí abajo encontrarás algunos ejemplos genéricos para los lenguajes más utilizados.

{% tabs %}
{% tab title="Node" %}

```javascript
/**
 * Nombre del web service.
 * 
 * El nombre por el cual se llama al web service en AFIP.
 * Esto lo podes encontrar en el manual correspondiente. 
 * Por ej. el de factura electronica se llama 'wsfe', el de
 * comprobantes T se llama 'wsct'  
 **/
const servicio = 'wsct';

/**
 * Creamos el web service
 **/
const genericWebService = afip.WebService(servicio, options);

/**
 * Este es un ejemplo de como utilizar el wsct para
 * obtener el ultimo comprobante autorizado
 * 
 * Aqui veras como obtener un Token Authorizataion
 * para el web service que acabamos de crear y como 
 * ejecutar un request basico
 **/
(async () => {
	/**
	 * Obtenemos el Token Authorizataion
	 **/
	const ta = await genericWebService.getTokenAuthorization();
	
	/**
	 * Preparamos los datos que nos pide el web service
	 * 
	 * Este ejemplo es especifico para el wsct. En el manual
	 * del web service que quieras utilizar encontraras que 
	 * datos requiere cada metodo
	 **/
	const data = {
		'authRequest': { 
			'token': ta.token,
			'sign' : ta.sign,
			'cuitRepresentada' : afip.CUIT
		},
		'codigoTipoComprobante': 195,
		'numeroPuntoVenta': 1
	};

	/**
	 * Iniciamos la variable donde guardaremos el resultado
	 **/
	let result;
 
	 try {
		/**
		 * Ejecutamos la request al web service
		 * 
		 * consultarUltimoComprobanteAutorizado es un metodo
		 * de wsct, esto debes cambiarlo por el metodo que 
		 * quieras utilizar
		 **/
		result = await genericWebService.executeRequest('consultarUltimoComprobanteAutorizado', data);
 
		/**
		 * Seteamos el resultado en nuestra variable.
		 * 
		 * consultarUltimoComprobanteAutorizadoReturn es especifico
		 * de este metodo de este web service. Esto deberas adaptarlo
		 * al web service que estes integrando
		 **/
		result = result.consultarUltimoComprobanteAutorizadoReturn
 
		/**
		 * Checkeamos si devolvio error en el resultado.
		 * 
		 * arrayErrores es especifico de este web service. 
		 * Esto deberas adaptarlo al web service que estes integrando
		 **/
		if (typeof result.arrayErrores !== 'undefined') {
			err = Array.isArray(result.arrayErrores.codigoDescripcion) ? result.arrayErrores.codigoDescripcion[0] : result.arrayErrores.codigoDescripcion;

			throw new Error(`(${err.codigo}) ${err.descripcion}`, err.codigo);
		}
	 }
	 catch(error){
		/**
		 * Si hubo un error lo logeamos
		 **/
		console.error(error);
	 }
 
	/**
	 * Logeamos el resultado final
	 **/
	console.log(result);
})();
```

{% endtab %}

{% tab title="PHP" %}

```php
<?php

/**
 * Nombre del web service.
 * 
 * El nombre por el cual se llama al web service en AFIP.
 * Esto lo podes encontrar en el manual correspondiente. 
 * Por ej. el de factura electronica se llama 'wsfe', el de
 * comprobantes T se llama 'wsct'  
 **/
$servicio = 'wsct';

/**
 * Creamos el web service
 **/
$generic_web_service = $afip->WebService($servicio);


/**
 * Este es un ejemplo de como utilizar el wsct para
 * obtener el ultimo comprobante autorizado
 * 
 * Aqui veras como obtener un Token Authorizataion
 * para el web service que acabamos de crear y como 
 * ejecutar un request basico
 **/

/**
 * Obtenemos el Token Authorizataion
 **/
$ta = $generic_web_service->GetTokenAuthorization();

/**
 * Preparamos los datos que nos pide el web service
 * 
 * Este ejemplo es especifico para el wsct. En el manual
 * del web service que quieras utilizar encontraras que 
 * datos requiere cada metodo
 **/
$data = array(
	'authRequest' => array( 
		'token' => $ta->token,
		'sign' 	=> $ta->sign,
		'cuitRepresentada' 	=> $afip->CUIT
	),
	'codigoTipoComprobante' => 195,
	'numeroPuntoVenta' => 1
);

/**
 * Ejecutamos la request al web service
 * 
 * consultarUltimoComprobanteAutorizado es un metodo
 * de wsct, esto debes cambiarlo por el metodo que 
 * quieras utilizar
 **/
$result = $generic_web_service->ExecuteRequest('consultarUltimoComprobanteAutorizado', $data);

/**
 * Seteamos el resultado en nuestra variable.
 * 
 * consultarUltimoComprobanteAutorizadoReturn es especifico
 * de este metodo de este web service. Esto deberas adaptarlo
 * al web service que estes integrando
 **/
$result = $result->consultarUltimoComprobanteAutorizadoReturn;

/**
 * Checkeamos si devolvio error en el resultado.
 * 
 * arrayErrores es especifico de este web service. 
 * Esto deberas adaptarlo al web service que estes integrando
 **/
if (isset($result->arrayErrores)) {
	$err = is_array($result->arrayErrores->codigoDescripcion) ? $result->arrayErrores->codigoDescripcion[0] : $result->arrayErrores->codigoDescripcion;

	throw new Exception('('.$err->codigo.') '.$err->descripcion, $err->codigo);
}

/**
 * Mostramos por pantalla el resultado final
 **/
var_dump($result);
```

{% endtab %}

{% tab title="Ruby" %}

```ruby
# Nombre del web service.
#
# El nombre por el cual se llama al web service en AFIP.
# Esto lo podes encontrar en el manual correspondiente.
# Por ej. el de factura electronica se llama "wsfe", el de
# comprobantes T se llama "wsct"
servicio = "wsct"

# Creamos el web service
genericWebService = afip.webService(servicio)

# Este es un ejemplo de como utilizar el wsct para
# obtener el ultimo comprobante autorizado
#
# Aqui veras como obtener un Token Authorizataion
# para el web service que acabamos de crear y como
# ejecutar un request basico

# Obtenemos el Token Authorizataion
ta = genericWebService.getTokenAuthorization

# Preparamos los datos que nos pide el web service
#
# Este ejemplo es especifico para el wsct. En el manual
# del web service que quieras utilizar encontraras que
# datos requiere cada metodo
data = {
  "authRequest": {
    "token": ta["token"],
    "sign": ta["sign"],
    "cuitRepresentada": afip.CUIT
  },
  "codigoTipoComprobante": 195,
  "numeroPuntoVenta": 1
}

begin
  # Ejecutamos la request al web service
  #
  # consultarUltimoComprobanteAutorizado es un metodo
  # de wsct, esto debes cambiarlo por el metodo que
  # quieras utilizar
  result = genericWebService.executeRequest("consultarUltimoComprobanteAutorizado", data)

  # Mostramos el resultado
  puts result unless result["arrayErrores"]

  # Checkeamos si devolvio error en el resultado.
  #
  # arrayErrores es especifico de este web service.
  # Esto deberas adaptarlo al web service que estes integrando
  err = result["arrayErrores"]["codigoDescripcion"].is_a?(Array) ? result["arrayErrores"]["codigoDescripcion"][0] : result["arrayErrores"]["codigoDescripcion"]

  raise "(#{err["codigo"]}) #{err["descripcion"]}"
rescue => e
  # Mostramos el error
  puts e
end
```

{% endtab %}

{% tab title="Python" %}

```python
# Nombre del web service.
#
# El nombre por el cual se llama al web service en AFIP.
# Esto lo podes encontrar en el manual correspondiente.
# Por ej. el de factura electronica se llama "wsfe", el de
# comprobantes T se llama "wsct"
servicio = "wsct"

# Creamos el web service
genericWebService = afip.webService(servicio)

# Este es un ejemplo de como utilizar el wsct para
# obtener el ultimo comprobante autorizado
#
# Aqui veras como obtener un Token Authorizataion
# para el web service que acabamos de crear y como
# ejecutar un request basico

# Obtenemos el Token Authorizataion
ta = genericWebService.getTokenAuthorization()

# Preparamos los datos que nos pide el web service
#
# Este ejemplo es especifico para el wsct. En el manual
# del web service que quieras utilizar encontraras que
# datos requiere cada metodo
data = {
  "authRequest": {
    "token": ta["token"],
    "sign": ta["sign"],
    "cuitRepresentada": afip.CUIT
  },
  "codigoTipoComprobante": 195,
  "numeroPuntoVenta": 1
}

try:
  # Ejecutamos la request al web service
  #
  # consultarUltimoComprobanteAutorizado es un metodo
  # de wsct, esto debes cambiarlo por el metodo que
  # quieras utilizar
  result = genericWebService.executeRequest("consultarUltimoComprobanteAutorizado", data)['consultarUltimoComprobanteAutorizadoReturn']

  if result.get("arrayErrores"):

    # Checkeamos si devolvio error en el resultado.
    #
    # arrayErrores es especifico de este web service.
    # Esto deberas adaptarlo al web service que estes integrando
    err = result["arrayErrores"]["codigoDescripcion"][0] if type(result["arrayErrores"]["codigoDescripcion"]) in (tuple, list) else result["arrayErrores"]["codigoDescripcion"]

    raise Exception("(%s) %s" % (err["codigo"], err["descripcion"])) 

  # Mostramos el resultado
  print(result)

except Exception as e:
  # Mostramos el error
  print(e)

```

{% endtab %}

{% tab title=".NET" %}

```csharp
// Nombre del web service.
//
// El nombre por el cual se llama al web service en AFIP.
// Esto lo podes encontrar en el manual correspondiente.
// Por ej. el de factura electronica se llama "wsfe", el de
// comprobantes T se llama "wsct"
string servicio = "wsct";

// Creamos el web service
AfipWebService genericWebService = afip.WebService(servicio);

// Obtenemos el Token Authorization
var ta = await genericWebService.GetTokenAuthorizationAsync();

// Preparamos los datos que nos pide el web service
//
// Este ejemplo es especifico para el wsct. En el manual
// del web service que quieras utilizar encontraras que
// datos requiere cada metodo
var data = new Dictionary<string, object?>
{
    ["authRequest"] = new Dictionary<string, object?>
    {
        ["token"] = ta["token"],
        ["sign"] = ta["sign"],
        ["cuitRepresentada"] = afip.CUIT
    },
    ["codigoTipoComprobante"] = 195,
    ["numeroPuntoVenta"] = 1
};

try
{
    // Ejecutamos la request al web service
    //
    // consultarUltimoComprobanteAutorizado es un metodo
    // de wsct, esto debes cambiarlo por el metodo que
    // quieras utilizar
    var result = await genericWebService.ExecuteRequestAsync<Dictionary<string, object?>>("consultarUltimoComprobanteAutorizado", data);

    // Mostramos el resultado
    Console.WriteLine(JsonSerializer.Serialize(result));
}
catch (Exception ex)
{
    // Si hubo un error lo logeamos
    Console.Error.WriteLine(ex.Message);
}
```

{% endtab %}

{% tab title="API" %}
Es similar a llamar a otros web services

\
**Body**

**Endpoint**

<mark style="color:blue;">`POST`</mark> `https://app.afipsdk.com/api/v1/afip/requests`

**Ejemplo**

```json
{
    "environment": "dev",
    "method": "consultarUltimoComprobanteAutorizado",
    "wsid": "wsct",
    "params": {
        "authRequest": {
            "token": "{{token}}",
            "sign": "{{sign}}",
            "cuitRepresentada": "20409378472"
        },
        "codigoTipoComprobante": 195,
        "numeroPuntoVenta": 1
    }
}
```

{% endtab %}
{% endtabs %}


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.afipsdk.com/siguientes-pasos/web-services/otro-web-service.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
