PHP code example of tepuilabs / mini-meli

1. Go to this page and download the library: Download tepuilabs/mini-meli library. Choose the download type require.

2. Extract the ZIP file and open the index.php.

3. Add this code to the index.php.
    
        
<?php
require_once('vendor/autoload.php');

/* Start to develop here. Best regards https://php-download.com/ */

    

tepuilabs / mini-meli example snippets




use Tepuilabs\MeliServices\MeliConfig;
use Tepuilabs\MeliServices\MeliServices;
use Tepuilabs\MeliServices\MeliScopes;

onfig = MeliConfig::forAuthorization(
    clientId: 'tu_client_id',
    clientSecret: 'tu_client_secret',
    redirectUri: 'http://localhost:9000',
    codeVerifier: $pkce['code_verifier'],
    codeChallenge: $pkce['code_challenge'],
    state: $state,
    scopes: MeliScopes::getOfflineAccess() // Incluye refresh tokens
);

$meli = new MeliServices($config);

// Generar URL de autorización
$authUrl = $meli->getAuthorizationUrl('MLA'); // Argentina
echo "Ve a: {$authUrl}";

// En tu callback
$code = $_GET['code'] ?? '';
$state = $_GET['state'] ?? '';

// Verificar state para seguridad
if ($state !== $savedState) {
    throw new Exception("State no coincide");
}

$config = new MeliConfig(
    clientId: 'tu_client_id',
    clientSecret: 'tu_client_secret',
    code: $code,
    redirectUri: 'http://localhost:9000',
    codeVerifier: $savedCodeVerifier // De la sesión
);

$meli = new MeliServices($config);
$response = $meli->generateAccessToken();

// Guardar tokens
$accessToken = $response->getAccessToken();
$refreshToken = $response->getRefreshToken();
$userId = $response->getUserId();

// Renovar token cuando expire
$response = $meli->refreshAccessToken($refreshToken);

// Actualizar tokens
$newAccessToken = $response->getAccessToken();
$newRefreshToken = $response->getRefreshToken(); // Siempre nuevo

// Crear instancia para API calls
$config = MeliConfig::forAuthorization(
    clientId: 'tu_client_id',
    clientSecret: 'tu_client_secret',
    redirectUri: 'http://localhost:9000'
);
$meli = new MeliServices($config);

// Hacer llamadas
$userProfile = $meli->get('/users/me', $accessToken);
$userItems = $meli->get("/users/{$userId}/items/search", $accessToken);
$categories = $meli->get('/sites/MLA/categories', $accessToken);

// Obtener detalles de la aplicación
$appDetails = $meli->getApplicationDetails($accessToken, $appId);

// Obtener aplicaciones autorizadas por el usuario
$userApps = $meli->getUserApplications($accessToken, $userId);

// Obtener usuarios que dieron permisos a tu app
$appGrants = $meli->getApplicationGrants($accessToken, $appId);

// Revocar autorización de un usuario
$result = $meli->revokeUserAuthorization($accessToken, $userId, $appId);

use Tepuilabs\MeliServices\MeliSites;

// Sitios disponibles
MeliSites::MLA; // Argentina
MeliSites::MLB; // Brasil
MeliSites::MLM; // México
MeliSites::MLC; // Chile
MeliSites::MCO; // Colombia
MeliSites::MPE; // Perú
MeliSites::MLU; // Uruguay
MeliSites::MLV; // Venezuela

// Obtener información del sitio
$siteInfo = MeliSites::getSite('MLA');
$domain = MeliSites::getDomain('MLA');
$name = MeliSites::getName('MLA');
$flag = MeliSites::getFlag('MLA');

use Tepuilabs\MeliServices\MeliScopes;

// Scopes disponibles
MeliScopes::READ;           // Solo lectura
MeliScopes::WRITE;          // Lectura y escritura
MeliScopes::OFFLINE_ACCESS; // Incluye refresh tokens

// Obtener scopes predefinidos
$defaultScopes = MeliScopes::getDefault();        // read write
$offlineScopes = MeliScopes::getOfflineAccess();  // read write offline_access

// Validar scopes
$isValid = MeliScopes::isValid('read');
$hasOffline = MeliScopes::hasOfflineAccess($scopes);
$hasRead = MeliScopes::hasRead($scopes);
$hasWrite = MeliScopes::hasWrite($scopes);

// Generación automática
$pkce = MeliConfig::generatePkce();
// code_verifier: string aleatorio de 32 bytes
// code_challenge: hash SHA-256 del verifier, base64url encoded

$state = MeliConfig::generateState(); // 16 bytes aleatorios

// Validación automática de parámetros
$config = new MeliConfig(
    clientId: $clientId,
    clientSecret: $clientSecret,
    code: $code,
    redirectUri: $redirectUri,
    codeVerifier: $codeVerifier
);

if (!$config->isValid()) {
    throw new Exception("Configuración inválida");
}

try {
    $response = $meli->generateAccessToken();
} catch (GenericException $e) {
    echo "Error: " . $e->getMessage();
    echo "Código: " . $e->getCode();
}



use Tepuilabs\MeliServices\Exceptions\GenericException;
use Tepuilabs\MeliServices\MeliConfig;
use Tepuilabs\MeliServices\MeliServices;
use Tepuilabs\MeliServices\MeliScopes;

if (!isset($_GET['code'])) {
    $pkce = MeliConfig::generatePkce();
    $state = MeliConfig::generateState();

    $_SESSION['code_verifier'] = $pkce['code_verifier'];
    $_SESSION['state'] = $state;

    $config = MeliConfig::forAuthorization(
        clientId: $clientId,
        clientSecret: $clientSecret,
        redirectUri: $redirectUri,
        codeVerifier: $pkce['code_verifier'],
        codeChallenge: $pkce['code_challenge'],
        state: $state,
        scopes: MeliScopes::getOfflineAccess()
    );

    $meli = new MeliServices($config);
    $authUrl = $meli->getAuthorizationUrl('MLA');

    echo "Ve a: {$authUrl}";
    exit;
}

// Paso 2: Intercambiar código por token
try {
    $code = $_GET['code'];
    $state = $_GET['state'];

    // Verificar state
    if ($state !== $_SESSION['state']) {
        throw new Exception("State no coincide");
    }

    $config = new MeliConfig(
        clientId: $clientId,
        clientSecret: $clientSecret,
        code: $code,
        redirectUri: $redirectUri,
        codeVerifier: $_SESSION['code_verifier']
    );

    $meli = new MeliServices($config);
    $response = $meli->generateAccessToken();

    // Guardar tokens
    $_SESSION['access_token'] = $response->getAccessToken();
    $_SESSION['refresh_token'] = $response->getRefreshToken();
    $_SESSION['user_id'] = $response->getUserId();

    echo "¡Autenticación exitosa!";

} catch (GenericException $e) {
    echo "Error: " . $e->getMessage();
}