Ir para conteúdo
  • Cadastre-se

Emissor de nota fiscal - Transmite notas - WHMCS


Posts Recomendados

Tudo bem?
Como desenvolvi meu próprio emissor de nota fiscal estou aqui para disponibilizar uma integração com a transmite notas https://www.transmitenota.com.br/ a empresa  e muito boa quem quiser usar ta ai!

Salve o código em um arquivo .php e coloque no diretório whmcs/includes/hooks/ 
Lembre-se de alterar os campos do CPF, CNPJ e etc...

<?php

use WHMCS\Database\Capsule;

// Gera a NFSe / NFe / NFc

add_hook('InvoicePaid', 1, function($vars) {

    global $numerosearchkey;
    global $numerodafatura;
    global $statusdanotafical;
    global $codigodostatus;
    global $cpfvalor;
    global $cnpjvalor;
        
    $numerodafatura = $vars['invoiceid'];

    // ID do Cliente pela fatura
    foreach (Capsule::table('tblinvoices')->where([['id','=',$numerodafatura],])->get() as $client) {
        $iddocliente = $client->userid;
        $datadopagamento = $client->datepaid;
        $valordafaturacomponto = number_format($client->total, 2, '.', '');
        $valordafaturacomvirgula = number_format($client->total, 2, ',', '');
    }

    // Tipo de Conta
    foreach (Capsule::table('tblcustomfieldsvalues')->where([['fieldid','=','460'],['relid','=',$iddocliente],])->get() as $tipodeconta) {
        $tipodecontavalor = $tipodeconta->value;
    }

    if($tipodecontavalor == '') {
        // Valor CPF
        foreach (Capsule::table('tblcustomfieldsvalues')->where([['fieldid','=','3'],['relid','=',$iddocliente],])->get() as $cpf) {
            $cpfoucnpjvalor = $cpf->value;
        }
    }

    if($tipodecontavalor == 'Pessoa Jurídica)') {
        // Valor CNPJ
        foreach (Capsule::table('tblcustomfieldsvalues')->where([['fieldid','=','461'],['relid','=',$iddocliente],])->get() as $cnpj) {
            $cpfoucnpjvalor = $cnpj->value;
        }
    }

    if($tipodecontavalor == '(Pessoa Física') {
        // Valor CPF
        foreach (Capsule::table('tblcustomfieldsvalues')->where([['fieldid','=','3'],['relid','=',$iddocliente],])->get() as $cpf) {
            $cpfoucnpjvalor = $cpf->value;
        }
    }
    
    foreach (Capsule::table('tblcustomfieldsvalues')->where([['fieldid','=','37'],['relid','=',$iddocliente],])->get() as $dados) {
        $numerowhatsapp = $dados->value;
    }

    // Dados do Cliente tblclients
    foreach (Capsule::table('tblclients')->where([['id','=',$iddocliente],])->get() as $informacoesdocliente) {
        $primeironome = $informacoesdocliente->firstname;
        $sobrenome = $informacoesdocliente->lastname;
        $email = $informacoesdocliente->email;
        $telefone = $informacoesdocliente->phonenumber;
        $endereço = $informacoesdocliente->address1;
        $bairro = $informacoesdocliente->address2;
        $cidade = $informacoesdocliente->city;
        $estato = $informacoesdocliente->state;
        $cep = $informacoesdocliente->postcode;
    }

    // Url do sistema
    $urlnfse = 'https://app1.transmitenota.com.br/api/producao/EnviarNfse/';
    $urlretorno = 'https://app1.transmitenota.com.br/api/producao/ConsultarEmissaoNotaNfse/';
    $urlenviodenfseporemail = 'https://app1.transmitenota.com.br/api/producao/ConsultarEmissaoNotaNfse/';

    $dadosdaempresa = array(
        'ApiKey' => "Senha API",
        'Cnpj' => "Numero CNPJ",
    );

    $stingdanota = '{
       "ApiKey":"'.$dadosdaempresa['ApiKey'].'",
       "Cnpj":"'.$dadosdaempresa['Cnpj'].'",
       "Dados":{  
          "natureza_operacao":"3",
          "tipo_servico":"951180000",
          "tipo_rps":"2",
          "data_emissao":"'. date("d/m/Y", strtotime($datadopagamento)) .'",
          "data_competencia":"'. date("d/m/Y", strtotime($datadopagamento)) .'",
          "razao_social_tomador":"'. $primeironome . ' ' . $sobrenome .'",
          "email_tomador":"'.$email.'",
          "cnpj_tomador":"'. preg_replace('/\D/', '',$cpfoucnpjvalor) .'",
          "inscricao_municipal_tomador":"",
          "telefone_tomador":"'. $telefone .'",
          "endereco_tomador":"'.$endereço.'",
          "numero_tomador":"2",
          "complemento_tomador":null,
          "bairro_tomador":"'.$bairro.'",
          "municipio_tomador":"'.$cidade.'",
          "uf_tomador":"'.$estato.'",
          "pais_tomador":"BRASIL",
          "cep_tomador":"'.preg_replace('/\D/', '',$cep).'",
          "numero_processo":null,
          "responsavel_retencao":null,
          "valor_deducoes":null,
          "valor_pis":0,
          "valor_cofins":0,
          "desconto_incondicionado":null,
          "desconto_condicionado":0,
          "valor_aliquota":"3.00",
          "iss_retido":"2",
          "valor_total_iss":null,
          "valor_iss_retido":0,
          "valor_outras_retencoes":0,
          "valor_base_calculo":"0.00",
          "valor_liquido":"'.$valordafaturacomponto.'",
          "observacoes":null,
          "valor_total_nfse":"'.$valordafaturacomponto.'",
          "valor_total_servicos":"'.$valordafaturacomponto.'",
          "Itens":[  
             [  
                {  
                   "codigo_servico":"Cod Serviço junto a prefeitura",
                   "descricao_servico":"Pagamento da fatura de numero '. $numerodafatura .'",
                   "valor_servico":"'.$valordafaturacomvirgula.'"
                }
             ]
          ]
       }
    }';


    $retorno = execute($urlnfse, $stingdanota);

    $retornodosistema = json_decode($retorno, true);
    $statusdanova = $retornodosistema['status'];
    $numerosearchkey = $retornodosistema['searchkey'];

    $statusdanotafical = $retornodosistema['status'];
    $codigodostatus = $retornodosistema['codigo'];


    $notaretorno = '{
        "ApiKey":"'.$dadosdaempresa['ApiKey'].'",
        "Cnpj":"'.$dadosdaempresa['Cnpj'].'",
        "Dados": {
            "searchkey":"'.$numerosearchkey.'"
        }
    }';

    $executar_retorno = execute($urlretorno, $notaretorno);

    try {
        Capsule::connection()->transaction(
            function ($connectionManager)
            {            

            global $numerosearchkey;
            global $numerodafatura;
            
                $connectionManager->table('tblinvoices')->where('id', $numerodafatura)->update(
                    [
                        'statusnfe' => 1,
                        'nfsesearchkey' => $numerosearchkey
                    ]
                );
                
            logActivity('MMNFSe: Foi gerado um código searchkey para a fatura de número #'.$numerodafatura.' : '.$numerosearchkey);

            }
        );
    } catch (\Exception $e) {
        echo $e->getMessage();
        exit();
    }


    $command = 'SendEmail';
    $postData = array(
        'messagename' => 'Client Signup Email',
        'id' => $iddocliente,
        'customtype' => 'general',
        'customsubject' => 'NFSe da fatura #'. $numerodafatura .' disponível!',
        'custommessage' => '
        
        Olá '. $primeironome .' '. $sobrenome .', tudo bem?
        Acabamos de disponibilizar uma nota fiscal de serviço em nosso sistema!
        Para visualizar esta nota fiscal acesse nosso sistema de nota fiscal <strong><a href="https://www.mmhospedagem.com.br/#!/notafiscal">clicando aqui!</a></strong> e informe a chave de número [ <strong>'. $numerosearchkey .'</strong> ] 
        Para ver esta e outras notas fiscais disponíveis <strong><a href="https://www.mmhospedagem.com.br/painel/nfe.php">clique aqui!</a></strong>

        ----
        Atenciosamente,
        Equipe MMHospedagem
        Tel: (062) 4101-9380
        
        ',
    );

    $results = localAPI($command, $postData);
    
    logActivity('MMNFSe: Sistema de emissão de nova finalizado com sucesso!');
    
    return $executar_retorno;

});

