samuquinha Posted November 10, 2022 at 04:52 PM Report #628106 Posted November 10, 2022 at 04:52 PM Mais um adiamento...
Nel Posted November 10, 2022 at 05:37 PM Report #628107 Posted November 10, 2022 at 05:37 PM Em 10/11/2022 às 12:58, bioshock disse: Juntas-lhe o hash + a chain de certificados presumo eu. Hoje de madrugada cheguei a este ponto e não consegui pôr a funcionar porque me devolvia sempre erro 500. É só em pré-produção a anomalia? É que sem isto não dá para assinar documentos. Depois há incoerências no Swagger: O Swagger diz que o endpoint v2/credentials/authorize devolve o SAD e não devolve O Swagger não diz que no endpoint credentials/authorize/verify deve ser passado o BASIC Authentication (e provavelmente o SAFE Authorization) e deve Eu estou. Ainda não cheguei a este ponto, pois não consigo obter o SAD. Assim que eu tiver isto aceite e a bombar em produção, coloco aqui o código em PHP completo. Estas a usar o openssl_pkcs7_sign? Ou como estas a fazer?
bioshock Posted November 10, 2022 at 06:53 PM Report #628108 Posted November 10, 2022 at 06:53 PM On 11/10/2022 at 4:05 PM, CCoutinho said: Chamo a v/ atenção para a informação não-oficial que foi passada na Reunião Livre Online - 09 novembro 2022 da Ordem dos Contabilistas Certificados a partir do minuto 14 On 11/10/2022 at 4:52 PM, samuquinha said: Mais um adiamento... Já se estava mesmo a ver. Adiada novamente a obrigatoriedade da Facturação Electrónica em 2023. Até me admira que o ATCUD não tenha sido também adiado... Enfim. On 11/10/2022 at 5:37 PM, Nel said: Estas a usar o openssl_pkcs7_sign? Ou como estas a fazer? Ainda não cheguei a esse ponto. Hoje estive o dia fora e não consegui testar mais nada. Ainda não consegui obter o SAD, já conseguiste?
Nel Posted November 10, 2022 at 07:30 PM Report #628109 Posted November 10, 2022 at 07:30 PM Em 10/11/2022 às 18:53, bioshock disse: Já se estava mesmo a ver. Adiada novamente a obrigatoriedade da Facturação Electrónica em 2023. Até me admira que o ATCUD não tenha sido também adiado... Enfim. Ainda não cheguei a esse ponto. Hoje estive o dia fora e não consegui testar mais nada. Ainda não consegui obter o SAD, já conseguiste? Sim consigo obter um SAD. Testei ainda sem gerar o container para a assinatura no PDF, pois nao sei bem como fazer isso em PHP por exemplo com tcpdf. Qual o teu problema? Eu estou a gerar o hash assim: (não sei se esta correcto) $pdf_bytes = file_get_contents('Exemplo.pdf'); $hash = safe_hash($pdf_bytes); echo base64_encode($hash); function safe_hash($text) { $algo = 'sha256'; $algo_len = 32; $output = hash($algo, $text, true); $output = strlen($output) > $algo_len ? substr($output, 0, $algo_len) : $output; //prefix de sha256 $prefix = "\x30\x31\x30\x0d\x06\x09\x60\x86\x48\x01\x65\x03\x04\x02\x01\x05\x00\x04\x20"; return $prefix . $output; }
CCoutinho Posted November 10, 2022 at 08:32 PM Report #628110 Posted November 10, 2022 at 08:32 PM Em 10/11/2022 às 18:53, bioshock disse: Já se estava mesmo a ver. Adiada novamente a obrigatoriedade da Facturação Electrónica em 2023. Até me admira que o ATCUD não tenha sido também adiado... Na sessão livre falaram só dos PDF's assinados e não da faturação eletrónica para as entidades públicas.
marcolopes Posted November 10, 2022 at 09:07 PM Author Report #628113 Posted November 10, 2022 at 09:07 PM On 11/10/2022 at 6:53 PM, bioshock said: Já se estava mesmo a ver. Adiada novamente a obrigatoriedade da Facturação Electrónica em 2023. Até me admira que o ATCUD não tenha sido também adiado... Enfim. Uma coisa não tem nada a ver com a outra... A mega hiper colossal confusão que está introduzida no mercado da FACTURA ELECTRÓNICA PDF e FACTURA ELECTRÓNICA AP (Administração Pública) não tem nada a ver com algo que está funcional, bem definido, e em produção há mais de 1 ano... Quanto a mim este SAFE é uma solução do tipo "pior a emenda que o soneto", sinceramente. Eu entendo as questões de segurança, mas este processo é uma barafunda total! (ainda por cima a AMA não apresenta UM exemplo de implementação, o que dificulta o processo e apenas os sobrecarrega a própria AMA com resmas de dúvidas) Acho que muita coisa vai mudar durante o próximo ano... principalmente na questão da FE-AP. E mesmo na factura electrónica PDF, acho que o caminho é este: https://www.portugal-a-programar.pt/forums/topic/77364-at-questões-legais/page/317/#comment-627942 The simplest explanation is usually the correct one JAVA Utilities: https://github.com/marcolopes/dma
marcolopes Posted November 10, 2022 at 09:08 PM Author Report #628114 Posted November 10, 2022 at 09:08 PM (edited) On 11/10/2022 at 8:32 PM, CCoutinho said: Na sessão livre falaram só dos PDF's assinados e não da faturação eletrónica para as entidades públicas. A FE-AP vem por arrasto... A confusão ainda é maior no que toca à FE-AP... o sistema TEM de ser revisto, sob pena de "não funcionar" para grande parte dos fornecedores do estado... Edited November 10, 2022 at 09:09 PM by marcolopes The simplest explanation is usually the correct one JAVA Utilities: https://github.com/marcolopes/dma
bioshock Posted November 10, 2022 at 09:43 PM Report #628116 Posted November 10, 2022 at 09:43 PM On 11/10/2022 at 8:32 PM, CCoutinho said: Na sessão livre falaram só dos PDF's assinados e não da faturação eletrónica para as entidades públicas. Queria-me referir aos PDF's assinados e não à facturação electrónica, que sei que é outro tema diferente. Basicamente é adiado a necessidade do documento PDF ter uma assinatura digital que comprove a sua veracidade. On 11/10/2022 at 7:30 PM, Nel said: Sim consigo obter um SAD. Testei ainda sem gerar o container para a assinatura no PDF, pois nao sei bem como fazer isso em PHP por exemplo com tcpdf. Qual o teu problema? Estou a chamar o endpoint credentials/autorize/verify desta forma: $url = "https://pprsafe.autenticacao.gov.pt/credentials/authorize/verify?processId={$processId}"; $headers = [ 'Accept: application/json', 'Authorization: Basic ' . base64_encode('clientTest:Test'), 'SAFEAuthorization: Bearer ' . $accessToken ]; $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'GET'); curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); $response = curl_exec($ch); $httpcode = curl_getinfo($ch, CURLINFO_HTTP_CODE); curl_close($ch); $response = json_decode($response); No entanto é-me devolvido o erro 500. Na documentação nem diz em lado nenhum que deves utilizar o Authorization: Basic, mas sem isso retorna-me 401 forbidden. Relativamente ao hash, também não sei ainda se está OK, mas tenho a coisa um bocado mais simples: private function hashPDF($fileUrl) { $hash = hash_file('sha256', $fileUrl); $sha256SignPrefix = ['x30', 'x31', 'x30', 'x0d', 'x06', 'x09', 'x60', 'x86', 'x48', 'x01', 'x65', 'x03', 'x04', 'x02', 'x01', 'x05', 'x00', 'x04', 'x20']; $sha256SignPrefix = implode('\\', $sha256SignPrefix); $concat = $sha256SignPrefix . $hash; return $concat; }
Nel Posted November 10, 2022 at 10:56 PM Report #628118 Posted November 10, 2022 at 10:56 PM Em 10/11/2022 às 21:43, bioshock disse: Queria-me referir aos PDF's assinados e não à facturação electrónica, que sei que é outro tema diferente. Basicamente é adiado a necessidade do documento PDF ter uma assinatura digital que comprove a sua veracidade. Estou a chamar o endpoint credentials/autorize/verify desta forma: $url = "https://pprsafe.autenticacao.gov.pt/credentials/authorize/verify?processId={$processId}"; $headers = [ 'Accept: application/json', 'Authorization: Basic ' . base64_encode('clientTest:Test'), 'SAFEAuthorization: Bearer ' . $accessToken ]; $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'GET'); curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); $response = curl_exec($ch); $httpcode = curl_getinfo($ch, CURLINFO_HTTP_CODE); curl_close($ch); $response = json_decode($response); No entanto é-me devolvido o erro 500. Na documentação nem diz em lado nenhum que deves utilizar o Authorization: Basic, mas sem isso retorna-me 401 forbidden. Relativamente ao hash, também não sei ainda se está OK, mas tenho a coisa um bocado mais simples: private function hashPDF($fileUrl) { $hash = hash_file('sha256', $fileUrl); $sha256SignPrefix = ['x30', 'x31', 'x30', 'x0d', 'x06', 'x09', 'x60', 'x86', 'x48', 'x01', 'x65', 'x03', 'x04', 'x02', 'x01', 'x05', 'x00', 'x04', 'x20']; $sha256SignPrefix = implode('\\', $sha256SignPrefix); $concat = $sha256SignPrefix . $hash; return $concat; } Estas a usar a versão nova. Eu estou a usar o credentials/autorize
bioshock Posted November 10, 2022 at 11:20 PM Report #628119 Posted November 10, 2022 at 11:20 PM On 11/10/2022 at 10:56 PM, Nel said: Estas a usar a versão nova. Eu estou a usar o credentials/autorize Hm? Eu também. Mas depois do credentials/authorize tens de chamar o credentials/authorize/verify, e é neste último endpoint que está o meu problema. O valor do campo processID, enviado no credentials/authorize/verify, presumo eu que é sempre o mesmo..
Nel Posted November 10, 2022 at 11:44 PM Report #628120 Posted November 10, 2022 at 11:44 PM Em 10/11/2022 às 23:20, bioshock disse: Hm? Eu também. Mas depois do credentials/authorize tens de chamar o credentials/authorize/verify, e é neste último endpoint que está o meu problema. O valor do campo processID, enviado no credentials/authorize/verify, presumo eu que é sempre o mesmo.. Na versão anterior não necessitas. Chamas assim o "credentials/autorize" com o seguinte, que ele devolve o SAD { "clientData": { "clientName": "clientTest", "documentNames": [ "documentName1" ], "processId": "a015722c-456e-4abc-9efb-d774936ce749" }, "credentialID": "f0c3aba7-11f2-4994-936d-2c68bd2cbf44", "hashes": [ "MDEwDQYJYIZIAWUDBAIBBQAEILyv2oDRjRYGhF8FhFrdAP46Kd272FHm/xqnNfBKg8ES" ], "numSignatures": 1 }
bioshock Posted November 11, 2022 at 12:05 AM Report #628121 Posted November 11, 2022 at 12:05 AM (edited) On 11/10/2022 at 11:44 PM, Nel said: Na versão anterior não necessitas. Chamas assim o "credentials/autorize" com o seguinte, que ele devolve o SAD { "clientData": { "clientName": "clientTest", "documentNames": [ "documentName1" ], "processId": "a015722c-456e-4abc-9efb-d774936ce749" }, "credentialID": "f0c3aba7-11f2-4994-936d-2c68bd2cbf44", "hashes": [ "MDEwDQYJYIZIAWUDBAIBBQAEILyv2oDRjRYGhF8FhFrdAP46Kd272FHm/xqnNfBKg8ES" ], "numSignatures": 1 } Ah certo, ok. 👍 E consegues passar para o endpoint sign/hash? Eu estou a enviar algo deste género: { "sad": "YWM0MDRjMjItMzRmNC00ZjA4LTljOTQtOTE0ZmU4YWIzNzIy", "hashes": [ "\\x30\\x31\\x30\\x0d\\x06\\x09\\x60\\x86\\x48\\x01\\x65\\x03\\x04\\x02\\x01\\x05\\x00\\x04\\x20309a975f758e7b2f367fef62ea6b58bff2159d6697d665e83cd10fe6930ab0bc" ], "signAlgo": "1.2.840.113549.1.1.11", "clientData": { "processId": "..............", "clientName": "clientTest" }, "credentialID": "............." } Mas obtenho {"error":"Internal Server Error","error_description":"Unexpected error while processing client request"} Edit: resolvido este bug, tinha de devolver a hash do PDF em base64. Edited November 11, 2022 at 12:24 AM by bioshock
Nel Posted November 11, 2022 at 12:29 AM Report #628122 Posted November 11, 2022 at 12:29 AM Em 11/11/2022 às 00:05, bioshock disse: Ah certo, ok. 👍 E consegues passar para o endpoint sign/hash? Eu estou a enviar algo deste género: { "sad": "YWM0MDRjMjItMzRmNC00ZjA4LTljOTQtOTE0ZmU4YWIzNzIy", "hashes": [ "\\x30\\x31\\x30\\x0d\\x06\\x09\\x60\\x86\\x48\\x01\\x65\\x03\\x04\\x02\\x01\\x05\\x00\\x04\\x20309a975f758e7b2f367fef62ea6b58bff2159d6697d665e83cd10fe6930ab0bc" ], "signAlgo": "1.2.840.113549.1.1.11", "clientData": { "processId": "..............", "clientName": "clientTest" }, "credentialID": "............." } Mas obtenho {"error":"Internal Server Error","error_description":"Unexpected error while processing client request"} Para o signatures/signHash envio isto e funciona. Deve dar erro por causa da tua hash, acho que o prefix não pode ir da forma que tens. { "clientData": { "clientName": "clientTest", "processId": "a015722c-456e-4abc-9efb-d774936ce749" }, "credentialID": "f0c3aba7-11f2-4994-936d-2c68bd2cbf44", "hashes": [ "MDEwDQYJYIZIAWUDBAIBBQAEILyv2oDRjRYGhF8FhFrdAP46Kd272FHm/xqnNfBKg8ES" ], "sad": "MGI5MWJkMTctNjBiNC00OGVkLWE4MDctOTk0ZjMyMWI3ZGE3", "signAlgo": "1.2.840.113549.1.1.11" }
bioshock Posted November 11, 2022 at 12:46 AM Report #628123 Posted November 11, 2022 at 12:46 AM On 11/11/2022 at 12:29 AM, Nel said: Para o signatures/signHash envio isto e funciona. Deve dar erro por causa da tua hash, acho que o prefix não pode ir da forma que tens. { "clientData": { "clientName": "clientTest", "processId": "a015722c-456e-4abc-9efb-d774936ce749" }, "credentialID": "f0c3aba7-11f2-4994-936d-2c68bd2cbf44", "hashes": [ "MDEwDQYJYIZIAWUDBAIBBQAEILyv2oDRjRYGhF8FhFrdAP46Kd272FHm/xqnNfBKg8ES" ], "sad": "MGI5MWJkMTctNjBiNC00OGVkLWE4MDctOTk0ZjMyMWI3ZGE3", "signAlgo": "1.2.840.113549.1.1.11" } Editei o post, faltava-me o base64, já bomba.
MiguelAl Posted November 11, 2022 at 09:09 AM Report #628128 Posted November 11, 2022 at 09:09 AM On 11/10/2022 at 4:52 PM, samuquinha said: Mais um adiamento... Podes-me dizer onde está esta notícia? Não consigo encontrar o despacho...
iznougudpt Posted November 11, 2022 at 11:55 AM Report #628132 Posted November 11, 2022 at 11:55 AM Em 11/11/2022 às 09:09, MiguelAl disse: Podes-me dizer onde está esta notícia? Não consigo encontrar o despacho... Pelo que percebi no vídeo (só vi 1 ou 2 minutos), o despacho só irá sair em Dezembro (supostamente).
Nel Posted November 11, 2022 at 07:24 PM Report #628140 Posted November 11, 2022 at 07:24 PM Em 11/11/2022 às 00:46, bioshock disse: Editei o post, faltava-me o base64, já bomba. Conseguiste fazer algum avanço com o PDF? Eu ainda não consegui nada de jeito!
bioshock Posted November 11, 2022 at 09:02 PM Report #628141 Posted November 11, 2022 at 09:02 PM On 11/11/2022 at 7:24 PM, Nel said: Conseguiste fazer algum avanço com o PDF? Eu ainda não consegui nada de jeito! Sim consegui, já tenho isto a adicionar a assinatura & o documento adicionado. Estou a utilizar um serviço pago, não estou a utilizar TCPDF. Em breve vou partilhar aqui o código. Dá-me alguns dias, falta-me resolver a situação do Access Token, enviar o código para a SAFE/AMA e assim que for autorizado, coloco aqui. 👍 Estou só com dificuldades em obter o Access Token dinamicamente, mas acho que já sei porquê.
samuquinha Posted November 14, 2022 at 10:56 AM Report #628151 Posted November 14, 2022 at 10:56 AM Em 11/11/2022 às 09:09, MiguelAl disse: Podes-me dizer onde está esta notícia? Não consigo encontrar o despacho... Pela info do CCoutinho, em 10-11-2022, https://youtu.be/WHVIWHBhSs8 (a partir do minuto 14)
samuquinha Posted November 14, 2022 at 03:16 PM Report #628155 Posted November 14, 2022 at 03:16 PM Estou a fazer testes e o que até há alguns pedidos a trás na chamada do endpoint "https://preprod.autenticacao.gov.pt/oauthresourceserver/api/AttributeManager" me devolvia: algo contendo o accessToken, refresToken e oauthToken passou a devolver: "value":"{\"error\":\"Requested signature account already exists\",\"error_description\":\"Account already exists for citizen signatureAccountKeyAlias: BIxxxxxxxxyyyyyyyyyzzzzzzzz\"}" Qual o motivo para tal? Neste momento já está a devolver accessToken, refresToken e oauthToken. Pretendo agora invocar o endpoint "https://preprod.autenticacao.gov.pt/credentials/info", no entanto não sei quais os tokens a usar, nomeadamente no header "SAFEAuthorization" e "Authorization", bem como no parametro "processId". Alguém já passou por esta fase? Abraço
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now