MSeller LogoECF MSeller
🔍
Integración

Autenticación API

Proceso de autenticación para usar la API de MSeller ECF

Autenticación API

Para interactuar con la API de MSeller ECF, es necesario implementar un proceso de autenticación que combina credenciales de usuario y una API Key. Este proceso te proporcionará un token de acceso que deberás utilizar en cada solicitud posterior.

Proceso de autenticación

1. Obtener un token de acceso

Para obtener un token de acceso, debes enviar una solicitud POST al endpoint de autenticación:

POST /{entorno}/customer/authentication

Donde {entorno} puede ser:

  • TesteCF (para pruebas)
  • CertCF (para certificación)
  • eCF (para producción)

Ejemplo de solicitud

{
  "email": "tu_email@ejemplo.com",
  "password": "tu_contraseña"
}

Ejemplo de respuesta exitosa

{
  "accessToken": "eyJraWQiOiJM...",
  "idToken": "eyJraWQiOiJ1dE...",
  "refreshToken": "eyJjdHkiOiJKV1QiL..."
}

Importante: Utilice el idToken en las solicitudes posteriores. Los tokens tienen una validez limitada. Después de este tiempo, deberás solicitar un nuevo token o utilizar el refreshToken.

2. Usar el token en las solicitudes

Una vez obtenido el token, debes incluir el idToken en todas las solicitudes subsecuentes junto con tu API Key:

Encabezados requeridos

Authorization: Bearer {tu_idToken}
X-API-KEY: {tu_api_key}

Ejemplos completos de autenticación

Solicitud de autenticación

curl -X POST \
  https://ecf.api.mseller.app/TesteCF/customer/authentication \
  -H 'Content-Type: application/json' \
  -d '{
    "email": "tu_email@ejemplo.com",
    "password": "tu_contraseña"
  }'

Solicitud a endpoints protegidos

curl -X GET \
  https://ecf.api.mseller.app/TesteCF/documentos-ecf?ecf=E123456789 \
  -H 'Authorization: Bearer eyJraWQiOiJ1dE...' \
  -H 'X-API-KEY: tu_api_key'

Solicitud de autenticación

// Usando fetch
async function authenticate() {
  const response = await fetch(
    "https://ecf.api.mseller.app/TesteCF/customer/authentication",
    {
      method: "POST",
      headers: {
        "Content-Type": "application/json",
      },
      body: JSON.stringify({
        email: "tu_email@ejemplo.com",
        password: "tu_contraseña",
      }),
    }
  );

  const data = await response.json();
  // Guardar tokens
  localStorage.setItem("idToken", data.idToken);
  return data;
}

Solicitud a endpoints protegidos

async function getDocument(ecf) {
  const idToken = localStorage.getItem("idToken");

  const response = await fetch(
    `https://ecf.api.mseller.app/TesteCF/documentos-ecf?ecf=${ecf}`,
    {
      method: "GET",
      headers: {
        Authorization: `Bearer ${idToken}`,
        "X-API-KEY": "tu_api_key",
      },
    }
  );

  return await response.json();
}

Solicitud de autenticación

using System;
using System.Net.Http;
using System.Text;
using System.Threading.Tasks;
using Newtonsoft.Json;

public class MSellerAuthClient
{
    private readonly HttpClient _client = new HttpClient();
    private string _idToken;

    public async Task<AuthResponse> Authenticate(string email, string password)
    {
        var payload = new
        {
            email,
            password
        };

        var content = new StringContent(
            JsonConvert.SerializeObject(payload),
            Encoding.UTF8,
            "application/json");

        var response = await _client.PostAsync(
            "https://ecf.api.mseller.app/TesteCF/customer/authentication",
            content);

        var responseJson = await response.Content.ReadAsStringAsync();
        var authResponse = JsonConvert.DeserializeObject<AuthResponse>(responseJson);

        _idToken = authResponse.IdToken;
        return authResponse;
    }

    public async Task<string> GetDocument(string ecf)
    {
        _client.DefaultRequestHeaders.Clear();
        _client.DefaultRequestHeaders.Add("Authorization", $"Bearer {_idToken}");
        _client.DefaultRequestHeaders.Add("X-API-KEY", "tu_api_key");

        var response = await _client.GetAsync(
            $"https://ecf.api.mseller.app/TesteCF/documentos-ecf?ecf={ecf}");

        return await response.Content.ReadAsStringAsync();
    }
}

public class AuthResponse
{
    public string AccessToken { get; set; }
    public string IdToken { get; set; }
    public string RefreshToken { get; set; }
}

Solicitud de autenticación

<?php
function authenticate() {
    $url = 'https://ecf.api.mseller.app/TesteCF/customer/authentication';
    $data = [
        'email' => 'tu_email@ejemplo.com',
        'password' => 'tu_contraseña'
    ];

    $options = [
        'http' => [
            'method' => 'POST',
            'header' => 'Content-Type: application/json',
            'content' => json_encode($data)
        ]
    ];

    $context = stream_context_create($options);
    $result = file_get_contents($url, false, $context);

    if ($result === false) {
        return null;
    }

    return json_decode($result, true);
}

// Guardar token en sesión
$auth = authenticate();
$_SESSION['idToken'] = $auth['idToken'];
?>

Solicitud a endpoints protegidos

<?php
function getDocument($ecf) {
    $url = 'https://ecf.api.mseller.app/TesteCF/documentos-ecf?ecf=' . urlencode($ecf);

    $options = [
        'http' => [
            'method' => 'GET',
            'header' =>
                "Authorization: Bearer " . $_SESSION['idToken'] . "\r\n" .
                "X-API-KEY: tu_api_key\r\n"
        ]
    ];

    $context = stream_context_create($options);
    $result = file_get_contents($url, false, $context);

    if ($result === false) {
        return null;
    }

    return json_decode($result, true);
}
?>

Manejo de errores de autenticación

Código HTTPDescripciónSolución
401Credenciales inválidasVerifica que el email y contraseña sean correctos
401Token expiradoSolicita un nuevo token de acceso
403API Key inválidaVerifica que la API Key sea correcta y esté activa
403Permisos insuficientesContacta al soporte para revisar los permisos de tu cuenta

Buenas prácticas

  1. Almacenamiento seguro: No almacenes las credenciales en código fuente ni en repositorios públicos.
  2. Refresco de token: Implementa un mecanismo para refrescar el token antes de que expire.
  3. Manejo de errores: Implementa un manejo robusto de errores de autenticación en tu aplicación.
  4. Rate limiting: Respeta los límites de solicitudes por segundo según tu plan contratado.