Guest User

Untitled

a guest
Jul 26th, 2017
277
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. <?php
  2.  
  3. /**
  4.  * PagHiper - Módulo oficial para integração com WHMCS
  5.  *
  6.  * @package    PagHiper para WHMCS
  7.  * @version    1.12
  8.  * @author     Equipe PagHiper https://github.com/paghiper/whmcs
  9.  * @author     Colaboração de Henrique Cruz - Intelihost
  10.  * @license    BSD License (3-clause)
  11.  * @copyright  (c) 2017, Henrique Cruz
  12.  * @link       https://www.paghiper.com/
  13.  */
  14.  
  15.  
  16. /**
  17.  * O arquivo foi acessado diretamente.
  18.  * Se trata de um post da PagHiper, de um boleto emitido com checkout transparente
  19.  * ou um link direto enviado por e-mail.
  20.  */
  21.  
  22. // Opções padrão do Gateway
  23. function paghiper_config($params) {
  24.     $config = array(
  25.  
  26.         'FriendlyName' => array(
  27.             "Type" => "System",
  28.             "Value" => "PagHiper Boleto"
  29.         ),
  30.  
  31.         "nota" => array(
  32.             "FriendlyName" => "Nota",
  33.             "Description" => "
  34.            <table><tbody><tr><td width='60%'><img src='https://s3.amazonaws.com/logopaghiper/whmcs/badge.oficial.png' style='
  35.    max-width: 100%;
  36.  '></td><td>
  37. Versão
  38.  <h2 style='
  39.    font-weight: bold;
  40.    margin-top: 0px;
  41.    font-size: 300%;
  42. '>1.12</h2>
  43. </td></tr></tbody></table>
  44.   <h2>Para que o modulo funcione, siga as etapas abaixo:</h2>
  45.   <ul>
  46.   <li>Caso não possua uma conta PagHiper, <a href='https://www.paghiper.com/abra-sua-conta/' target='_blank'><strong> crie a sua aqui</strong></a> <br>
  47.       Precisa de ajuda para criar sua conta? <a href='https://www.paghiper.com/duvidas/como-se-cadastrar-no-paghiper/' target='_blank'><strong> clique aqui e veja como criar de maneira rápida e facil.</strong></a><br></li>
  48.   <li>Certifique-se que a conta esteja verificada e valida na página de <a href='https://www.paghiper.com/painel/detalhes-da-conta/' target='_blank'><strong>Detalhes da sua conta</strong></a> PagHiper</li>
  49.   <li>Gere o seu token PagHiper na <a href='https://www.paghiper.com/painel/token/' target='_blank'><strong> pagina de token</strong></a></li>
  50.   <li>Ative o prazo máximo de vencimento do boleto para 180 dias, no Painel do PagHiper  &gt; Ferramentas  &gt; Vencimento do Boleto ( <a href='https://www.paghiper.com/painel/prazo-vencimento-boleto/' target='_blank'><strong>Confira Aqui</strong></a> ). Somente assim, a data do vencimento do boleto será igual a da fatura.</li>
  51.   <li>Ative a integração entre o PagHiper e o <a href='https://www.paghiper.com/painel/whmcs' target='_blank'><strong>WHMCS</strong></a>, <a href='https://www.paghiper.com/painel/whmcs' target='_blank'><strong>Acesse aqui</strong></a> e ative.</li>
  52.   <li><h5>Suporte</h5><p>Se tiver qualquer duvida, visite a nossa <a href='https://www.paghiper.com/atendimento/' target='_blank'><strong>central de atendimento</strong></a></p></li>
  53.   </ul>"
  54.         ),
  55.        
  56.         'email' => array(
  57.             "FriendlyName" => "Email",
  58.             "Type" => "text",
  59.             "Size" => "100",
  60.             "Description" => "Email da conta PagHiper que irá receber"
  61.         ),
  62.  
  63.         'token' => array(
  64.             "FriendlyName" => "Token",
  65.             "Type" => "text",
  66.             "Size" => "66",
  67.             "Description" => "Extremamente importante, você pode gerar seu token em nossa pagina: Painel > Ferramentas > Token ( <a href='https://www.paghiper.com/painel/token/' target='_blank'><strong>Confira Aqui</strong></a> )."
  68.         ),
  69.  
  70.         "cpf_cnpj" => array(
  71.             "FriendlyName" => "ID do custom field contendo CPF/CNPJ",
  72.             "Type" => "text",
  73.             "Size" => "3",
  74.             "Description" => "Defina aqui o ID do campo usado para coletar CPF/CNPJ do seu cliente. Isso é necessário para usar o checkout transparente." . get_customfield_id()
  75.         ),
  76.  
  77.         "porcento" => array(
  78.             "FriendlyName" => "Taxa Percentual (%)",
  79.             "Type" => "text",
  80.             "Size" => "3",
  81.             "Description" => "Porcentagem da fatura a se pagar a mais por usar o PagHiper. Ex.: (2.5). Obs.: não precisa colocar o % no final. Obs²: Use o ponto (.) como delimitador de casas decimais. <br> Recomendamos não cobrar nenhuma taxa."
  82.         ),
  83.  
  84.         "taxa" => array(
  85.             "FriendlyName" => "Taxa fixa",
  86.             "Type" => "text",
  87.             "Size" => "7",
  88.             "Description" => "Taxa cobrada a mais do cliente por utilizar esse meio de pagamento, exemplo: 1.0 (dois reias). Obs: Use o ponto (.) como delimitador de casas decimais.<br> Recomendamos não cobrar nenhuma taxa."
  89.         ),
  90.  
  91.         "abrirauto" => array(
  92.             "FriendlyName" => "Abrir boleto ao abrir fatura?",
  93.             "Type" => "yesno"
  94.         ),
  95.  
  96.         "frasefixa" => array(
  97.             "FriendlyName" => "Exibe ou não a frase do boleto",
  98.             "Type" => "yesno"
  99.         ),
  100.  
  101.         "porcento" => array(
  102.             "FriendlyName" => "Taxa Percentual (%)",
  103.             "Type" => "text",
  104.             "Size" => "3",
  105.             "Description" => "Porcentagem da fatura a se pagar a mais por usar o PagHiper. Ex.: (2.5). Obs.: não precisa colocar o % no final. Obs²: Use o ponto (.) como delimitador de casas decimais. <br> Recomendamos não cobrar nenhuma taxa."
  106.         ),
  107.  
  108.         "integracao_avancada" => array(
  109.             "FriendlyName" => "Integração Avançada",
  110.             "Type" => "yesno",
  111.             "Description" => "Ao ativar essa opção, as informações de retorno são armazenadas no banco de dados para uso posterior. Com isso, podemos fazer coisas como mandar o código de barras direto no corpo do e-mail de fatura, integrar o boleto ao PDF da fatura e reutilizar boletos ja emitidos. Para mais informações, acesse nossa <a href='https://github.com/paghiper/whmcs' target='_blank'>Página do GitHub</a>"
  112.         ),
  113.  
  114.         "transparentcheckout" => array(
  115.             "FriendlyName" => "Mostrar boleto usando Checkout Transparente?",
  116.             "Type" => "yesno"
  117.         ),
  118.        
  119.         "admin" => array(
  120.             "FriendlyName" => "Administrador atribuído",
  121.             "Type" => "text",
  122.             "Size" => "10",
  123.             "Default" => "admin",
  124.             "Description" => "Insira o nome de usuário ou ID do administrador do WHMCS que será atribuído as transações. Necessário para usar a API interna do WHMCS."
  125.         ),
  126.        
  127.         'suporte' => array(
  128.             "FriendlyName" => "<span class='label label-primary'><i class='fa fa-question-circle'></i> Suporte</span>",
  129.             "Description" => '<h2>Para informações ou duvidas: </h2><br><br>
  130.  
  131. <ul>
  132. <li>Duvidas sobre a conta <strong> PAGHIPER:</strong> <br><br>
  133. Devem ser resolvidas diretamente na central de atendimento: <br>
  134. <strong><a href="https://www.paghiper.com/atendimento" target="_blank">https://www.paghiper.com/atendimento</a></strong></li>
  135. <br><br><br>
  136.  
  137. <li>Duvidas sobre o <strong> Modulo WHMCS </strong> <br><br>
  138. Tem uma dúvida ou quer contribuir para o projeto? Acesse nosso repositório no GitHub!
  139. <br>
  140. <strong><a href="https://github.com/paghiper/whmcs" target="_blank">https://github.com/paghiper/whmcs</a></strong></li>
  141.  
  142. </ul><br>
  143.  
  144. <h2>Nota de Agradecimento</h2>
  145. Esse modulo foi desenvolvido através da colaboração do desenvolvedor <strong><a href="https://henriquecruz.com.br" target="_blank">Henrique Cruz</a></strong> <br> <br>'
  146.         )
  147.        
  148.     );
  149.  
  150.     return $config;
  151. }
  152.  
  153. function get_customfield_id() {
  154.     $fields = mysql_query("SELECT id, fieldname FROM tblcustomfields WHERE type = 'client';");
  155.     if (!$fields) {
  156.         return '<br><br>Erro geral no banco de dados';
  157.     } elseif (mysql_num_rows($fields) >= 1) {
  158.  
  159.         $tutorial = '<br><br>Para sua comodidade, listamos abaixo os campos que podem ser usados e seus IDs. Basta pegar o ID e preencher acima. <ul>';
  160.         while ($field = mysql_fetch_assoc($fields)) {
  161.  
  162.             $tutorial .= '<li><strong>ID do Campo: ';
  163.             $tutorial .= $field['id'];
  164.             $tutorial .= '</strong> | Nome: ';
  165.             $tutorial .= htmlentities($field['fieldname']);
  166.             $tutorial .= '</li>';
  167.  
  168.         }
  169.         $tutorial .= '</ul>';
  170.         $tutorial .= '<br>Caso o campo de CPF não esteja disponível, <strong><a href="https://github.com/paghiper/whmcs/wiki/Criando-o-campo-de-CPF-CNPJ" target="_blank">acesse o tutorial clicando aqui</a></strong> e veja como pode criar o campo.';
  171.        return $tutorial;
  172.     } else {
  173.         return '<br><br>Nenhum campo possível foi encontrado! Por favor <strong><a href="https://github.com/paghiper/whmcs/wiki/Criando-o-campo-de-CPF-CNPJ" target="_blank">acesse o tutorial clicando aqui</a></strong> e veja como pode criar o campo.';
  174.     }
  175.    
  176. }
  177.  
  178. function paghiper_link($params) {  
  179.  
  180.     $function = 'getinvoice';
  181.     $getinvoiceid['invoiceid'] = $params['invoiceid'];
  182.     $whmcsAdmin = $params['admin'];
  183.     $getinvoiceResults = localAPI($function,$getinvoiceid,$whmcsAdmin);
  184.  
  185.     $invoiceDuedate = $getinvoiceResults['duedate']; // Data de vencimento da fatura
  186.     $dataHoje = date('Y-m-d'); // Data de Hoje
  187.    
  188.     // Se a data de vencimento estiver no futuro ou presente
  189.     if ( $invoiceDuedate >= date('Y-m-d') ) {
  190.  
  191.             // Usar a data de vencimento original
  192.             $billetDuedate  = $invoiceDuedate;
  193.  
  194.     // Caso contrario...
  195.     } elseif ( $invoiceDuedate < date('Y-m-d') ) {
  196.  
  197.             // usar a data de hoje, acrescida de um dia extra como vencimento.
  198.             $billetDuedate  = date('Y-m-d', strtotime('+1 day'));
  199.            
  200.     }
  201.    
  202.     // instancia as datas para a comparacao de internvalos de dias
  203.     $data1 = new DateTime($billetDuedate);
  204.     $data2 = new DateTime($dataHoje);
  205.  
  206.     // Calcula a diferença de dias entre o dia de hoje e a data de vencimento. Vamos usar esse número para enviar ao PagHiper.
  207.     $intervalo = $data1->diff($data2);
  208.     $vencimentoBoleto = $intervalo->days;  
  209.  
  210.     // Definimos &&
  211.     $systemurl = get_system_url($params);
  212.     $urlRetorno = $systemurl.'/modules/gateways/'.basename(__FILE__);
  213.  
  214.     // Pegamos os dados de CPF/CNPJ
  215.     $cpf_field = 'customfields'.$params["cpf_cnpj"];
  216.     $cpf_cnpj = $params['clientdetails'][$cpf_field];
  217.     if(strpos($cpf_cnpj, '/') !== false) {
  218.         $razao_social = $params['clientdetails']['companyname'];
  219.         $cnpj = substr(trim(str_replace(array('+','-'), '', filter_var($cpf_cnpj, FILTER_SANITIZE_NUMBER_INT))), -14);
  220.  
  221.         $code_insert = '<input name="razao_social" type="hidden" value="'.$razao_social.'" />';
  222.         $code_insert .= '<input name="cnpj" type="hidden" value="'.$cnpj.'" />';
  223.     } else {
  224.         $cpf = substr(trim(str_replace(array('+','-'), '', filter_var($cpf_cnpj, FILTER_SANITIZE_NUMBER_INT))), -15);
  225.         $code_insert = '<input name="cpf" type="hidden" value="'.$cpf.'" />';
  226.     }
  227.    
  228.     // faz os calculos (caso tenha definido um percentual ou taxa a mais, será incluida no calculo agora)
  229.     $valorInvoice = apply_custom_taxes($params['amount'], $params); # Formato: ##.##
  230.    
  231.     ### abrir o boleto automaticamente ao abrir a fatura
  232.    if($params['abrirauto']==true):
  233.         $target = '';
  234.         $abrirAuto = "<script type='text/javascript'> document.paghiper.submit()</script>";
  235.     else:
  236.         $target =  "target='_blank'";
  237.         $abrirAuto = '';
  238.     endif;
  239. // ALLOW CHECKOUT TRANSPARENTE
  240. if($params['transparentcheckout'] == true) {
  241. $code = "
  242. <!-- INICIO DO FORM DO BOLETO PAGHIPER -->
  243.    <form name=\"paghiper\" action=\"{$urlRetorno}?invoiceid={$params['invoiceid']}&uuid={$params['clientdetails']['userid']}&mail={$params['clientdetails']['email']}\" method=\"post\">
  244.    <input type='image' src='https://www.paghiper.com/img/checkout/boleto/boleto-120px-69px.jpg'
  245.    title='Pagar com Boleto' alt='Pagar com Boleto' border='0'
  246.     align='absbottom' /><br>
  247.    <input type=\"submit\" value=\"Gerar boleto\">
  248.    <!-- FIM DO BOLETO PAGHIPER -->
  249.    </form>
  250.    {$abrirAuto}";
  251. } else {
  252. $code = "
  253. <!-- INICIO DO FORM DO BOLETO PAGHIPER -->
  254.    <form name=\"paghiper\" {$target} action=\"https://www.paghiper.com/checkout/\" method=\"post\">
  255.    <input name='email_loja' type='hidden' value='{$params['email']}'>
  256.    <!-- Informações opcionais -->
  257.    <input name='urlRetorno' type='hidden' value='{$urlRetorno}'>
  258.    <input name='vencimentoBoleto' type='hidden' value='{$vencimentoBoleto}'>
  259.    <!-- Dados do produto -->
  260.    <input name='id_plataforma' type='hidden' value='{$params['invoiceid']}' />
  261.    <input name='produto_codigo_1' type='hidden' value='{$params['invoiceid']}' />
  262.    <input name='produto_valor_1' type='hidden' value='{$valorInvoice}'>
  263.    <input name='produto_descricao_1' type='hidden' value='Fatura #{$params['invoiceid']}'>
  264.    <input name='produto_qtde_1' type='hidden' value='1'>";
  265.  
  266. $code .= $code_insert;
  267.  
  268. if (empty($params["clientdetails"]["companyname"])){
  269.     $dadoscliente = $params["clientdetails"]["firstname"]." ".$params["clientdetails"]["lastname"];
  270. }
  271. else{
  272.     $dadoscliente =  $params["clientdetails"]["companyname"];
  273. }
  274.  
  275. $code .= "
  276.  
  277.    <!-- Dados do cliente -->
  278.    <input name='email' type='hidden' value='{$params['clientdetails']['email']}' />
  279.    <input name='nome' type='hidden' value='{$dadoscliente}'>
  280.  
  281.    <input name='telefone' type='hidden' value='{$params['clientdetails']['phonenumber']}' />
  282.  
  283.    <input name='endereco' type='hidden' value='{$params['clientdetails']['address1']}' />
  284.    <input name='bairro' type='hidden' value='{$params['clientdetails']['address2']}' />
  285.    <input name='cidade' type='hidden' value='{$params['clientdetails']['city']}' />
  286.    <input name='estado' type='hidden' value='{$params['clientdetails']['state']}' />
  287.    <input name='cep' type='hidden' value='{$params['clientdetails']['postcode']}' />
  288.    <input name='numero_casa' type='hidden' value='S/N' />
  289.    <input name='complemento' type='hidden' value='{$params['clientdetails']['address2']}' />
  290.    <input name='idPartners' type='hidden' value='D1J0M5GD' />    
  291.    <input name='pagamento' type='hidden' id='pagamento'  />
  292.    <input type='image' src='https://www.paghiper.com/img/checkout/boleto/boleto-120px-69px.jpg'
  293.    title='Pagar com Boleto' alt='Pagar com Boleto' border='0'
  294.     align='absbottom' /><br>
  295.    <input type=\"submit\" value=\"Gerar boleto\">
  296.    <!-- FIM DO BOLETO PAGHIPER -->
  297.    </form>
  298.    {$abrirAuto}";
  299. }
  300.    
  301.  
  302.  
  303.    return $code;                  
  304. }
  305.  
  306. function httpPost($url,$params,$GATEWAY,$invoiceid,$urlRetorno,$vencimentoBoleto)
  307. {
  308.     $postData    = '';
  309.     $query       = "SELECT tblinvoices.*,tblclients.id as myid, tblclients.firstname,tblclients.lastname,tblclients.companyname,tblclients.address1,tblclients.address2,tblclients.city,tblclients.state,tblclients.postcode,tblclients.email,tblclients.phonenumber FROM tblinvoices INNER JOIN tblclients ON tblclients.id=tblinvoices.userid WHERE tblinvoices.id='$invoiceid'";
  310.     $result      = mysql_query($query);
  311.     $data        = mysql_fetch_array($result);
  312.     $id          = $data["id"];
  313.     $myid        = $data["myid"];
  314.     $firstname   = $data["firstname"];
  315.     $lastname    = $data["lastname"];
  316.     $companyname = $data["companyname"];
  317.     $address1    = $data["address1"];
  318.     $address2    = $data["address2"];
  319.     $city        = $data["city"];
  320.     $state       = $data["state"];
  321.     $postcode    = $data["postcode"];
  322.     $date        = $data["email"];
  323.     $subtotal    = $data["subtotal"];
  324.     $credit      = $data["credit"];
  325.     $tax         = $data["tax"];
  326.     $taxrate     = $data["taxrate"];
  327.     $phone       = $data["phonenumber"];
  328.     $email       = $data["email"];
  329.     $total       = $data["total"];
  330.     $cpfcnpj     = $GATEWAY['cpf_cnpj'];
  331.     $query2      = "SELECT * FROM tblcustomfieldsvalues WHERE relid = $myid and fieldid = $cpfcnpj";
  332.     $result2     = mysql_query($query2);
  333.     $data2       = mysql_fetch_array($result2);
  334.     $cpf         = $data2["value"];
  335.  
  336.     //TODO
  337.     $subtotal = apply_custom_taxes($subtotal, $GATEWAY, $params);
  338.    
  339.     // Preparate data to send
  340.     $paghiper_data = array(
  341.        "email_loja" => $GATEWAY['email'],
  342.        "idPartners" => "D1J0M5GD",
  343.  
  344.        // Informações opcionais
  345.        "urlRetorno" => $urlRetorno,
  346.        "vencimentoBoleto" => $vencimentoBoleto,
  347.  
  348.        // Dados do produto
  349.        "id_plataforma" => $invoiceid,
  350.        "produto_codigo_1" => $invoiceid,
  351.        "produto_valor_1" => $subtotal,
  352.        "produto_descricao_1" => 'Fatura #'.$invoiceid,
  353.        "produto_qtde_1" => 1,
  354.  
  355.        // Dados do cliente
  356.        "email"      => $email,
  357.        "nome"       => $firstname . ' ' . $lastname,
  358.        "telefone"   => $phone,
  359.        "endereco"   => $address1,
  360.        "bairro"     => $address2,
  361.        "cidade"     => $city,
  362.        "estado"     => $$state,
  363.        "cep"        => $postcode,
  364.     );
  365.  
  366.  
  367.     // Checa se incluimos dados CPF ou CNPJ no post
  368.     if ($cpf != " " or $cpf != "on file") {
  369.         if(strpos($cpf, '/') !== false) {
  370.             $paghiper_data["razao_social"] = $companyname;
  371.             $paghiper_data["cnpj"] = substr(trim(str_replace(array('+','-'), '', filter_var($cpf, FILTER_SANITIZE_NUMBER_INT))), -14);
  372.         } else {
  373.             $paghiper_data["cpf"] = substr(trim(str_replace(array('+','-'), '', filter_var($cpf, FILTER_SANITIZE_NUMBER_INT))), -15);
  374.         }
  375.     } elseif(!isset($cpfcnpj) || $cpfcnpj == '') {
  376.         logTransaction($GATEWAY["name"],$_POST,"Boleto não exibido. Você não definiu o campo CPF/CNPJ");
  377.     } elseif(!isset($cpf_cnpj) || $cpf_cnpj == '') {
  378.         logTransaction($GATEWAY["name"],$_POST,"Boleto não exibido. CPF/CNPJ do cliente não foi informado");
  379.     } else {
  380.         logTransaction($GATEWAY["name"],$_POST,"Boleto não exibido. Erro indefinido");
  381.     }
  382.  
  383.     if($GATEWAY['frasefixa'] == true) {
  384.         $paghiper_data["frase_fixa_boleto"] = true;
  385.     }
  386.  
  387.     $paghiper_data["pagamento"]  = "pagamento";
  388.  
  389.    // Pegar todos os dados que setamos e preparamos para enviar. Os dados vão todos na URL.
  390.    foreach($paghiper_data as $k => $v)
  391.    {
  392.       $postData .= $k . '='.$v.'&';
  393.    }
  394.    $postData = rtrim($postData, '&');
  395.  
  396.     $ch = curl_init();  
  397.  
  398.     curl_setopt($ch, CURLOPT_URL,$url);
  399.     curl_setopt($ch, CURLOPT_RETURNTRANSFER,true);
  400.     curl_setopt($ch, CURLOPT_HEADER, false);
  401.     curl_setopt($ch, CURLOPT_POST, count($postData));
  402.     curl_setopt($ch, CURLOPT_POSTFIELDS, $postData);
  403.     curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
  404.     curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
  405.  
  406.  
  407.     $output=curl_exec($ch);
  408.  
  409.     curl_close($ch);
  410.     return $output;
  411.  
  412. }
  413.  
  414. function check_table() {
  415.     $table_create = full_query("CREATE TABLE IF NOT EXISTS `mod_paghiper` (
  416.      `id` int(11) NOT NULL AUTO_INCREMENT,
  417.      `idTransacao` varchar(16) NOT NULL,
  418.      `status` varchar(45) NOT NULL,
  419.      `urlPagamento` varchar(255) DEFAULT NULL,
  420.      `linhaDigitavel` varchar(54) DEFAULT NULL,
  421.      `codRetorno` varchar(64) NOT NULL,
  422.      `type` varchar(10) NOT NULL,
  423.      PRIMARY KEY (`id`),
  424.      KEY `idTransacao` (`idTransacao`)
  425.    ) ENGINE=MyISAM DEFAULT CHARSET=latin1 PAGE_CHECKSUM=1 AUTO_INCREMENT=1 ;");
  426.     if(!$table_create) {
  427.         return false;
  428.         logTransaction($GATEWAY["name"],$_POST,"Não foi possível gravar os dados no banco.");
  429.     } else {
  430.         return true;
  431.     }
  432.  
  433. }
  434.  
  435. // Nenhuma das funções foi executada, então o script foi acessado diretamente.
  436. if (basename(__FILE__) == basename($_SERVER['SCRIPT_NAME'])) {
  437.    
  438.     header("access-control-allow-origin: *");
  439.  
  440.     // Inicializar WHMCS, carregar o gateway e a fatura.
  441.     require "../../init.php";
  442.     $whmcs->load_function("gateway");
  443.     $whmcs->load_function("invoice");
  444.  
  445.     // Initialize module settings
  446.     $GATEWAY = getGatewayVariables("paghiper");
  447.  
  448.     // Define variáveis para configurações do gateway
  449.     $gateway_name = $GATEWAY["name"];
  450.     $account_email = trim($GATEWAY["email"]);
  451.     $account_token = trim($GATEWAY['token']);
  452.     $transparent_checkout = $GATEWAY['transparentcheckout'];
  453.  
  454.     // Se o usuário admin estiver vazio nas configurações, usamos o padrão
  455.     $whmcsAdmin = (empty(trim($GATEWAY['admin'])) ? 'admin' : trim($GATEWAY['admin']));
  456.  
  457.  
  458.  
  459.     // Se as condições baterem, estamos lidando com um post do checkout transparente.
  460.     if($GATEWAY['transparentcheckout'] == true && isset($_GET["invoiceid"])) {
  461.  
  462.         // Vamos precisar pegar a URL do sistema direto do banco de dados. A variável $params não está disponível nesse momento.
  463.         $systemurl = get_system_url();
  464.  
  465.         $user_id = intval($_GET["uuid"]);
  466.         $user_email = $_GET["mail"];
  467.         //echo 'a';
  468.  
  469.         // Pegamos a fatura no banco de dados
  470.         $getinvoice = 'getinvoice';
  471.         $getinvoiceid['invoiceid'] = intval($_GET["invoiceid"]);
  472.         $getinvoiceResults = localAPI($getinvoice,$getinvoiceid,$whmcsAdmin);
  473.         //print_r($getinvoiceResults);
  474.         //echo $user_id . ' / '. $getinvoiceResults['userid'];
  475.  
  476.         if(intval($getinvoiceResults['userid']) !== $user_id) {
  477.                 //echo 'ops!';
  478.             exit;
  479.         } else {
  480.             $query = "SELECT email FROM tblclients WHERE id = '".$user_id."' LIMIT 1";
  481.             $result = mysql_query($query);
  482.             $data = mysql_fetch_array($result);
  483.             $email = $data[0];
  484.  
  485.             if($email !== $user_email) {
  486.                 exit;
  487.             }
  488.         }
  489.        
  490.  
  491.  
  492.        
  493.  
  494.         // Pegamos a data de vencimento e a data de hoje
  495.         $invoiceDuedate = $getinvoiceResults['duedate']; // Data de vencimento da fatura
  496.         $dataHoje = date('Y-m-d'); // Data de Hoje
  497.        
  498.         // Se a data do vencimento da fatura for maior que o dia de hoje
  499.         if ( $invoiceDuedate >= date('Y-m-d') ) {
  500.  
  501.             // Usamos a data de vencimento normalmente
  502.             $billetDuedate  = $invoiceDuedate;
  503.  
  504.         // Se a data de vencimento da fatura for menor que o dia de hoje
  505.         } elseif( $invoiceDuedate < date('Y-m-d')) {
  506.  
  507.             // Pegamos a data de hoje, adicionamos um dia e usamos como nova data de vencimento
  508.             $billetDuedate  = date('Y-m-d', strtotime('+1 day'));
  509.                
  510.         }
  511.        
  512.         // Pegamos as datas que definimos anteriormente e transformamos em objeto Date do PHP
  513.         $data1 = new DateTime($billetDuedate);
  514.         $data2 = new DateTime($dataHoje);
  515.  
  516.         // Comparamos as datas para enviar o resultado a PagHiper. Isso é necessário pois o gateway pede o vencimento em número de dias no futuro, não como data.
  517.         $intervalo = $data1->diff($data2);
  518.         $vencimentoBoleto = $intervalo->days;  
  519.  
  520.         // Checamos uma ultima vez se o ID da fatura não veio vazio
  521.         if($_GET["invoiceid"] == '') {
  522.             exit("Fatura inexistente");
  523.         } else {
  524.             $invoiceid = $_GET["invoiceid"];
  525.             $urlRetorno = $systemurl.'modules/gateways/'.basename(__FILE__);
  526.  
  527.             // Executamos o checkout transparente e printamos o resultado
  528.             echo httpPost("https://www.paghiper.com/checkout/",$params,$GATEWAY,$invoiceid,$urlRetorno,$vencimentoBoleto);
  529.             exit;
  530.         }
  531.        
  532.     // Caso contrário, é um post do PagHiper.
  533.     } else {
  534.  
  535.         // Pegamos os campos enviados por POST. Vamos checar esses dados.
  536.         $idTransacao    = $_POST['idTransacao'];
  537.         $status         = $_POST['status'];
  538.         $urlPagamento   = $_POST['urlPagamento'];
  539.         $linhaDigitavel = $_POST['linhaDigitavel'];
  540.         $codRetorno     = $_POST['codRetorno'];
  541.         $valorOriginal  = $_POST['valorOriginal'];
  542.         $valorLoja      = $_POST['valorLoja'];
  543.         $amountGateway  = $_POST['valorTotal'];
  544.         $idPlataforma   = $_POST['idPlataforma'];
  545.  
  546.         // Calcula a taxa cobrada pela PagHiper de maneira dinâmica e registra para uso no painel.
  547.         $fee = $_POST['valorTotal']-$_POST['valorLoja'];
  548.  
  549.         // Antes de mais nada, checamos se o ID da fatura existe no banco.
  550.         $invoiceid = checkCbInvoiceID($idPlataforma,$GATEWAY["name"]);
  551.  
  552.         // Vamos enviar esses dados a PagHiper pra termos certeza de que são autênticos
  553.         $post = "idTransacao=$idTransacao" .
  554.         "&status=$status" .
  555.         "&codRetorno=$codRetorno" .
  556.         "&valorOriginal=$valorOriginal" .
  557.         "&valorLoja=$valorLoja" .
  558.         "&token=$account_token";
  559.         $enderecoPost = "https://www.paghiper.com/checkout/confirm/";
  560.  
  561.         // Prepara a chamada Curl que vamos usar.
  562.         ob_start();
  563.         $ch = curl_init();
  564.         curl_setopt($ch, CURLOPT_URL, $enderecoPost);
  565.         curl_setopt($ch, CURLOPT_POST, true);
  566.         curl_setopt($ch, CURLOPT_POSTFIELDS, $post);
  567.         curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
  568.         curl_setopt($ch, CURLOPT_HEADER, false);
  569.         curl_setopt($ch, CURLOPT_TIMEOUT, 30);
  570.         curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
  571.         $resposta = curl_exec($ch); // Importante, verifica se o retorno automatico é verdadeiro
  572.         curl_close($ch);
  573.  
  574.         // O valor que procuramos na confirmação da PagHiper é esse. Se der true, podemos prosseguir.
  575.         $confirmado = (strcmp ($resposta, "VERIFICADO") == 0);
  576.        
  577.         // Só executamos o bloco condicional abaixo se o post da PagHiper for confirmado.
  578.         if ($confirmado) {
  579.  
  580.             if($GATEWAY["integracao_avancada"] == TRUE) {
  581.                 $custom_table = check_table();
  582.                 if($custom_table) {
  583.                     $log_transaction = full_query("INSERT INTO 'mod_paghiper' (idTransacao,status,urlPagamento,linhaDigitavel,codRetorno,type) VALUES ($idTransacao,$status,$urlPagamento,$linhaDigitavel,$codRetorno,'retorno'");
  584.                     if(!$log_transaction) {
  585.                         logTransaction($GATEWAY["name"],$_POST,"Não foi possível gravar os dados no banco.");
  586.                     }
  587.                 }
  588.             }
  589.  
  590.             // Pegamos a fatura como array e armazenamos na variável para uso posterior
  591.             $command = "getinvoice";
  592.             $values["invoiceid"] = $invoiceid;
  593.             $results = localAPI($command,$values,$whmcsAdmin);
  594.            
  595.             // Abaixo evitamos que eventuais taxas extrar sejam adicionadas como crédito na conta do cliente.
  596.             if($results['total'] <  $amountGateway):
  597.                $amountGateway = $results['total'];
  598.             endif;
  599.  
  600.             // Função que vamos usar na localAPI
  601.             $addtransaction = "addtransaction";
  602.  
  603.                 // Cliente fez emissão do boleto, logamos apenas como memorando
  604.                 if ($status == "Aguardando") {
  605.  
  606.                         $addtransvalues['userid'] = $results['userid'];
  607.                         $addtransvalues['invoiceid'] = $invoiceid;
  608.                         $addtransvalues['description'] = "Boleto gerado aguardando pagamento.";
  609.                         $addtransvalues['amountin'] = '0.00';
  610.                         $addtransvalues['fees'] = '0.00';
  611.                         $addtransvalues['paymentmethod'] = 'paghiper';
  612.                         $addtransvalues['transid'] = $idTransacao.'-Boleto-Gerado';
  613.                         $addtransvalues['date'] = date('d/m/Y');
  614.                         $addtransresults = localAPI($addtransaction,$addtransvalues,$whmcsAdmin);
  615.                         logTransaction($GATEWAY["name"],$_POST,"Aguardando o Pagamento"); # Salva informações da transação no log do WHMCS.
  616.  
  617.                 // Transação foi aprovada
  618.                 } else if ($status == "Aprovado") {
  619.  
  620.                     // Essa função checa se a transação ja foi registrada no banco de dados.
  621.                     checkCbTransID($idTransacao);
  622.  
  623.                     // Registramos o pagamento e damos baixa na fatura
  624.                     addInvoicePayment($invoiceid,$idTransacao,$amountGateway,$fee,'paghiper');
  625.  
  626.                     // Logamos a transação no log de Gateways do WHMCS.
  627.                     logTransaction($GATEWAY["name"],$_POST,"Transação Concluída");
  628.  
  629.                 // Transação Cancelada.
  630.                 } else if ($status == "Cancelado") {
  631.  
  632.                     // Boleto não foi pago, logamos apenas como memorando
  633.                     logTransaction($GATEWAY["name"],$_POST,"Transação Cancelada");
  634.                 }
  635.  
  636.                 //TODO
  637.                 // Prever todos os tipos de retorno.
  638.         }
  639.    
  640.    
  641.     }
  642. }
  643.  
  644. // Helper Functions
  645.  
  646. function get_system_url($params = NULL){
  647.     if(array_key_exists('systemurl', $params)) {
  648.         $systemurl = $params['systemurl'];
  649.     } else {
  650.         $query = "SELECT value FROM tblconfiguration WHERE setting = 'SystemSSLURL' OR setting = 'SystemURL' LIMIT 1";
  651.         $result = mysql_query($query);
  652.         $data = mysql_fetch_array($result);
  653.         $systemurl = $data[0];
  654.     }
  655.  
  656.  
  657.     return $systemurl;
  658. }
  659.  
  660. function apply_custom_taxes($amount, $GATEWAY, $params = NULL){
  661.  
  662.     if(array_key_exists('amount', $params)) {
  663.         $amount     = $params['amount'];
  664.         $porcento   = $params['porcento'];
  665.         $taxa       = $params['taxa'];
  666.     } else {
  667.         $porcento   = $GATEWAY['porcento'];
  668.         $taxa       = $GATEWAY['taxa'];
  669.     }
  670.     return number_format(($amount+((($amount / 100) * $porcento) + $taxa)), 2, '.', ''); # Formato: ##.##
  671. }
  672.  
  673. ?>
RAW Paste Data