SonarTrade Embed — Guía de integración
SonarTrade Embed — Guía de integración para ERPs
Embebe el snapshot de un importador chileno dentro de tu ERP de aduanas. Setup en 3 pasos.
1. Solicita tu partner secret
Escríbenos a contacto para registrar tu ERP como partner.
Recibirás un slug y un
secret (≥32 chars random).
Tu sistema firma URLs con el secret; nosotros validamos server-side.
2. Genera el token (server-side)
Formato: base64url(payload).base64url(HMAC-SHA256(secret, payload))
// Node.js
const crypto = require('crypto');
function makeToken(rut, partnerSlug, secret) {
const payload = JSON.stringify({
partner: partnerSlug,
rut: rut,
exp: Math.floor(Date.now() / 1000) + 3600, // 1h validity
nonce: crypto.randomBytes(8).toString('hex')
});
const b64 = (s) => Buffer.from(s).toString('base64')
.replace(/\+/g,'-').replace(/\//g,'_').replace(/=+$/,'');
const payloadB64 = b64(payload);
const sig = crypto.createHmac('sha256', secret)
.update(payloadB64)
.digest('base64')
.replace(/\+/g,'-').replace(/\//g,'_').replace(/=+$/,'');
return `${payloadB64}.${sig}`;
}
// PHP
function sonartrade_token($rut, $slug, $secret) {
$payload = json_encode([
'partner' => $slug,
'rut' => $rut,
'exp' => time() + 3600,
'nonce' => bin2hex(random_bytes(8))
]);
$b64 = fn($s) => rtrim(strtr(base64_encode($s), '+/', '-_'), '=');
$payloadB64 = $b64($payload);
$sig = $b64(hash_hmac('sha256', $payloadB64, $secret, true));
return "{$payloadB64}.{$sig}";
}
3. Embebe el iframe
<iframe
src="https://sonartrade.app/embed/importer/76109357-6?token=eyJ..."
width="100%" height="320"
frameborder="0"
loading="lazy">
</iframe>
Endpoints REST disponibles
| Endpoint | Descripción |
|---|---|
| /api/embed/importer/{rut}/snapshot | KPIs 12m: CIF, ops, productos, orígenes, growth YoY |
| /api/embed/importer/{rut}/recent?limit=20 | Últimas operaciones (5-50) |
Términos del pilot
- Free durante el pilot (3 meses), luego USD 15/agente-usuario/mes
- Quota default: 1.000 lookups/día por partner
- Cliente final debe consentir compartir su RUT con SonarTrade vía tu UI
- Datos cacheados 1h server-side