function execute($url, $data){
    $curl_handle = curl_init();
    curl_setopt($curl_handle, CURLOPT_URL, $url);
    curl_setopt($curl_handle, CURLOPT_POST, true);
    curl_setopt($curl_handle, CURLOPT_POSTFIELDS, $data);
    curl_setopt($curl_handle, CURLOPT_RETURNTRANSFER, TRUE);
    curl_setopt($curl_handle, CURLOPT_HTTPHEADER, array('Accept: application/json'));
    $response = curl_exec($curl_handle);
    curl_close($curl_handle);
    return $response;
}

OBS: Em breve estarei lançando um emissor de nota fiscal, dicas, sugestões são bem vindas!

Editado por MMHospedagem
Link para o comentário
Compartilhar em outros sites

Em 25/05/2019 em 23:35, Maik V Oliveira disse:

Tudo bem?
Como desenvolvi meu próprio emissor de nota fiscal estou aqui para disponibilizar uma integração com a transmite notas https://www.transmitenota.com.br/ a empresa  e muito boa quem quiser usar ta ai!

Salve o código em um arquivo .php e coloque no diretório WHMCS [Link do PDH]/includes/hooks/ 
Lembre-se de alterar os campos do CPF, CNPJ e etc...

-----------------------

<?php

use WHMCS [Link do PDH]\Database\Capsule;

