leonardoasb Postado Março 11, 2017 Postado Março 11, 2017 Pessoal, fiz algumas alterações no módulo disponibilizado pelo @VictorHScatolon, pegando uns partes do código do módulo oficial. Consegui obter o boleto com a data de vencimento da fatura no whmcs. Esta ai o código atualizado para quem quiser testar. PS: Mantive os trechos originais do módulo comentado. <?php function paghiper_config() { $lsdoc = array(); $where = array( "type" => array("sqltype" => "LIKE", "value" => "client") ); $result = select_query("tblcustomfields", "id,fieldname", $where); while ($data = mysql_fetch_array($result)) { $lsdoc[$data['id']] = $data['fieldname']; } return array( 'FriendlyName' => array( "Type" => "System", "Value" => "PagHiper 2017" ), 'informacao' => array( "FriendlyName" => "<big class='label label-success'><i class='fa fa-info'></i> INFORMAÇÕES</span></big>".$_SESSION['id'], "Description" => "<i class='fa fa-check'></i> Esse módulo foi criado pela <a href='http://compulabs.com.br' target='_blank'><img src='http://i.imgur.com/25FCm6q.png' /></a><br/> <i class='fa fa-check'></i> Todos os créditos são direcionados a desenvolvedora.<br/> <i class='fa fa-check'></i> Esse módulo é <b>grátis</b>, portanto a venda do mesmo é proibida.<br/> <i class='fa fa-check'></i> Caso efetue melhoras no código, o mesmo deverá ter o código aberto e mentido o nome da desenvolvedora.<br/> <i class='fa fa-check'></i> Licença: <a href='http://compulabs.com.br/licencas/?t=modulo-paghiper-whmcs' target='_blank'>pode ser encontrada aqui</a></div>" ), 'email' => array( "FriendlyName" => "Email", "Type" => "text", "Size" => "100", "Description" => "<br/><small><i class='fa fa-info-circle'></i> Email do PagHiper, que irá receber o pagamento.</small>" ), 'key' => array( "FriendlyName" => "Token", "Type" => "text", "Size" => "100", "Description" => "<br/><small><i class='fa fa-info-circle'></i> Token de acesso a API do PagHiper. Pode ser encontrado em sua conta PagHiper.</small>" ), 'doc' => array( 'FriendlyName' => 'Campo do CPF/CNPJ', 'Type' => 'dropdown', 'Options' => $lsdoc, "Description" => "<br/><small><i class='fa fa-info-circle'></i> Campo personalizado que contém o CPF/CNPJ do cliente.</small>" ), "botaopagar" => array( "FriendlyName" => "Texto do botão", "Type" => "text", "Size" => "70", "Default" => "Gerar boleto", "Description" => "<br/><small><i class='fa fa-info-circle'></i> Texto do botão de pagamento. HTML Habilitado.</small>" ), "abrirauto" => array( "FriendlyName" => "Abrir boleto ao abrir fatura?", 'Type' => 'dropdown', 'Options' => array("0"=>"Não","1"=>"Sim"), "Description" => "<br/><small><i class='fa fa-info-circle'></i> Quando o cliente abrir a fatura, o boleto será mostrado na tela automaticamente.</small>" ), "taxa" => array( "FriendlyName" => "Taxa por boleto", "Type" => "text", "Size" => "3", "Description" => "<br/><small><i class='fa fa-info-circle'></i> Insira o valor que você paga por boleto compensado. Use o ponto (.) para separar as casas decimais.</small>" ), "repassar" => array( "FriendlyName" => "Repassar taxa ao cliente?", 'Type' => 'dropdown', 'Options' => array("0"=>"Não","1"=>"Sim"), "Description" => "<br/><small><i class='fa fa-info-circle'></i> Será somado o valor da taxa ao boleto.</small>" ), "juros" => array( "FriendlyName" => "Juros por atraso?", 'Type' => 'dropdown', 'Options' => array("0"=>"Não","1"=>"Sim, %","2"=>"Sim, fixo"), "Description" => "<br/><small><i class='fa fa-info-circle'></i> Aplicar juros por atraso? Lebre-se que é aplicado a cada dia.</small>" ), "valorjuros" => array( "FriendlyName" => "Multa por atraso?", "Type" => "text", "Size" => "5", "Description" => "<br/><small><i class='fa fa-info-circle'></i> Quanto aplicar de juros por atrado?<br/><i class='fa fa-warning'></i> Se estiver usando %, coloque apenas o número, exemplo: <b>3</b>, que corresponde a 3%.<br/><i class='fa fa-warning'></i> Se estiver usando fixo, coloque o valor a ser aplicado, separa as casas decimais com ponto (.), exemplo: <b>0.80</b>, 80 centavos.<br/><i class='fa fa-warning'></i> Lembre-se que essa taxa é aplicado a cada dia, então, se você colocou uma taxa de 80 centavos e o cliente atrasou 3 dias, então será somado R$2,40 ao valor total do boleto.</small>" ), "vencimento" => array( "FriendlyName" => "Vencimento", 'Type' => 'dropdown', 'Options' => array("2"=>"2 Dias","3"=>"3 Dias","4"=>"4 Dias","5"=>"5 Dias","6"=>"6 Dias","7"=>"7 Dias"), "Description" => "<br/><small><i class='fa fa-info-circle'></i> Quantos dias somar ao vencimento a partir da data da geração do boleto</small>" ), "linha" => array( "FriendlyName" => "Mostrar linha digitável?", 'Type' => 'dropdown', 'Options' => array("0"=>"Não","1"=>"Sim"), "Description" => "<br/><small><i class='fa fa-info-circle'></i> Será mostrado a linha digitável do boleto na fatura.</small>" ), ); } if (basename(__FILE__) == basename($_SERVER['SCRIPT_NAME'])) { header("access-control-allow-origin: *"); require "../../init.php"; $whmcs->load_function("gateway"); $whmcs->load_function("invoice"); $GATEWAY = getGatewayVariables('paghiper'); $token = $GATEWAY['key']; $valorOriginal = $_POST['valorOriginal']; $valorLoja = $_POST['valorLoja']; $valorTotal = $_POST['valorTotal']; $status = $_POST['status']; $idTransacao = $_POST['idTransacao']; $idPlataforma = $_POST['idPlataforma']; $post = "idTransacao=$idTransacao" . "&status=$status" . "&codRetorno=$codRetorno" . "&valorOriginal=$valorOriginal" . "&valorLoja=$valorLoja" . "&token=$token"; $enderecoPost = "https://www.paghiper.com/checkout/confirm/"; ob_start(); $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $enderecoPost); curl_setopt($ch, CURLOPT_POST, true); curl_setopt($ch, CURLOPT_POSTFIELDS, $post); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_HEADER, false); curl_setopt($ch, CURLOPT_TIMEOUT, 30); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); $resposta = curl_exec($ch); curl_close($ch); $confirmado = (strcmp ($resposta, "VERIFICADO") == 0); if ($confirmado) { if($status == "Aprovado") { logTransaction($GATEWAY['name'], print_r($_POST, true) . print_r($xml_not, true), 'Successful'); $invoiceid = checkCbInvoiceID($_POST['idPlataforma'], $GATEWAY["name"]); checkCbTransID($_POST['idPlataforma']); $valor = (float)$valorTotal - $valorOriginal; $taxa = (float) $GATEWAY['taxa']; addInvoicePayment($invoiceid, $_POST['idPlataforma'], $valor, $taxa, 'paghiper'); } } } function httpPost($url,$params) { $postData = ''; foreach($params as $k => $v) { $postData .= $k . '='.$v.'&'; } $postData = rtrim($postData, '&'); $ch = curl_init(); curl_setopt($ch,CURLOPT_URL,$url); curl_setopt($ch,CURLOPT_RETURNTRANSFER,true); curl_setopt($ch,CURLOPT_HEADER, false); curl_setopt($ch, CURLOPT_POST, count($postData)); curl_setopt($ch, CURLOPT_POSTFIELDS, $postData); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); $output=curl_exec($ch); curl_close($ch); return $output; } function get_tag( $attr, $value, $xml ) { $attr = preg_quote($attr); $value = preg_quote($value); $tag_regex = '/<div[^>]*'.$attr.'="'.$value.'">(.*?)<\\/div>/si'; preg_match($tag_regex, $xml, $matches); return $matches[1]; } function paghiper_link($params) { $query = mysql_query("SELECT duedate FROM tblinvoices WHERE id = '".$params['invoiceid']."';"); $row = mysql_fetch_array($query); $query2 = mysql_query("SELECT * FROM tblclients WHERE email = '".$params['clientdetails']['email']."';"); $row2 = mysql_fetch_array($query2); $qru = mysql_query("SELECT * FROM tblcustomfieldsvalues WHERE relid = '".$row2['id']."' AND fieldid = '".$params['doc']."';"); $rwu = mysql_fetch_array($qru); if(!isset( $rwu['value'])) { return '<div class="alert alert-danger">Você precisa atualizar sua informação de CPF/CNPJ na área do cliente para poder gerar esse boleto.</div>'; } $doc = str_replace("-", "", str_replace(".", "", str_replace("/", "", str_replace(",", "", str_replace(" ", "", $rwu['value']))))); if(strlen($doc) == 11) { $docx1 = "cpf"; $docx2 = $doc; } else if(strlen($doc) == 14) { $docx1 = "cnpj"; $docx2 = $doc; } $invoiceDuedate = $row['duedate']; // Data de vencimento da fatura $hoje = date('Y-m-d'); // Data de Hoje if ( $invoiceDuedate >= date('Y-m-d') ) { // Se a data do vencimento da fatura for maior que o dia de hoje $billetDuedate = $invoiceDuedate; } elseif( $invoiceDuedate < date('Y-m-d')) { // Se a data de vencimento da fatura for menor que o dia de hoje $billetDuedate = date('Y-m-d', strtotime('+1 day')); // Se fatura já venceu, data de vencimento do boleto = Hoje + 1 dia } // instancia as datas para a comparacao de internvalos de dias $data1 = new DateTime($billetDuedate); $data2 = new DateTime($hoje); $intervalo = $data1->diff($data2); $vencimentofim = $intervalo->days; /* $vencimentoinv = $row['duedate']; $hoje = date("Y-m-d"); if(strtotime($hoje) == strtotime($vencimentoinv)) { $vencimentofim = $params['vencimento']; } else if(strtotime($hoje) > strtotime($vencimentoinv)) { $vencimentofim = $params['vencimento']; } if(strtotime($hoje) >= strtotime($vencimentoinv)) { $diferenca = strtotime($vencimentoinv) - strtotime($hoje); $vencimentofim = floor($diferenca / (60 * 60 * 24)); } */ $valor = $params['amount']; if($params['juros'] == "1" || $params['juros'] == "2") { $jrhj = new DateTime($hoje); $jrft = new DateTime($row['duedate']); $dias = (int)$intervalo->d; if($dias > 0) { $intervalo = $jrhj->diff($jrft); if($params['juros'] == "1") { $valor = $valor + ((($valor/100) * $params['valorjuros']) * $dias); } else if($params['juros'] == "2") { $valor = $valor + ((float)$params['valorjuros'] * $dias); } } } if($params['repassar'] == "1") { $valor += (float) $params['taxa']; } $paramsboleto = array( "email_loja" => $params['email'], "urlRetorno" => $params['systemurl'].'/modules/gateways/'.basename(__FILE__), "tipoBoleto" => "A4", "vencimentoBoleto" => $vencimentofim, "id_plataforma" => $params['invoiceid'], $docx1 => $docx2, "produto_codigo_1" => $params['invoiceid'], "produto_valor_1" => number_format($valor, 2, '.', ''), "produto_descricao_1" => "Fatura #".$params['invoiceid'], "produto_qtde_1" => "1", "email" => $params['clientdetails']['email'], "nome" => $params['clientdetails']['firstname'].' '.$params['clientdetails']['lastname'], "pagamento" => "pagamento" ); $boleto = httpPost("https://www.paghiper.com/checkout/",$paramsboleto); $linha1 = get_tag('id', 'DadosBoleto', $boleto); $kl1 = strpos($linha1, "{"); $kl2 = (int)strpos($linha1, "}") - (int)$kl1 + 1; $dadosboleto = json_decode(substr($linha1,$kl1,$kl2)); return ($params['linha']=="1"?'<div class="form-group"><label><i class="fa fa-keyboard-o"></i> Linha digitável</label><input type="text" id="linha" onfocus="this.select();" onmouseup="return false;" readonly="true" value="'.$dadosboleto->linhaDigitavel.'" class="form-control"></div>':null)."<span onclick='abrirboleto()' class='btn btn-block btn-primary'>".$params['botaopagar']."</span><div class='hidden' id='boleto'>".$boleto."</div><script src='https://code.jquery.com/jquery-1.12.4.min.js'integrity='sha256-ZosEbRLbNQzLpnKIkEdrPv7lOy9C27hHQ+Xp8a4MxAQ='crossorigin='anonymous'></script><script src='https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/js/bootstrap.min.js' integrity='sha384-0mSbJDEHialfmuBBQP6A4Qrprq5OVfW37PRR3j5ELqxss1yVqOtnepnHVP9aJ7xS' crossorigin='anonymous'></script><script>function abrirboleto(){var w = window.open('', '', 'width=800, height=500, scrollbars=yes');var html = $('#boleto').html(); $(w.document.body).html(html);}".($params['abrirauto']==true ? "\$(document).ready(function() {\$('body').html(\$('#boleto').html());});" : null ).'</script>'; } ?> 0 Citar
leonardoasb Postado Março 13, 2017 Postado Março 13, 2017 Alguém mais, além de mim, conseguiu testar este nova versão do módulo, com a data do boleto igual a data da fatura do whmcs? 0 Citar
Yago Marlon Postado Março 13, 2017 Postado Março 13, 2017 45 minutos atrás, leonardoasb disse: Alguém mais, além de mim, conseguiu testar este nova versão do módulo, com a data do boleto igual a data da fatura do whmcs? Não testei ainda, esta funcionando normal sem bugs ? 0 Citar
leonardoasb Postado Março 13, 2017 Postado Março 13, 2017 Estou rodando desde sábado sem bugs. Seria interessante o @VictorHScatolon dar uma olhada também, já que foi ele que desenvolveu o módulo, eu só fiz a modificação para o boleto sair com a data da fatura do whmcs. PS: como eu marco ou cito a pessoa no post? 0 Citar
Yago Marlon Postado Março 13, 2017 Postado Março 13, 2017 4 minutos atrás, leonardoasb disse: Estou rodando desde sábado sem bugs. Seria interessante o @VictorHScatolon dar uma olhada também, já que foi ele que desenvolveu o módulo, eu só fiz a modificação para o boleto sair com a data da fatura do whmcs. PS: como eu marco ou cito a pessoa no post? A linha digitavel continua normalmente ? Nao sei como marca, mais acredito que não precisa marcar ele, como o post é dele ele recebe uma notificação sempre que alguém comenta. 0 Citar
leonardoasb Postado Março 13, 2017 Postado Março 13, 2017 1 hora atrás, Yago Marlon disse: A linha digitavel continua normalmente ? Nao sei como marca, mais acredito que não precisa marcar ele, como o post é dele ele recebe uma notificação sempre que alguém comenta. Por acaso a linha digital eu não testei, pq não utilizo, mas em principio deve funcionar. Não fiz nenhuma alteração nesta parte. 0 Citar
VictorHScatolon Postado Março 14, 2017 Autor Postado Março 14, 2017 A linha digitavel continua normalmente ? Nao sei como marca, mais acredito que não precisa marcar ele, como o post é dele ele recebe uma notificação sempre que alguém comenta. Funciona normal depois do último update. 0 Citar
leonardoasb Postado Março 14, 2017 Postado Março 14, 2017 22 minutos atrás, VictorHScatolon disse: Funciona normal depois do último update. Conseguiu testar a modificação que eu fiz para pegar a data do vencimento da fatura no boleto? 0 Citar
VictorHScatolon Postado Março 15, 2017 Autor Postado Março 15, 2017 Em 14/03/2017 em 11:10, leonardoasb disse: Conseguiu testar a modificação que eu fiz para pegar a data do vencimento da fatura no boleto? Ainda não tive tempo de testar amigo. 0 Citar
leonardoasb Postado Março 16, 2017 Postado Março 16, 2017 Em 15/03/2017 em 15:38, VictorHScatolon disse: Ainda não tive tempo de testar amigo. Tranquilo. Não sou experiente nestas modificações. Você entende muito mais do que eu, certamente conseguirá dizer se fiz algo errado. Estou utilizando o seu módulo, com a modificação que eu fiz em produção, e até agora não tive problemas ... mas nunca se sabe, sua experiência é mais fiável rsrs 0 Citar
Posts Recomendados
Participe da conversa
Você pode postar agora e se cadastrar mais tarde. Se você tem uma conta, faça o login para postar com sua conta.
Nota: Sua postagem exigirá aprovação do moderador antes de ficar visível.