Crafy
Account
Cargando...
Documentación para desarrolladores
La autenticación en la API de Crafy Account se maneja mediante el envío de credenciales en las consultas, las cuales son utilizadas para iniciar sesión en nuestros servidores.
Dependiendo del método de la API que sea consultado se requerirán ciertas credenciales de acceso.
() Existen tres clases y dos tipos de credenciales:
Nunca reveles las credenciales a los usuarios finales y no las compartas con nadie
Dependiendo del método de la API que consultes tendrás que enviar uno o más Tipos de credenciales.
GET parameters
POST parameters
POST parameters
Un Time Access Token es un token hash basado en tiempo que se genera con la Time Access Token Password (o TATP por sus siglas) y cambia cada 30 segundos.
Solo los servidores de Crafy Account y tú conocen la Time Access Token Password, por lo que son los únicos capaces de generar el Time Access Token correspondiente al período de tiempo actual.
Cada vez que envíes un Time Access Token los servidores de Crafy Account corroborarán que sea correcto para permitir el acceso.
Nunca reveles un Time Access Token ni un Time Access Token Password a nadie
Debes enviar el Time Access Token actual en el campo "api_credentials_tat" por el método POST de la consulta.
Pseudocódigo - Generar el TAT actual
interval = 30
time_access_token_password = '000000-wWEjGo-000000-drVbAf-000000-RLmtWV'
curr_time = getUnixTimeInSeconds()
multiplier = round(curr_time / interval)
mult_time = multiplier * interval
decoded_tat = time_access_token_password + '+' + mult_time
current_tat = sha256(decoded_tat)
PHP - Clase principal
class TimeAccessToken {
// Time Access Token (TAT)
public $interval = 30;
public $password;
function __construct($interval, $password){
if ($interval > 0 AND !empty($password)) {
$this->interval = $interval;
$this->password = $password;
return true;
} else {
throw new Exception('TimeAccessToken ERROR: $interval must be higher than zero and $password must be not empty.');
return false;
}
}
public function getToken($regression=0){
$curr_time = time();
$multiplier = round($curr_time / $this->interval);
$mult_time = $multiplier * $this->interval;
$mult_time = $mult_time - ($regression * $this->interval);
$decoded_tat = $this->password . '+' . $mult_time;
$hash = hash('sha256', $decoded_tat);
return $hash;
}
public function verifyToken($token, $allowed_regressions=0){
$result = false;
for ($i=0; $i <= $allowed_regressions; $i++) {
$iToken = $this->getToken($i);
if ($iToken === $token) {
$result = true;
continue;
}
}
return $result;
}
}
PHP - Generar el TAT actual
$interval = 30;
$password = '000000-wWEjGo-000000-drVbAf-000000-RLmtWV';
$TATClass = new TimeAccessToken($interval, $password);
$current_tat = $TATClass->getToken();
JavaScript - Generar el TAT actual
No reveles un Time Access Token ni un Time Access Token Password en el lado del cliente
async function generateTAT(interval, password) {
var curr_time = Math.floor(Date.now() / 1000);
var multiplier = Math.round(curr_time / interval);
var mult_time = multiplier * interval;
var decoded_tat = password + '+' + mult_time;
const encoder = new TextEncoder();
const data = encoder.encode(decoded_tat);
const hashBuffer = await crypto.subtle.digest('SHA-256', data);
const hashArray = Array.from(new Uint8Array(hashBuffer));
const hashHex = hashArray.map(byte => byte.toString(16).padStart(2, '0')).join('');
return hashHex;
}
var interval = 30;
var password = '000000-wWEjGo-000000-drVbAf-000000-RLmtWV';
var current_tat = await generateTAT(interval, password);