// Gera a NFSe / NFe / NFc

add_hook('InvoicePaid', 1, function($vars) {

    global $numerosearchkey;
    global $numerodafatura;
    global $statusdanotafical;
    global $codigodostatus;
    global $cpfvalor;
    global $cnpjvalor;
        
    $numerodafatura = $vars['invoiceid'];

    // ID do Cliente pela fatura
    foreach (Capsule::table('tblinvoices')->where([['id','=',$numerodafatura],])->get() as $client) {
        $iddocliente = $client->userid;
        $datadopagamento = $client->datepaid;
        $valordafaturacomponto = number_format($client->total, 2, '.', '');
        $valordafaturacomvirgula = number_format($client->total, 2, ',', '');
    }

    // Tipo de Conta
    foreach (Capsule::table('tblcustomfieldsvalues')->where([['fieldid','=','460'],['relid','=',$iddocliente],])->get() as $tipodeconta) {
        $tipodecontavalor = $tipodeconta->value;
    }

    if($tipodecontavalor == '') {
        // Valor CPF
        foreach (Capsule::table('tblcustomfieldsvalues')->where([['fieldid','=','3'],['relid','=',$iddocliente],])->get() as $cpf) {
            $cpfoucnpjvalor = $cpf->value;
        }
    }

    if($tipodecontavalor == 'Pessoa Jurídica)') {
        // Valor CNPJ
        foreach (Capsule::table('tblcustomfieldsvalues')->where([['fieldid','=','461'],['relid','=',$iddocliente],])->get() as $cnpj) {
            $cpfoucnpjvalor = $cnpj->value;
        }
    }

    if($tipodecontavalor == '(Pessoa Física') {
        // Valor CPF
        foreach (Capsule::table('tblcustomfieldsvalues')->where([['fieldid','=','3'],['relid','=',$iddocliente],])->get() as $cpf) {
            $cpfoucnpjvalor = $cpf->value;
        }
    }
    
    foreach (Capsule::table('tblcustomfieldsvalues')->where([['fieldid','=','37'],['relid','=',$iddocliente],])->get() as $dados) {
        $numerowhatsapp = $dados->value;
    }

    // Dados do Cliente tblclients
    foreach (Capsule::table('tblclients')->where([['id','=',$iddocliente],])->get() as $informacoesdocliente) {
        $primeironome = $informacoesdocliente->firstname;
        $sobrenome = $informacoesdocliente->lastname;
        $email = $informacoesdocliente->email;
        $telefone = $informacoesdocliente->phonenumber;
        $endereço = $informacoesdocliente->address1;
        $bairro = $informacoesdocliente->address2;
        $cidade = $informacoesdocliente->city;
        $estato = $informacoesdocliente->state;
        $cep = $informacoesdocliente->postcode;
    }

    // Url do sistema
    $urlnfse = 'https://app1.transmitenota.com.br/api/producao/EnviarNfse/';
    $urlretorno = 'https://app1.transmitenota.com.br/api/producao/ConsultarEmissaoNotaNfse/';
    $urlenviodenfseporemail = 'https://app1.transmitenota.com.br/api/producao/ConsultarEmissaoNotaNfse/';

    $dadosdaempresa = array(
        'ApiKey' => "Senha API",
        'Cnpj' => "Numero CNPJ",
    );

    $stingdanota = '{
       "ApiKey":"'.$dadosdaempresa['ApiKey'].'",
       "Cnpj":"'.$dadosdaempresa['Cnpj'].'",
       "Dados":{  
          "natureza_operacao":"3",
          "tipo_servico":"951180000",
          "tipo_rps":"2",
          "data_emissao":"'. date("d/m/Y", strtotime($datadopagamento)) .'",
          "data_competencia":"'. date("d/m/Y", strtotime($datadopagamento)) .'",
          "razao_social_tomador":"'. $primeironome . ' ' . $sobrenome .'",
          "email_tomador":"'.$email.'",
          "cnpj_tomador":"'. preg_replace('/\D/', '',$cpfoucnpjvalor) .'",
          "inscricao_municipal_tomador":"",
          "telefone_tomador":"'. $telefone .'",
          "endereco_tomador":"'.$endereço.'",
          "numero_tomador":"2",
          "complemento_tomador":null,
          "bairro_tomador":"'.$bairro.'",
          "municipio_tomador":"'.$cidade.'",
          "uf_tomador":"'.$estato.'",
          "pais_tomador":"BRASIL",
          "cep_tomador":"'.preg_replace('/\D/', '',$cep).'",
          "numero_processo":null,
          "responsavel_retencao":null,
          "valor_deducoes":null,
          "valor_pis":0,
          "valor_cofins":0,
          "desconto_incondicionado":null,
          "desconto_condicionado":0,
          "valor_aliquota":"3.00",
          "iss_retido":"2",
          "valor_total_iss":null,
          "valor_iss_retido":0,
          "valor_outras_retencoes":0,
          "valor_base_calculo":"0.00",
          "valor_liquido":"'.$valordafaturacomponto.'",
          "observacoes":null,
          "valor_total_nfse":"'.$valordafaturacomponto.'",
          "valor_total_servicos":"'.$valordafaturacomponto.'",
          "Itens":[  
             [  
                {  
                   "codigo_servico":"Cod Serviço junto a prefeitura",
                   "descricao_servico":"Pagamento da fatura de numero '. $numerodafatura .'",
                   "valor_servico":"'.$valordafaturacomvirgula.'"
                }
             ]
          ]
       }
    }';


    $retorno = execute($urlnfse, $stingdanota);

    $retornodosistema = json_decode($retorno, true);
    $statusdanova = $retornodosistema['status'];
    $numerosearchkey = $retornodosistema['searchkey'];

    $statusdanotafical = $retornodosistema['status'];
    $codigodostatus = $retornodosistema['codigo'];


    $notaretorno = '{
        "ApiKey":"'.$dadosdaempresa['ApiKey'].'",
        "Cnpj":"'.$dadosdaempresa['Cnpj'].'",
        "Dados": {
            "searchkey":"'.$numerosearchkey.'"
        }
    }';

    $executar_retorno = execute($urlretorno, $notaretorno);

    try {
        Capsule::connection()->transaction(
            function ($connectionManager)
            {            

            global $numerosearchkey;
            global $numerodafatura;
            
                $connectionManager->table('tblinvoices')->where('id', $numerodafatura)->update(
                    [
                        'statusnfe' => 1,
                        'nfsesearchkey' => $numerosearchkey
                    ]
                );
                
            logActivity('MMNFSe: Foi gerado um código searchkey para a fatura de número #'.$numerodafatura.' : '.$numerosearchkey);

            }
        );
    } catch (\Exception $e) {
        echo $e->getMessage();
        exit();
    }


    $command = 'SendEmail';
    $postData = array(
        'messagename' => 'Client Signup Email',
        'id' => $iddocliente,
        'customtype' => 'general',
        'customsubject' => 'NFSe da fatura #'. $numerodafatura .' disponível!',
        'custommessage' => '
        
        Olá '. $primeironome .' '. $sobrenome .', tudo bem?
        Acabamos de disponibilizar uma nota fiscal de serviço em nosso sistema!
        Para visualizar esta nota fiscal acesse nosso sistema de nota fiscal <strong><a href="https://www.mmhospedagem.com.br/#!/notafiscal">clicando aqui!</a></strong> e informe a chave de número [ <strong>'. $numerosearchkey .'</strong> ] 
        Para ver esta e outras notas fiscais disponíveis <strong><a href="https://www.mmhospedagem.com.br/painel/nfe.php">clique aqui!</a></strong>

        ----
        Atenciosamente,
        Equipe MMHospedagem
        Tel: (062) 4101-9380
        
        ',
    );

    $results = localAPI($command, $postData);
    
    logActivity('MMNFSe: Sistema de emissão de nova finalizado com sucesso!');
    
    return $executar_retorno;

});

