Utilizando a API do WHM para listar contas de clientes

Hoje em dia um dos gerenciadores de serviços de hospedagens mais famosos no mercado é o WHM(Web Host Manager), que é um sistema que permite que vendedores de hosts possam criar pacotes, contas e configurar o serviços de seus clientes.

É semelhante ao CPANEL, só que enquanto esse é voltado para o usufruto da hospedagem, o WHM é voltado para a parte de configurações. É no CPANEL que  criamos bancos de dados, contas de FTP, sub-domínios pastas e etc. No WHM é definido o domínio, espaço em disco, número de contas FTP, número de contas de email e o tráfego mensal de um determinado cliente.

E no post de hoje veremos como utilizar a API do WHM. Nesse tutorial criaremos uma interface que liste todas as contas criadas dentro do serviço de (re)venda de hospedagem.

Para isso, baixaremos uma classe chamada whm.php que está disponível em http://www.phpclasses.org . Como para baixar no site é preciso ser cadastrado(o cadastro é gratuito), eu facilito as coisas disponibilizando a classe nesse link. (Não se esqueça de retirar a extensão .inc do arquivo).

Pronto! Antes de começarmos a implementação é bom que você (re)vendedor de hospedagem acesse o seu painel WHM pois precisaremos de uma key que é gerada por ele. Sem essa key fica impossível acessar as informações do nosso gerenciador utilizando a API.

Para pegar essa key acesse o seu WHM, vai em Cluster/Remote Access -> Setup Remote Access Key e copie a chave (que está criptografada e é extremamente grande).

Feito isso vamos ao código.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
<?php
require_once('whm.php');
 
/* Instancia a classe */
$whm = new Whm();
 
/* Atenticação */
$whm->init('seudominio.com','usuario','sua_chave_criptografada');
 
/* Pega a lista de contas */
$accounts = $whm->listaccts();
?>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>Lista de contas do WHM</title>
</head>
<body>
<h1>Lista de contas do WHM</h1>
<table border="1">
   <tr>
       <td>Usuario</td>
       <td>Dominio</td>
       <td>Pacote</td>
   <tr>
<?php
  foreach ($accounts as $ac){
       echo "<tr>";
       echo "<td>". $ac["user"] ."</td>";
       echo "<td>". $ac["domain"] ."</td>";
       echo "<td>". $ac["package"] ."</td>";
       echo "</tr>";
  }
?>
</table>
</body>
</html>

No arquivo eu inclui a classe whm.php , a instanciei no objeto $whm e depois executei o método init que é o responsável pela autenticação. Nela devemos passar o host, o user e a key de administração do WHM.

Depois através do método listaccts eu recupero as informações de todas as contas que tenho cadastrado. Essa função me retorna um array com as informações. Array que eu percorro no corpo do documento HTML e os imprimo dentro de uma tabela.

Ponto final! Fácil né?

A API do WHM será assunto de futuros posts.

Espero que tenham gostado

Abs.

Siga-me no twitter: @rafaelwendel

É formado em Sistemas de Informação, pós-graduado em Sistemas de Banco de Dados e mestre em Educação com foco em Tecnologias Sociocomunitárias. Trabalha como professor de ensino técnico e tecnológico no Instituto Federal de Educação, Ciência e Tecnologia de São Paulo ministrando disciplinas nas áreas de programação, banco de dados, desenvolvimento de projetos e engenharia de software.

Posts relacionados

Comentários

  1. Cara, legal o topico! me ajudou muito… estou testando bastante coisas, me deu um baita ponta pé inicial, consegui fazer a ligação entre os 2 porem, não estou conseguindo ver o resultado com esse script, ele até faz o loop e conta certinho o numero de dominios cadastrados… porem as strings ficam em branco! o que poderá ser…pode me ajudar?

    Abraços!

    Parabens pelo trabalho

    1. Olá Sérgio, primeiramente obrigado pela visita aqui no blog.

      Bom, para depurar o seu codigo, dê um print_r($accounts) e verifique se ele está conseguindo pegar as informações usuário, dominio e pacote.

      Se estiver em branco, certifique-se que no seu WHM tenha clientes cadastrados e também se seus dados de acesso estão corretos.

      Qualquer coisa poste um comentário com o código que agente tenta dar uma analisada.

      Abs

  2. Rafael,
    Obrigado pela resposta, realizei o print_r, porem ele retorna as arrays vazias, porem tenho dominios cadastrados no painel, o estranho é que qualquer valor que busco do whm esta retornando vazia… a ligação esta correta ja que esta retornando a version correta do painel!
    Tem algum meio de contato online? Skype, msn?

    Abraços! Obrigado

  3. Muito bom o artigo! me ajudou bastante… so gostaria de saber como eu faco para mostrar se a conta ta suspensa ou normal???? tentei status e statusmsg e não consegui…

    flw

  4. Rafael consegui capturar os dados de um cliente do outro post, mas nesse tá dando o seguinte erro: “Warning: domdocument::domdocument() expects at least 1 parameter, 0 given in C:\xampp\htdocs\gerhospedagem\whm.php on line 191

    Fatal error: Call to undefined method domdocument::loadXML() in C:\xampp\htdocs\gerhospedagem\whm.php on line 192”

  5. Olá Rafael, primeiramente quero lhe parabeniza-lo pelo blog. E gostaria de saber se tem como vc me ajudar, em meu servidor está dando o erro a seguir:

    Warning: fsockopen() [function.fsockopen]: unable to connect to ssl://dnethost.com.br:2087 (Unable to find the socket transport “ssl” – did you forget to enable it when you configured PHP?) in C:\xampp\htdocs\dnethost\whm.php on line 47

    Warning: feof() expects parameter 1 to be resource, boolean given in C:\xampp\htdocs\dnethost\whm.php on line 105

    obrigado desde já 😀

  6. Olá Rafael, muito bom foi de grande ajuda..

    Fiz todos os passoas mas não está mostrando um dos dados, veja que o Espaço total em disco não mostra nada.

    Informações:

    Domínio: visaocontabil-to.com.br
    Email: nillo.ifto@hotmail.com
    Espaço total em disco:
    Espaço utilizado: 480M
    Plano: wwwcubi_minilight
    Conta: 10 Dec 17 14:18

    Aguardo sua colaboração

  7. Boa noite Rafael,

    Seria possível buscar dados da conta pelo domínio através dessa API?
    Como faria essa consulta?
    Seria algo do tipo:
    $whm->listaccts(meudominio.com);
    ???

    obrigada pela atenção!

Deixe um comentário

O seu endereço de e-mail não será publicado.