chuvadenovembro Posted July 28, 2011 Share Posted July 28, 2011 (edited) Pessoal, Hoje eu enchi o saco do Carlo para fazer um um Hook bem bacana p/ whmcs, foram várias horas de testes até que a condição atual do script parece estar 100% funcional. Objetivo do script: No meu caso, estou utilizando em conjunto com um departamento de ticket para receber comprovantes de pagamento. Como alguns clientes tem dificuldade de acessar o painel de controle, eu habilitei este departamento para abrir ticket automaticamente com o envio de emails. E vamos supor que o site do cliente esteja suspenso, e mesmo sendo um cliente inadimplente, você crie a facilidade do serviço ser reativado automaticamente com a abertura do ticket. O cliente precisa mencionar no ticket o domínio que está suspenso para que o script faça uma verificação e identifique o domínio do cliente e faça a remoção da suspensão. Exemplo: Titulo do ticket = Irrelevante Texto do ticket: Cara, pelo amor de deus, esqueci de fazer o pagamento, preciso que meu site volte a funcionar quanto antes, estou enviando o comprovante do deposito feito na sua conta, o site é meusite.com.br Assim que o cliente abrir o ticket, o hook vai funcionar e vai remover a suspensão do cliente e o mais interessante "temporariamente" Sendo assim, acredito que clientes que fazem deposito bancario, podem simplesmente enviar um email em vez de ficar no anonimato por ter dificuldade de acessar o painel de cliente. Vamos a instalação: Salve este codigo em PHP com o nome "liberarConta.php" <?php function liberarConta($vars) { if($vars['deptid'] == '1'){ /* * 1: Qualquer um que enviar o e-mail com um domínio irá ser liberado. * 0: O domínio só será liberado se o cliente for realmente dono do domínio */ $liberar = '1'; function pegaUrl($texto){ $pattern = '/[a-zA-Z0-9\.-]*\.[a-z]{2,}/'; preg_match_all($pattern, $texto, $url); foreach($url[0] as $key => $value){ if(checkdnsrr($value)) $retorno[] = $value; } return $retorno; } $dominio = pegaUrl($vars['message']); $userid = $vars['userid']; $t = count($dominio); if($t > 0){ $c = 1; $sql = ''; foreach($dominio as $key){ if($t == $c) $sql .= "domain LIKE '%". $key ."%'"; else $sql .= "domain LIKE '%". $key ."%' OR "; $c++; } include("../../dbconnect.php"); if($liberar == 0) $sqlComando = "SELECT id FROM tblhosting WHERE userid='".$userid."' AND (" . $sql . ")"; else if($liberar == 1) $sqlComando = "SELECT id FROM tblhosting WHERE " . $sql; $query_dominios = mysql_query($sqlComando) or die (mysql_error()); while($query_dominios_while = mysql_fetch_assoc($query_dominios)){ $url = "http://seusite/whmcs/includes/api.php"; # URL to WHMCS API file $username = "seu login do whmcs"; # Admin username goes here $password = "sua senha do whmcs"; # Admin password goes here $postfields["username"] = $username; $postfields["password"] = md5($password); $postfields["action"] = "moduleunsuspend"; #action performed by the API:Functions $postfields["accountid"] = $query_dominios_while['id']; $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_TIMEOUT, 100); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, $postfields); $data = curl_exec($ch); curl_close($ch); $data = explode(";",$data); foreach ($data AS $temp) { $temp = explode("=",$temp); $results[$temp[0]] = $temp[1]; } if ($results["result"]=="success") { function somar_dias($data, $dias) { $data = explode("-", $data); $resultado = date("Y-m-d", mktime(0, 0, 0, $data[1], $data[2]+$dias, $data[0])); return $resultado; } mysql_query("UPDATE tblhosting SET overideautosuspend='on', overidesuspenduntil='".somar_dias(date("Y-m-d"), 5)."'") or die (mysql_error()); //mail('emailparaverificarbug@email.com.br', 'Debug', 'Sucesso - '.$postfields["accountid"]); } else { $erro = "The following error occured: ".$results["message"]; //mail('emailparaverificarbug@email.com.br', 'Debug', $erro); } } } } } add_hook("TicketOpen", 1, "liberarConta"); ?>[/PHP] Você deve configurar algumas linhas no script: Linha 5 = Coloque o ID do departamento que vai aceitar os emails para remover a suspensão da conta (estou utilizando o departamento com ID 1) [PHP] if($vars['deptid'] == '1'){[/PHP] Linha 11 = Utilize 0 para receber solicitação de desbloqueio de clientes cadastrados ou 1 para qualquer ticket aberto [PHP] $liberar = '1';[/PHP] Linhas 54, 55 e 56 = A url da API do whmcs, Login e senha do whmcs [PHP] $url = "http://seusite/whmcs/includes/api.php"; # URL to WHMCS API file $username = "seu login do whmcs"; # Admin username goes here $password = "sua senha do whmcs"; # Admin password goes here [/PHP] Linha 84 = Definir o numero de dias para remoção temporaria da suspensão. (Está marcado com 5 dias) [PHP] mysql_query("UPDATE tblhosting SET overideautosuspend='on', overidesuspenduntil='".somar_dias(date("Y-m-d"), 5)."'") or die (mysql_error());[/PHP] Linhas 85 e 88 = Email para debug [PHP] //mail('emailparaverificarbug@email.com.br', 'Debug', 'Sucesso - '.$postfields["accountid"]);[/PHP] [PHP] //mail('emailparaverificarbug@email.com.br', 'Debug', $erro);[/PHP] Depois envie o arquivo para: http://seusite/whmcs/includes/hooks/ Então teste para verificar se está tudo ok Bom, como foi o Carlo que desenvolveu o script, peço que tire o escorpião do bolso e faça uma doação p/ ele :D Como o codigo ta aberto, se alguém souber de alguma complementação p/ melhorá-lo, acho que vai ajudar. Segue o link dele: (aceita pagseguro, paypal e Moip) Mdulo MoIP Pagamento Direto com Retorno Automtico Grátis. Edited July 29, 2011 by chuvadenovembro █ AtarWeb.com.br • Hospedagem de Site + SSL Grátis █ Revenda de Hospedagem CPanel e DirectAdmin SSD + SSL Grátis Link to comment Share on other sites More sharing options...
chuvadenovembro Posted July 29, 2011 Author Share Posted July 29, 2011 Tópico atualizado :) █ AtarWeb.com.br • Hospedagem de Site + SSL Grátis █ Revenda de Hospedagem CPanel e DirectAdmin SSD + SSL Grátis Link to comment Share on other sites More sharing options...
Rhuan Posted July 29, 2011 Share Posted July 29, 2011 Obrigado por compartilhar... Como entro em contato com o Carlo ? Link to comment Share on other sites More sharing options...
McGuyver Posted July 29, 2011 Share Posted July 29, 2011 (edited) Caramba!!! Parabéns aos dois... Implementação fantástica... Tenho certeza que ajudará muito à todos! Muito Obrigado por compartilharem. Farei os testes e implementarei aqui e assim que possível farei a doação para ele! Tenho uma pequena sugestão: -Que tal definir as variáveis no começo do arquivo para ficar mais fácil para editar os parâmetros e depois utilizar essas variáveis dentro do arquivo? Valeu! Edited July 29, 2011 by McGuyver Link to comment Share on other sites More sharing options...
chuvadenovembro Posted July 30, 2011 Author Share Posted July 30, 2011 Obrigado por compartilhar... Como entro em contato com o Carlo ? Então Rhuan, Ele é usuário que do forum, fez modulos do pagseguro, moip, moip e autologin, acredito que em breve deve ver este tópico e passar o contato p/ tu. Caramba!!! Parabéns aos dois... Implementação fantástica... Tenho certeza que ajudará muito à todos! Muito Obrigado por compartilharem. Farei os testes e implementarei aqui e assim que possível farei a doação para ele! Tenho uma pequena sugestão: -Que tal definir as variáveis no começo do arquivo para ficar mais fácil para editar os parâmetros e depois utilizar essas variáveis dentro do arquivo? Valeu! Logico que pensei nisso também McGuyver, mas acho que ao terminar o código depois de diversos erros e acertos, ele preferiu não arriscar hauauahuahua Em alguns testes que eu fiz, o script mudava drasticamente o comportamento do whmcs, em dois dos casos, o operador de suporte logava, e tinha acesso ao full admin, em outro, os emails que o cron de converter email em ticket não era capaz de remove-los e a cada rodada do cron, novos tickets eram criados heheheheh Com este funcional, mesmo sem ter os parametros ajustaveis no topo do script, funciona 100% sem apresentar nenhuma anomalia (pelo menos até onde testei :P ) mas eu testei bastante e não detectei nenhum problema. Assim que fizer os testes comente novamente p/ dar o veredito final sobre o funcionamento do script :P █ AtarWeb.com.br • Hospedagem de Site + SSL Grátis █ Revenda de Hospedagem CPanel e DirectAdmin SSD + SSL Grátis Link to comment Share on other sites More sharing options...
Carlo Schneider Posted July 30, 2011 Share Posted July 30, 2011 Obrigado por compartilhar... Como entro em contato com o Carlo ? msn: carloschneider@live.com Ou via MP :D Caramba!!! Parabéns aos dois... Implementação fantástica... Tenho certeza que ajudará muito à todos! Muito Obrigado por compartilharem. Farei os testes e implementarei aqui e assim que possível farei a doação para ele! Tenho uma pequena sugestão: -Que tal definir as variáveis no começo do arquivo para ficar mais fácil para editar os parâmetros e depois utilizar essas variáveis dentro do arquivo? Valeu! Vou arrumar as variaveis pra facilitar pro pessoal :D Link to comment Share on other sites More sharing options...
Carlo Schneider Posted July 30, 2011 Share Posted July 30, 2011 Só pra lembrar, acho que o Chuva não comentou, mas é preciso utilizar o cron que transforma e-mails em ticket, já que o sistema funciona a partir do ticket criado. :D Link to comment Share on other sites More sharing options...
chuvadenovembro Posted March 2, 2012 Author Share Posted March 2, 2012 Eu tenho o habito de postar alguns tutoriais ou dicas nos foruns principalmente p/ poder utilizar no futuro, p/ mim é como armazenar nas nuvens hehehehe Hoje não foi diferente, precisei utilizar este hook (pois não tinha ele mais no meu whmcs) e recorri ao forum. :) █ AtarWeb.com.br • Hospedagem de Site + SSL Grátis █ Revenda de Hospedagem CPanel e DirectAdmin SSD + SSL Grátis Link to comment Share on other sites More sharing options...
ronnysantana Posted March 8, 2012 Share Posted March 8, 2012 Seria interessante o código identificar anexo, seria possível? Acho que ficaria interessante Link to comment Share on other sites More sharing options...
Guest Posted October 8, 2012 Share Posted October 8, 2012 Alguém está utilizando na 5.1.2? Link to comment Share on other sites More sharing options...
Recommended Posts