leonardoasb Postado Março 11, 2017 Compartilhar 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 Link para o comentário Compartilhar em outros sites More sharing options...
leonardoasb Postado Março 13, 2017 Compartilhar 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 Link para o comentário Compartilhar em outros sites More sharing options...
Yago Marlon Postado Março 13, 2017 Compartilhar 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 Link para o comentário Compartilhar em outros sites More sharing options...
leonardoasb Postado Março 13, 2017 Compartilhar 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 Link para o comentário Compartilhar em outros sites More sharing options...
Yago Marlon Postado Março 13, 2017 Compartilhar 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 Link para o comentário Compartilhar em outros sites More sharing options...
leonardoasb Postado Março 13, 2017 Compartilhar 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 Link para o comentário Compartilhar em outros sites More sharing options...
VictorHScatolon Postado Março 14, 2017 Autor Compartilhar 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 Link para o comentário Compartilhar em outros sites More sharing options...
leonardoasb Postado Março 14, 2017 Compartilhar 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 Link para o comentário Compartilhar em outros sites More sharing options...
VictorHScatolon Postado Março 15, 2017 Autor Compartilhar 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 Link para o comentário Compartilhar em outros sites More sharing options...
leonardoasb Postado Março 16, 2017 Compartilhar 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 Link para o comentário Compartilhar em outros sites More sharing options...
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.