<?php 
$data = array('servToken' => array ());
$i = 0;
$base = getClientToken($bd_conn, $_POST["grant_type"], $_POST["client_secret"], $_POST["client_id"], $_POST["service"], $_POST["code"]);
if ($base["CLIENTE"] != "") {

    $token = sha1(get_id_unico());
    $date = date ( 'Y-m-d H:i:s' , strtotime ( '+30 minute' , strtotime (date("Y-m-d H:i:s"))));
    $date_delete = date ( 'Y-m-d H:i:s' , strtotime ( '-2 days' , strtotime (date("Y-m-d H:i:s"))));
    createToken($bd_conn,$base["CLIENTE"],$token,$date);
    deleteOldTokens($bd_conn,$date_delete);
    $data["servToken"] = array ( 
            "token_type" => "Bearer",
            "client_token" => $token,
            "time_valid" => '900'
    );
}elseif ($base["CLIENTE"] == "") {
    $data["servToken"] = array ( 
        "error" => "invalid_client",
        "error_description" => "Invalid client"
    );
}
mysqli_close($bd_conn);
header("Content-type: application/json; charset=utf-8");
echo json_encode($data);

//FUNCIONES=============================================
function getClientToken($bd, $grant_type, $client_secret, $client_id, $service, $code)
{
    $sql =  "   SELECT C.CLIENTE
                FROM API_CLIENTES C
                INNER JOIN API_ACCESS A ON C.CLIENTE = A.CLIENTE
                WHERE C.GRANT_TYPE = ? AND C.CLIENT_SECRET = ? AND C.CLIENT_ID = ? AND A.SERVICIO = ? AND A.SERV_KEY = ? ";
    $base = $bd->prepare($sql);
    $base->bind_param('sssss', $grant_type, $client_secret, $client_id, $service, $code);
    $base->execute();
    $result = mysqli_fetch_array($base->get_result());
    $base->close();
    return $result;
}
function createToken($bd,$cliente,$token,$date)
{
	$sql =  " INSERT INTO API_TOKEN (CLIENTE, TOKEN, BAJA) 
              VALUES ( ?, ?, ?)";
    $base = $bd->prepare($sql);
    $base->bind_param('sss', $cliente, $token, $date);
    $base->execute();
}
function deleteOldTokens($bd,$date_delete)
{
	$sql =  " DELETE FROM API_TOKEN 
              WHERE BAJA < ?";
    $base = $bd->prepare($sql);
    $base->bind_param('s', $date_delete);
    $base->execute();
}
function get_id_unico() 
{
	return date( "YmdHis" ) . sprintf( "%04d", rand( 0, 9999 ) );
}

?>