Olá a todos!
Estou há 3 dias pesquisando sobre como assinar digitalmente um arquivo pdf com Python, porém nenhuma proposta funcionou no Python 3.8.
O meu problema consiste no seguinte:
Crio contratos no word e salvo no formato PDF em uma pasta.
O que eu preciso é criar um aplicativo em Python que abra um arquivo pdf já criado e assine-o digitalmente através de um Certificado Digital pfx. Essa assinatura deveria ser inserida no final de cada documento. Já tentei várias ferramentas, porém nenhuma funcionou no Python 3.8. Alguém tem conhecimento sobre o assunto, utiliza, ou saberia dar alguma dica? Obrigado!
Resumo:
implementar assinatura digital na camada de transporte para consumir um web service externo.
Adiante segue o script e a mensagem de erro.
Detalhes:
Não, não se trata de Nfe.... brinks
E infelizmente não consegui pesquisar tópicos antigos porque a páginação do fórum está com problemas (na página de pesquisa ele não passa da primeira =D )....
Bom, o meu caso é o seguinte:
Aqui na empresa temos um sistema financeiro e de controle jurídico que roda em um cartório já a bastante tempo. E um dos módulos consumia o web service do tribunal de justiça local para algumas atividades. Em apenas uma dessas atividades será necessário implementar a assinatura digital para autenticação junto a este web service.
Script:
/* * Envia xml ao tjce: * * $args = array( * 'xml' => 'conteudo do xml', * 'service' => 'nome do servico na URL', * 'action' => 'metodo para chamar no webservice' * ); * */ public function send($args){ //dados $xml = $args['xml']; $service = $args['service']; $action = $args['action']; $wsdl = 'https://selodigital.tjce.jus.br/wsselodigital-homologacao/' . $service . '?wsdl'; // //testa instalacao do soap no servidor if (!class_exists('SoapClient')){ die ("Falha na instalação do soap no servidor."); } $wsdl = $wsdl; $localCert = "/caminho/do/certificado.pem"; $soapClient = new SoapClient($wsdl, array('localCert' => $local_cert)); $theResponse = $soapClient->metodoTeste(); echo $theResponse; }
Erro:
Fatal error: Uncaught SoapFault exception: [soap:Server] Fault occurred while processing. in /Users/danielrodrigues/Sites/open-system/openselos/system/controller/SoapController.php:40 Stack trace: #0 /Users/danielrodrigues/Sites/open-system/openselos/system/controller/SoapController.php(40): SoapClient->__call('historicoSolici...', Array) #1 /Users/danielrodrigues/Sites/open-system/openselos/system/controller/SoapController.php(40): SoapClient->historicoSolicitacaoSelos() #2 /Users/danielrodrigues/Sites/open-system/openselos/system/controller/SealController.php(163): SoapController->send(Array) #3 /Users/danielrodrigues/Sites/open-system/openselos/system/controller/MainController.php(23): SealController->test() #4 /Users/danielrodrigues/Sites/open-system/openselos/system/controller/FrontController.php(37): MainController->run('Seal', 'test') #5 /Users/danielrodrigues/Sites/open-system/openselos/system/index.php(9): FrontController->run() #6 {main} thrown in /Users/danielrodrigues/Sites/open-system/openselos/system/controller/SoapController.php on line 40
Complementando:
Talvez o problema seja a forma que estou gerando o .pem. Nunca trabalhei com assinatura digital e realmente estou bastante perdido nesse assunto.
Gerei esta chave .pem a partir do arquivo .pfx seguindo estes passos:
http://www.rafaeltheodoro.com.br/nfe/conversao-de-certificado-ca-tipo-a1-de-pfx-para-pem/