function execute($url, $data){
    $curl_handle = curl_init();
    curl_setopt($curl_handle, CURLOPT_URL, $url);
    curl_setopt($curl_handle, CURLOPT_POST, true);
    curl_setopt($curl_handle, CURLOPT_POSTFIELDS, $data);
    curl_setopt($curl_handle, CURLOPT_RETURNTRANSFER, TRUE);
    curl_setopt($curl_handle, CURLOPT_HTTPHEADER, array('Accept: application/json'));
    $response = curl_exec($curl_handle);
    curl_close($curl_handle);
    return $response;
}

----------------------------

OBS: Em breve estarei lançando um emissor de nota fiscal, dicas, sugestões são bem vindas!

Olá, boa noite!

Isso ainda funciona?

Link para o comentário
Compartilhar em outros sites

Olá meu amigo, uma dúvida esse módulo consigo selecionar individualmente cada cliente que quero emitir a nota?

E além disso se emite a nota na geração da fatura ou no pagamento? Pois tenho clientes que precisam da nota pra autorizar pagamento, e nos demais emitir nota só quando o pagamento for compensado.

 

Link para o comentário
Compartilhar em outros sites

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.

Visitante
Infelizmente, seu conteúdo contém termos que não são permitimos. Edite seu conteúdo para remover as palavras destacadas abaixo.
Responder

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emojis são permitidos.

×   Seu link foi automaticamente incorporado.   Mostrar como link

×   Seu conteúdo anterior foi restaurado.   Limpar o editor

×   Não é possível colar imagens diretamente. Carregar ou inserir imagens do URL.

  • Quem Está Navegando   0 membros estão online

    • Nenhum usuário registrado visualizando esta página.
×
×
  • Criar Novo...

Informação Importante

Concorda com os nossos termos?