Independente da missão de nossa saga, seja esta de alegria ou desgraça, o Brasil tem que ser defendido!
        15
        01

        PHP - Nota Fiscal Paulista

        Sim, estou meio azarado, tive que desenvolver sistema com integração com a nota fiscal paulista, bem vamos lá, a integração funciona da seguinte forma:
         
         
         
        O sistema recebe o pedido de um cliente chato que quer a nota fiscal paulista, então o sistema gera um arquivo em conformidade com a nota fiscal de venda ao consumidor layout 1, layout 2 ou layout de cupom fiscal(somente quando se tem uma impressora fiscal), são três layout, cada empresa se adequa a uma delas, para gerar esses arquivos deve-se seguir as diretrizes das leis conforme os seguintes links:
         
         
        Modelo layout 1:
         
        http://www.nfp.fazenda.sp.gov.br/leg03_port102_07.shtm
         
        Modelo layout 2:
         
        http://www.nfp.fazenda.sp.gov.br/leg03_port98_07.shtm
         
        Cupom fiscal :
         
         
        Fico devendo, rsrs.
         
         
        Depois de gerar esse arquivo, você deve envia-lo via webservice utilizando-se o protocolo soap, inicialmente pensei utilizar uma classe nativa do PHP para fazer isso, mas quando vi que teria que fazer várias customizações, preferi fazer tudo na mão, essa integração consiste em dois métodos, o primeiro enviar onde se envia o arquivo e se obtém o protocolo do envio, ou resposta de erro devido a alguma irregularidade no soap, o método consultar consiste em você verificar o status de determinado protocolo(arquivo enviado) junto a receita,  segue o código:
         
         
         
                     ///////////////////////////// enviar ///////////////////////////
                    $nome_arquivo = md5("Exemplo_mod1");
                       
                        $arquivo = file_get_contents("Exemplo_mod1.txt");
                       

                        $soap_request  = "<?xml version="1.0" encoding="utf-8"?>";
                        $soap_request  .= "<soap12:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"";
                        $soap_request  .= " xmlns:xsd="http://www.w3.org/2001/XMLSchema" ";
                        $soap_request  .= " xmlns:soap12="http://www.w3.org/2003/05/soap-envelope"> ";
                        $soap_request  .= "<soap12:Header>";
                        $soap_request  .= "<Autenticacao Usuario="xxxxxxxxxxx" Senha="xxxxxx" CNPJ="xx.xxx.xxx/xxxx-xx"";
                        $soap_request  .= " CategoriaUsuario="3" xmlns="https://www.nfp.sp.gov.br/ws" />";
                        $soap_request  .= "</soap12:Header>";
                        $soap_request  .= "<soap12:Body>";
                        $soap_request  .= "<Enviar xmlns="https://www.nfp.sp.gov.br/ws">";
                        $soap_request  .= "<NomeArquivo>".$nome_arquivo."</NomeArquivo>";
                        $soap_request  .= "<ConteudoArquivo>".$arquivo."</ConteudoArquivo>";
                        $soap_request  .= "<EnvioNormal>false</EnvioNormal>";
                        $soap_request  .= "<Observacoes></Observacoes>";
                        $soap_request  .= "</Enviar>";
                        $soap_request  .= "</soap12:Body>";
                        $soap_request  .= "</soap12:Envelope>";  
                      ////////////////////////////////////////////////////////////



         
                                    $soap_do = curl_init();
                        curl_setopt($soap_do, CURLOPT_URL, "https://www.nfp.fazenda.sp.gov.br/ws/arquivocf.asmx" );
                        curl_setopt($soap_do, CURLOPT_CONNECTTIMEOUT, 10);
                        curl_setopt($soap_do, CURLOPT_TIMEOUT,        10);
                        curl_setopt($soap_do, CURLOPT_RETURNTRANSFER, true );
                        curl_setopt($soap_do, CURLOPT_SSL_VERIFYPEER, false);
                        curl_setopt($soap_do, CURLOPT_SSL_VERIFYHOST, false);
                        curl_setopt($soap_do, CURLOPT_POST,           true );
                        curl_setopt($soap_do, CURLOPT_POSTFIELDS,     $soap_request);
                        curl_setopt($soap_do, CURLOPT_HTTPHEADER,     $header);
                        $resultadotransacao = curl_exec($soap_do);
                       
                        if($resultadotransacao === false) {
                            $err = 'Curl error: ' . curl_error($soap_do);
                            curl_close($soap_do);
                            print $err;
                        } else {
                            echo $resultadotransacao;
                        }
         
         
         
         
         
        //////////////////////       consultar     //////////////////////////
        $soap_request  = "<?xml version="1.0" encoding="utf-8"?>";
                        $soap_request  .= "<soap12:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" ";
                        $soap_request  .= " xmlns:xsd="http://www.w3.org/2001/XMLSchema" ";
                        $soap_request  .= " xmlns:soap12="http://www.w3.org/2003/05/soap-envelope">";
                        $soap_request  .= "<soap12:Header>";
                        $soap_request  .= "<Autenticacao Usuario="xxxxxxxxxxx" Senha="xxxxxx" CNPJ="xx.xxx.xxx/xxxx-xx"";
                        $soap_request  .= " CategoriaUsuario="3" xmlns="https://www.nfp.sp.gov.br/ws" />";
                        $soap_request  .= "</soap12:Header>";
                        $soap_request  .= "<soap12:Body>";
                        $soap_request  .= "<Consultar xmlns="https://www.nfp.sp.gov.br/ws">";
                        $soap_request  .= "<Protocolo>".$protocolo."</Protocolo>";
                        $soap_request  .= "</Consultar>";
                        $soap_request  .= "</soap12:Body>";
                        $soap_request  .= "</soap12:Envelope>";
                  
                        $header = array(
                            "Content-type: text/xml;charset="utf-8"",
                            "Accept: text/xml",
                            "Cache-Control: no-cache",
                            "Pragma: no-cache",
                            "SOAPAction: "run"",
                            "Content-length: ".strlen($soap_request),
                        );
                     ///////////////////////////////////////////////////////////////
         
         
                        $soap_do = curl_init();
                        curl_setopt($soap_do, CURLOPT_URL, "https://www.nfp.fazenda.sp.gov.br/ws/arquivocf.asmx" );
                        curl_setopt($soap_do, CURLOPT_CONNECTTIMEOUT, 10);
                        curl_setopt($soap_do, CURLOPT_TIMEOUT,        10);
                        curl_setopt($soap_do, CURLOPT_RETURNTRANSFER, true );
                        curl_setopt($soap_do, CURLOPT_SSL_VERIFYPEER, false);
                        curl_setopt($soap_do, CURLOPT_SSL_VERIFYHOST, false);
                        curl_setopt($soap_do, CURLOPT_POST,           true );
                        curl_setopt($soap_do, CURLOPT_POSTFIELDS,     $soap_request);
                        curl_setopt($soap_do, CURLOPT_HTTPHEADER,     $header);
                        $resultadotransacao = curl_exec($soap_do);
                       
                        if($resultadotransacao === false) {
                            $err = 'Curl error: ' . curl_error($soap_do);
                            curl_close($soap_do);
                            print $err;
                        } else {
                            echo $resultadotransacao;
                        }
         
         
         
         
        A resposta é retornado do servidor tanto no enviar quanto no consultar, o usuário é um cpf ou cpnj cadastrado na nfp, a senha do usuário é aquela que está cadastrada para acesso ao sistema da nota fiscal paulista e o cnpj é identificação do remetente(empresa) do arquivo gerado.

        Comentários

        Visitante : Everton Pereira


        Uma pergunta: é necessário ter certificado digital pra usar o webservice deles?


        Visitante : Rafael


        Não, neste caso não é preciso.


        Visitante : Nome


        Mensagem


        Visitante : Luiz Carlos


        É possível customizar esse código para o envio de vários arquivos automaticamente? Att;


        Visitante : Rafael


        Sim, é possivel, teoricamente você precisaria fazer um loop que consistiria em ler todos os arquivos de um determinando diretório, existe funções nativas do php para essa varredura de arquivos.


        Tipo de Posts
        Parceiros
        Feed

        Entre com o seu e-mail:

        Sobre

        Rafael Nonato Ribeiro Ferreira, graduado em Análise e Desenvolvimento de Sistemas pela Uninove, programador nas linguagens PHP, JavaScript, JQuery e Java, desenvolvedor web HTML e CSS desenvolve e modela em SGBDs Mysql, PostGreSQL e Oracle, atualmente trabalha como Analista e Desenvolvedor de Sistemas, é um brasileiro, cristão, patriota filiado ao PSOL e com convicções politicas próprias conforme será mostrado em seu futuro site www.constituicaoproposta.com.br, nas horas de folga gosta de tocar seu violão e compor letras de múisca, Torço para o São Paulo e para a Portela.

        © Copyright 2012 NRF Informática Soluções. All Rights Reserved.