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/authenticationDonde {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
idTokenen 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 HTTP | Descripción | Solución |
|---|---|---|
| 401 | Credenciales inválidas | Verifica que el email y contraseña sean correctos |
| 401 | Token expirado | Solicita un nuevo token de acceso |
| 403 | API Key inválida | Verifica que la API Key sea correcta y esté activa |
| 403 | Permisos insuficientes | Contacta al soporte para revisar los permisos de tu cuenta |
Buenas prácticas
- Almacenamiento seguro: No almacenes las credenciales en código fuente ni en repositorios públicos.
- Refresco de token: Implementa un mecanismo para refrescar el token antes de que expire.
- Manejo de errores: Implementa un manejo robusto de errores de autenticación en tu aplicación.
- Rate limiting: Respeta los límites de solicitudes por segundo según tu plan contratado.