Upload Certificado NFe

Pessoal, boa tarde!

Estou com a seguinte dúvida: desenvolvi para meu cliente a parte de emissão de NFe. Até aí, tudo beleza. Funciona direitinho.

Minha dúvida é que eu gostaria de automatizar, digamos assim, o processo de subir o certificado da empresa, ou seja, gostaria de fazer algo do tipo onde o usuário ao receber o certificado, subisse para o banco de dados, em um campo tipo blob e o nfephp pudesse gerar as notas a partir desse certificado. Consegui subir, eu já consegui. Mas agora estou vendo como pegar o caminho de onde está o certificado pra poder gerar o .json.

Alguém poderia me dar uma luz?

Não eh assim que funciona.
O certificado precisa ser convertido e um arquivo gerado fisicamente no servidor.

https://app.assembla.com/wiki/show/nfephp/Certificado_Digital/10

Bom, continuando aqui. Estou tentando gravar o arquivo pfx então em uma pasta em vez de gravar na tabela. Porém não está gravando na pasta correta dentro de file/doc. Essa pasta está com permissão mas mesmo assim não grava. Parece que está gravando só na pasta tmp.
Porque será que isso está acontecendo?

Em tempo, já olhei em Aplicação->Configuração e o caminho dos documentos está /scriptcase/file/doc.

Na configuração do campo (Documento Nome de Arquivo), o campo subdiretório está com o nome da pasta que eu quero e a opção Criar subdiretório habilitado.

Obrigado.

Alguém por favor teria alguma luz para que eu possa resolver isso?
Já verifiquei permissões e nada de gravar na pasta correta.

Qual tipo de certificado digital vc ta usando?

Reinaldo, desculpe mas eu não entendi sua pergunta.

Se é feito upload só pode ser certificado tipo A1.
Se a certificação é feita pelo PHP o tipo de.certificado só pode ser A1.

Olá Thyago,
ver esse link, pode te ajudar.

Thiago tem vários tipos de Certificados digitais né
A1
A3
SERVER
ETC…
Pergunto porque exceto o tipo A3 que é criptografado através de mídias físicas tais como Token, Cartão, Leitora etc…os outros são encriptados por arquivos que podem rodar em 3 camadas. Por isso que perguntei.
Mesmo se você tiver Certificado tipo 3, ainda sim dá pra usar numa aplicação web porém exige muito mais do seu conhecimento pra efetuar as validações, mais TODOS são possíveis efetuar transações sejam numa aplicação local como numa aplicação WEB. porém o recomendado para aplicações em 3 camadas são certificados para servidores, muito mais rápido para integrar em sua aplicação. Recomendo você primeiro estudar sobre os certificados disponíveis no mercado e suas atribuições, e só depois você pensaria nas próximas etapas. abraços.

1 Curtida

Bom dia pessoal. Voltando ao tópico: Tentei duas coisas:

  1. Eu salvo o certificado no blob, com campo Documento (Banco de dados), e tento grava-lo no servidor com o código abaixo:

    <?php sc_commit_trans(); //Coloco meu arquivo BLOB na variável $arquivo $arquivo = {nfe_certificado_arquivo};

    //Este é o caminho que quero criar os arquivos com o nome de cada um
    //$caminho = “MINHA_PASTA/”.$query->nome_documento_original;
    $caminho = $this->Ini->path_doc."_certificado/".{nfe_certificado_nome_arquivo};

    //Este comando cria o PDF com base dos arquivos binários listados do banco
    //Abre o arquivo
    $fp = fopen($caminho, “w+”);
    //Escreve dentro do arquivo o conteudo binário salvo no banco
    $criaPDF = fwrite($fp, $arquivo);
    //Fecha o arquivo
    fclose($fp);
    ?>

Porém me apresenta o erro que está na imagem a seguir:

  1. Tentei gravar também apenas o nome do arquivo no servidor, com o campo Documento (Nome do Arquivo) e informo lá o nome da pasta. Porém, não grava nada. A pasta está com permissão e na configuração da aplicação e configuração do campo está conforme imagens abaixo


Configuração App


Configuração Campo

P.S.: Versão do Scriptcase: 9.3.012. Servidor Windows

Alguém que pudesse me dar uma luz do que possa estar errado aqui por favor?

Desde já agradeço!

Consegui resolver inserindo o seguinte no código passado na mensagem anterior:

$caminho = $_SERVER['DOCUMENT_ROOT'].$this->Ini->path_doc."/certificado/";

if(!is_dir($caminho)){mkdir($caminho, 0755);}