desconfiado Posted February 12, 2019 at 02:17 PM Report #613720 Posted February 12, 2019 at 02:17 PM Boa tarde, Alguém sabe se a AT disponibiliza algum webservice para envio da DMR (AT)? Estou-me a referir à DMR que é enviada á AT e não a que é enviada á segurança social (têm ambas o mesmo nome mas são diferentes). Para enviar á segurança social eu sei que existe e já tenho desenvolvido mas não consigo encontrar nada para enviar á Autoridade Tributária. No entanto existe um site que tem uma aplicação que diz que faz o envio destes ficheiros á AT.
ccue2003 Posted April 3, 2019 at 08:59 PM Report #614209 Posted April 3, 2019 at 08:59 PM Boa noite Pode disponibilizar o código ou a linha de orientação para conseguir enviar o ficheiro DMR para segurança social Obrigado
desconfiado Posted May 16, 2019 at 07:34 AM Author Report #614767 Posted May 16, 2019 at 07:34 AM Em 03/04/2019 às 21:59, ccue2003 disse: Boa noite Pode disponibilizar o código ou a linha de orientação para conseguir enviar o ficheiro DMR para segurança social Obrigado Peço desculpa por só agora ter respondido. Esqueci-me completamente deste tópico. O envio da DMR da segurança social podes obter toda a informação aqui http://www.plataformaservicos.seg-social.pt/ . Eles são muito complicados, tens que pedir credenciais de teste e dar um IP pois os testes só funcionam a partir de um IP.
DavidC Posted July 13, 2020 at 01:46 PM Report #618766 Posted July 13, 2020 at 01:46 PM (edited) EDIT: vi agora que estou no thread errado, o que eu quero é a Segurnaça Social Boas, ando agora tentar implementar o envio da DMR por webservice, mas estou com dificuldades em anexar o ficheiro. Alguém me pode dar uma pista? Ou um exemplo? Obrigado Edited July 13, 2020 at 01:48 PM by DavidC Thread errado
Psousa Posted January 29, 2021 at 07:23 PM Report #621106 Posted January 29, 2021 at 07:23 PM Boas tardes. Alguém tem o WSDL para o envio da DMR à segurança social que possa disponibilizar ? Obrigado.
Carlos Pais Posted February 12, 2022 at 09:55 AM Report #625401 Posted February 12, 2022 at 09:55 AM Bom Dia Cá estou eu mais uma vez, a tentar colocar o webserver no envio das DMR da AT e Seg.Social, mas a maior parte da informação desapareceu, no portal das finanças, já nem existe qualquer informação, no da seg. social, há lá muitas lacunas , alguém tem alguma informação que possa disponibilizar ... ( pdf, wsdl, codigo ... ) Obrigado 😵😴🥵🥴 No Desenvolvimento as Possibilidades são Infinitas 😵😴🥵🥴 , podemos é ficar doidos ...
desconfiado Posted February 22, 2022 at 10:27 AM Author Report #625446 Posted February 22, 2022 at 10:27 AM Em 12/02/2022 às 09:55, Carlos Pais disse: Bom Dia Cá estou eu mais uma vez, a tentar colocar o webserver no envio das DMR da AT e Seg.Social, mas a maior parte da informação desapareceu, no portal das finanças, já nem existe qualquer informação, no da seg. social, há lá muitas lacunas , alguém tem alguma informação que possa disponibilizar ... ( pdf, wsdl, codigo ... ) Obrigado O link que coloquei acima há já algum tempo continua em funcionamento. Este é para a DMR da segurança social. Não existe nenhum webservice para envio da DMR da AT (que eu saiba). PS: Isto de chamar DMR ás 2 declarações confunde um bocado.
Carlos Pais Posted February 23, 2022 at 02:53 PM Report #625466 Posted February 23, 2022 at 02:53 PM Em 22/02/2022 às 10:27, desconfiado disse: O link que coloquei acima há já algum tempo continua em funcionamento. Este é para a DMR da segurança social. Não existe nenhum webservice para envio da DMR da AT (que eu saiba). PS: Isto de chamar DMR ás 2 declarações confunde um bocado. boas, essa documentação eu já tenho, eu queria era algum código já meio feito, algo que estivesse a funcionar ... 😵😴🥵🥴 No Desenvolvimento as Possibilidades são Infinitas 😵😴🥵🥴 , podemos é ficar doidos ...
desconfiado Posted February 23, 2022 at 03:36 PM Author Report #625467 Posted February 23, 2022 at 03:36 PM Em 23/02/2022 às 15:53, Carlos Pais disse: boas, essa documentação eu já tenho, eu queria era algum código já meio feito, algo que estivesse a funcionar ... O código é simples demais. No envio de ficheiros tens basicamente 3 funções: RegistarFicheiro SubstituirFicheiro ConsultarFicheiro Se programas em .NET podes utilizar os webservices references do próprio VS para obter as especificações dos serviçosa através da WSDL. Depois é só chamar os serviços. É um bocado básico mas aqui tens o código. private void RegistarFicheiro() { try { SSWS_GestaoFicheiros.gestaoficheiro myWS = new SSWS_GestaoFicheiros.gestaoficheiro(); if (ckTeste.CheckState == Windows.Forms.CheckState.Checked) myWS.Url = "https://preapp.seg-social.pt/ws/gr/v1/gestaoFicheiro?wsdl"; else myWS.Url = "https://app.seg-social.pt/ws/gr/v1/gestaoFicheiro?wsdl"; myWS.Credentials = GetMyCredentials(); byte[] myFile = System.IO.File.ReadAllBytes(txtFicheiro.Text); var resp = myWS.registarFicheiro(myFile, Path.GetFileName(txtFicheiro.Text)); txtID.Text = resp; registaLog("Registo Ficheiro (ID: " + txtID.Text + ") " + txtFicheiro.Text, resp); MsgBox("Ficheiro registado com sucesso. ID Ficheiro: " + resp, MsgBoxStyle.Information); } catch (Exception ex) { Interaction.MsgBox(ex.Message, MsgBoxStyle.Critical); registaLog("Erro Registo Ficheiro " + txtFicheiro.Text, ""); } } private void SubstituirFicheiro() { string idAnt = txtID.Text; try { SSWS_GestaoFicheiros.gestaoficheiro myWS = new SSWS_GestaoFicheiros.gestaoficheiro(); if (ckTeste.CheckState == Windows.Forms.CheckState.Checked) myWS.Url = "https://preapp.seg-social.pt/ws/gr/v1/gestaoFicheiro?wsdl"; else myWS.Url = "https://app.seg-social.pt/ws/gr/v1/gestaoFicheiro?wsdl"; myWS.Credentials = GetMyCredentials(); byte[] myFile = System.IO.File.ReadAllBytes(txtFicheiro.Text); var resp = myWS.substituirFicheiro(myFile, txtFicheiro.Text, txtID.Text); txtID.Text = resp; registaLog("Substituição Ficheiro com ID: " + TxtIDant.Text + " por ficheiro (ID: " + txtID.Text + ") " + txtFicheiro.Text, resp); MsgBox("Ficheiro substituido com sucesso. ID Ficheiro: " + resp, MsgBoxStyle.Information); } catch (Exception ex) { Interaction.MsgBox(ex.Message, MsgBoxStyle.Critical); registaLog("Erro Registo Ficheiro " + txtFicheiro.Text, ""); } } private void ConsultarFicheiro() { try { SSWS_GestaoFicheiros.gestaoficheiro myWS = new SSWS_GestaoFicheiros.gestaoficheiro(); if (ckTeste.CheckState == Windows.Forms.CheckState.Checked) myWS.Url = "https://preapp.seg-social.pt/ws/gr/v1/gestaoFicheiro?wsdl"; else myWS.Url = "https://app.seg-social.pt/ws/gr/v1/gestaoFicheiro?wsdl"; myWS.Credentials = GetMyCredentials(); var resp = myWS.consultarFicheiro(txtID.Text); switch (resp.estado) { case "0": { string dirPath = Path.GetDirectoryName(txtFicheiro.Text); string nomeFich = dirPath + @"\" + resp.nomeFicheiro; File.WriteAllBytes(nomeFich, resp.lstErrosAlertasZip); registaLog("Ficheiro " + resp.estadoFicheiro + ", ID: " + txtID.Text + ", Fich=" + resp.nomeFicheiro, txtID.Text); var abre = MsgBox("Ficheiro " + resp.estadoFicheiro + "." + IIf(resp.dataEntregaSpecified, Constants.vbNewLine + "Data Entrega: " + resp.dataEntrega, "") + IIf(resp.dataLimiteSubstituicaoSpecified, Constants.vbNewLine + "Data Limite Substituição: " + resp.dataLimiteSubstituicao, "") + "Pretende abrir o ficheiro para consultar os alertas/erros?", MsgBoxStyle.YesNo); if (abre) Process.Start(nomeFich); break; } default: { MsgBox(resp.mensagem, MsgBoxStyle.Information); break; } } } catch (Exception ex) { Interaction.MsgBox(ex.Message, MsgBoxStyle.Critical); } } Depois tens mais 2 serviços, um de consulta da situação do funcionário e outro de registo de vinculo do funcionário. Mas como digo são bastante básicos.
Carlos Pais Posted February 23, 2022 at 04:16 PM Report #625468 Posted February 23, 2022 at 04:16 PM obrigado pela partilha, mais logo já vejo, apesar do meu software ser em vb.net , e não em c#, mas vou converter.. 😵😴🥵🥴 No Desenvolvimento as Possibilidades são Infinitas 😵😴🥵🥴 , podemos é ficar doidos ...
febra69 Posted April 4, 2022 at 04:35 PM Report #625700 Posted April 4, 2022 at 04:35 PM Boas Existe webservice da AT para envio do DMR. WEBSERVICE AT DMR Estou a ter problemas na ligação Inicialmente estava a ir buscar o wsdl, adicionando "?wsdl" ao link Depois descarreguei o ficheiro zip que eles disponibilizam, e aparece-me o seguinte erro SOAP-ERROR: Parsing Schema: can't import schema from 'oaatws.xsd', namespace must not match the enclosing schema 'targetNamespace' De seguida comentei o código que gerava o erro <xsd:import namespace="https://servicos.portaldasfinancas.gov.pt/oaatws/GestaoDeclarativaOAWebService/2021" schemaLocation="oaatws.xsd"/> Começou a aparecer o seguinte erro object(SoapFault)#3 (9) { ["message":protected]=> string(25) "Could not connect to host" ["string":"Exception":private]=> string(0) "" ["code":protected]=> int(0) ["file":protected]=> string(78) "teste-AT.php" ["line":protected]=> int(67) ["trace":"Exception":private]=> array(2) { [0]=> array(3) { ["function"]=> string(11) "__doRequest" ["class"]=> string(10) "SoapClient" ["type"]=> string(2) "->" } [1]=> array(5) { ["file"]=> string(78) "teste-AT.php" ["line"]=> int(67) ["function"]=> string(6) "__call" ["class"]=> string(10) "SoapClient" ["type"]=> string(2) "->" } } ["previous":"Exception":private]=> NULL ["faultstring"]=> string(25) "Could not connect to host" ["faultcode"]=> string(4) "HTTP" } Deixo aqui o meu código de exemplo <?php class WsseAuthHeader extends SoapHeader { //Policy Server Certificates private $PubKeyCertificate; //Header Authentication private $header; function __construct($PubKeyCertificate, $user, $pass) { //Policy Server Certificates $this->PubKeyCertificate = $PubKeyCertificate; //Método Cipher $cipher_ecb = 'aes-128-ecb'; $pubkey = openssl_pkey_get_public(file_get_contents($this->PubKeyCertificate)); $pkey = openssl_pkey_get_details($pubkey); $pub_key = $pkey['key']; $Created = gmdate('Y-m-d\TH:i:s\.00\Z'); $SimetricKey = bin2hex(openssl_random_pseudo_bytes(16)); openssl_public_encrypt($SimetricKey, $encryt_nonce, $pub_key); $Nonce = base64_encode($encryt_nonce); $Concat = $SimetricKey.$Created.$pass; $Size = mcrypt_get_block_size('des', 'ecb'); $Password_PKCS5 = $this->pkcs5_pad($pass, $Size); $encrypt_password = openssl_encrypt($Password_PKCS5, $cipher_ecb, $SimetricKey, OPENSSL_RAW_DATA); $EncodePassword = base64_encode($encrypt_password); $Concat_PKCS5 = $this->pkcs5_pad($Concat, $Size); $encryt_digest = openssl_encrypt($Concat_PKCS5, $cipher_ecb, $SimetricKey, OPENSSL_ALGO_SHA1); $EncodeDigest = base64_encode($encryt_digest); $this->header = '<S:Header> <wss:Security xmlns:wss="https://schemas.xmlsoap.org/ws/2002/12/secext/" at:Version="2"> <wss:UsernameToken> <wss:Username>'.$user.'</wss:Username> <wss:Password Digest="'.$EncodeDigest.'">'.$EncodePassword.'</wss:Password> <wss:Nonce>'.$Nonce.'</wss:Nonce> <wss:Created>'.$Created.'</wss:Created> </wss:UsernameToken> </wss:Security> </S:Header>'; } public function gerar_xml_validar($file) { $versao = '2021.0'; $modelo = 'DMR'; $file_encode = base64_encode(file_get_contents($file)); $this->xml_validar = '<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns="https://servicos.portaldasfinancas.gov.pt/oaatws/GestaoDeclarativaOAWebService/2021"> '.$this->header.' <S:Body> <ns:validarDeclaracaoRequest> <versaoDeclaracao>'.$versao.'</versaoDeclaracao> <declaracao>'.$file_encode.'</declaracao> <modelo>'.$modelo.'</modelo> </ns:validarDeclaracaoRequest> </S:Body> </S:Envelope>'; } private function pkcs5_pad ($text, $blocksize) { $pad = $blocksize - (strlen($text) % $blocksize); return $text . str_repeat(chr($pad), $pad); } } $Protocol = 'https://'; $TestPort = '718'; //Hostname $Hostname = 'servicos.portaldasfinancas.gov.pt'; //URL if(_DEBUG_) $soap_uri = $Protocol.$Hostname.':'.$TestPort.'/oaatws/GestaoDeclarativaOAWebService'; else $soap_uri = $Protocol.$Hostname.'/oaatws/GestaoDeclarativaOAWebService'; //Location if(_DEBUG_) $soap_location = $Protocol.$Hostname.':'.$TestPort.'/oaatws/GestaoDeclarativaOAWebService/'; else $soap_location = $Protocol.$Hostname.'/oaatws/GestaoDeclarativaOAWebService/'; if(_DEBUG_) $wsdl = $Protocol.$Hostname.':'.$TestPort.'/oaatws/GestaoDeclarativaOAWebService?wsdl'; else $wsdl = $Protocol.$Hostname.'/oaatws/GestaoDeclarativaOAWebService?wsdl'; $wsdl = "/path/to/oaatws.wsdl"; //Policy Server Certificates $PubKeyCertificate = "/path/to/Chave.cer"; $CertPfx = "/path/to/Certs.pfx"; $CertPem = "/path/to/Certs.pem"; $Passphase = 'TESTEwebservice'; $Username_cliente = '599999993/37'; $Password_cliente = 'testes1234'; $file_dmr = 'DMR_FILE.TXT'; try { $XML = new WsseAuthHeader($PubKeyCertificate, $Username_cliente, $Password_cliente); $params = array( 'trace' => true, 'keep_alive' => true, 'exceptions' => false, 'cache_wsdl' => WSDL_CACHE_NONE, 'uri' => $soap_uri, 'location' => $soap_location, 'local_cert' => $CertPfx, 'passphrase' => $Passphase ); $client = new SoapClient($wsdl, $params); $XML->gerar_xml_validar($file_dmr); $validar = $client->validarDeclaracao($XML->xml_validar); var_dump($validar); } catch(SoapFault $exception) { echo $exception->getMessage(); } Alguém me pode ajudar MrG0DL3
Pelikan Posted August 29, 2022 at 05:00 PM Report #627027 Posted August 29, 2022 at 05:00 PM Em 23/02/2022 às 15:36, desconfiado disse: O código é simples demais. No envio de ficheiros tens basicamente 3 funções: RegistarFicheiro SubstituirFicheiro ConsultarFicheiro Se programas em .NET podes utilizar os webservices references do próprio VS para obter as especificações dos serviçosa através da WSDL. Depois é só chamar os serviços. É um bocado básico mas aqui tens o código. private void RegistarFicheiro() { try { SSWS_GestaoFicheiros.gestaoficheiro myWS = new SSWS_GestaoFicheiros.gestaoficheiro(); if (ckTeste.CheckState == Windows.Forms.CheckState.Checked) myWS.Url = "https://preapp.seg-social.pt/ws/gr/v1/gestaoFicheiro?wsdl"; else myWS.Url = "https://app.seg-social.pt/ws/gr/v1/gestaoFicheiro?wsdl"; myWS.Credentials = GetMyCredentials(); byte[] myFile = System.IO.File.ReadAllBytes(txtFicheiro.Text); var resp = myWS.registarFicheiro(myFile, Path.GetFileName(txtFicheiro.Text)); txtID.Text = resp; registaLog("Registo Ficheiro (ID: " + txtID.Text + ") " + txtFicheiro.Text, resp); MsgBox("Ficheiro registado com sucesso. ID Ficheiro: " + resp, MsgBoxStyle.Information); } catch (Exception ex) { Interaction.MsgBox(ex.Message, MsgBoxStyle.Critical); registaLog("Erro Registo Ficheiro " + txtFicheiro.Text, ""); } } private void SubstituirFicheiro() { string idAnt = txtID.Text; try { SSWS_GestaoFicheiros.gestaoficheiro myWS = new SSWS_GestaoFicheiros.gestaoficheiro(); if (ckTeste.CheckState == Windows.Forms.CheckState.Checked) myWS.Url = "https://preapp.seg-social.pt/ws/gr/v1/gestaoFicheiro?wsdl"; else myWS.Url = "https://app.seg-social.pt/ws/gr/v1/gestaoFicheiro?wsdl"; myWS.Credentials = GetMyCredentials(); byte[] myFile = System.IO.File.ReadAllBytes(txtFicheiro.Text); var resp = myWS.substituirFicheiro(myFile, txtFicheiro.Text, txtID.Text); txtID.Text = resp; registaLog("Substituição Ficheiro com ID: " + TxtIDant.Text + " por ficheiro (ID: " + txtID.Text + ") " + txtFicheiro.Text, resp); MsgBox("Ficheiro substituido com sucesso. ID Ficheiro: " + resp, MsgBoxStyle.Information); } catch (Exception ex) { Interaction.MsgBox(ex.Message, MsgBoxStyle.Critical); registaLog("Erro Registo Ficheiro " + txtFicheiro.Text, ""); } } private void ConsultarFicheiro() { try { SSWS_GestaoFicheiros.gestaoficheiro myWS = new SSWS_GestaoFicheiros.gestaoficheiro(); if (ckTeste.CheckState == Windows.Forms.CheckState.Checked) myWS.Url = "https://preapp.seg-social.pt/ws/gr/v1/gestaoFicheiro?wsdl"; else myWS.Url = "https://app.seg-social.pt/ws/gr/v1/gestaoFicheiro?wsdl"; myWS.Credentials = GetMyCredentials(); var resp = myWS.consultarFicheiro(txtID.Text); switch (resp.estado) { case "0": { string dirPath = Path.GetDirectoryName(txtFicheiro.Text); string nomeFich = dirPath + @"\" + resp.nomeFicheiro; File.WriteAllBytes(nomeFich, resp.lstErrosAlertasZip); registaLog("Ficheiro " + resp.estadoFicheiro + ", ID: " + txtID.Text + ", Fich=" + resp.nomeFicheiro, txtID.Text); var abre = MsgBox("Ficheiro " + resp.estadoFicheiro + "." + IIf(resp.dataEntregaSpecified, Constants.vbNewLine + "Data Entrega: " + resp.dataEntrega, "") + IIf(resp.dataLimiteSubstituicaoSpecified, Constants.vbNewLine + "Data Limite Substituição: " + resp.dataLimiteSubstituicao, "") + "Pretende abrir o ficheiro para consultar os alertas/erros?", MsgBoxStyle.YesNo); if (abre) Process.Start(nomeFich); break; } default: { MsgBox(resp.mensagem, MsgBoxStyle.Information); break; } } } catch (Exception ex) { Interaction.MsgBox(ex.Message, MsgBoxStyle.Critical); } } Depois tens mais 2 serviços, um de consulta da situação do funcionário e outro de registo de vinculo do funcionário. Mas como digo são bastante básicos. Olá Desconfiado, estou a pensar usar estas funcionalidades disponibilizadas pela Segurança Social, usando o wdsl no vb.net. O código acima partilhado vai provavelmente ajudar bastante, mas gostava de ver a função GetMyCredentials (sem o nif+pass, evidentemente), se a puderes partilhar, assim como a chamada à consulta de funcionário, agradecia.
desconfiado Posted August 29, 2022 at 08:16 PM Author Report #627028 Posted August 29, 2022 at 08:16 PM (edited) 3 horas atrás, Pelikan disse: Olá Desconfiado, estou a pensar usar estas funcionalidades disponibilizadas pela Segurança Social, usando o wdsl no vb.net. O código acima partilhado vai provavelmente ajudar bastante, mas gostava de ver a função GetMyCredentials (sem o nif+pass, evidentemente), se a puderes partilhar, assim como a chamada à consulta de funcionário, agradecia. Boas. Essa função não tem interesse nenhum porque apenas vai buscar á BD o utilizador e a password de acesso ao webservice (que é a mesma do acesso ao Segurança Social Directa se não me engano). private NetworkCredential GetMyCredentials() { if (testMode) { LoginSS = "xxxxxxxxx"; PasswordSS = "xxxxxxxx"; } else { //... } return new NetworkCredential(LoginSS, PasswordSS); } Edited August 29, 2022 at 08:18 PM by desconfiado
Pelikan Posted August 31, 2022 at 09:23 AM Report #627043 Posted August 31, 2022 at 09:23 AM Em 29/08/2022 às 21:16, desconfiado disse: Boas. Essa função não tem interesse nenhum porque apenas vai buscar á BD o utilizador e a password de acesso ao webservice (que é a mesma do acesso ao Segurança Social Directa se não me engano). private NetworkCredential GetMyCredentials() { if (testMode) { LoginSS = "xxxxxxxxx"; PasswordSS = "xxxxxxxx"; } else { //... } return new NetworkCredential(LoginSS, PasswordSS); } Obrigado pela partilha, pensei que fosse mais complicado a parte das credenciais. Qdo me derem o acesso ao ambiente de testes vou experimentar.
Rafael Faria Posted September 29, 2022 at 09:26 AM Report #627416 Posted September 29, 2022 at 09:26 AM Em 23/02/2022 às 15:36, desconfiado disse: O código é simples demais. No envio de ficheiros tens basicamente 3 funções: RegistarFicheiro SubstituirFicheiro ConsultarFicheiro Se programas em .NET podes utilizar os webservices references do próprio VS para obter as especificações dos serviçosa através da WSDL. Depois é só chamar os serviços. É um bocado básico mas aqui tens o código. private void RegistarFicheiro() { try { SSWS_GestaoFicheiros.gestaoficheiro myWS = new SSWS_GestaoFicheiros.gestaoficheiro(); if (ckTeste.CheckState == Windows.Forms.CheckState.Checked) myWS.Url = "https://preapp.seg-social.pt/ws/gr/v1/gestaoFicheiro?wsdl"; else myWS.Url = "https://app.seg-social.pt/ws/gr/v1/gestaoFicheiro?wsdl"; myWS.Credentials = GetMyCredentials(); byte[] myFile = System.IO.File.ReadAllBytes(txtFicheiro.Text); var resp = myWS.registarFicheiro(myFile, Path.GetFileName(txtFicheiro.Text)); txtID.Text = resp; registaLog("Registo Ficheiro (ID: " + txtID.Text + ") " + txtFicheiro.Text, resp); MsgBox("Ficheiro registado com sucesso. ID Ficheiro: " + resp, MsgBoxStyle.Information); } catch (Exception ex) { Interaction.MsgBox(ex.Message, MsgBoxStyle.Critical); registaLog("Erro Registo Ficheiro " + txtFicheiro.Text, ""); } } private void SubstituirFicheiro() { string idAnt = txtID.Text; try { SSWS_GestaoFicheiros.gestaoficheiro myWS = new SSWS_GestaoFicheiros.gestaoficheiro(); if (ckTeste.CheckState == Windows.Forms.CheckState.Checked) myWS.Url = "https://preapp.seg-social.pt/ws/gr/v1/gestaoFicheiro?wsdl"; else myWS.Url = "https://app.seg-social.pt/ws/gr/v1/gestaoFicheiro?wsdl"; myWS.Credentials = GetMyCredentials(); byte[] myFile = System.IO.File.ReadAllBytes(txtFicheiro.Text); var resp = myWS.substituirFicheiro(myFile, txtFicheiro.Text, txtID.Text); txtID.Text = resp; registaLog("Substituição Ficheiro com ID: " + TxtIDant.Text + " por ficheiro (ID: " + txtID.Text + ") " + txtFicheiro.Text, resp); MsgBox("Ficheiro substituido com sucesso. ID Ficheiro: " + resp, MsgBoxStyle.Information); } catch (Exception ex) { Interaction.MsgBox(ex.Message, MsgBoxStyle.Critical); registaLog("Erro Registo Ficheiro " + txtFicheiro.Text, ""); } } private void ConsultarFicheiro() { try { SSWS_GestaoFicheiros.gestaoficheiro myWS = new SSWS_GestaoFicheiros.gestaoficheiro(); if (ckTeste.CheckState == Windows.Forms.CheckState.Checked) myWS.Url = "https://preapp.seg-social.pt/ws/gr/v1/gestaoFicheiro?wsdl"; else myWS.Url = "https://app.seg-social.pt/ws/gr/v1/gestaoFicheiro?wsdl"; myWS.Credentials = GetMyCredentials(); var resp = myWS.consultarFicheiro(txtID.Text); switch (resp.estado) { case "0": { string dirPath = Path.GetDirectoryName(txtFicheiro.Text); string nomeFich = dirPath + @"\" + resp.nomeFicheiro; File.WriteAllBytes(nomeFich, resp.lstErrosAlertasZip); registaLog("Ficheiro " + resp.estadoFicheiro + ", ID: " + txtID.Text + ", Fich=" + resp.nomeFicheiro, txtID.Text); var abre = MsgBox("Ficheiro " + resp.estadoFicheiro + "." + IIf(resp.dataEntregaSpecified, Constants.vbNewLine + "Data Entrega: " + resp.dataEntrega, "") + IIf(resp.dataLimiteSubstituicaoSpecified, Constants.vbNewLine + "Data Limite Substituição: " + resp.dataLimiteSubstituicao, "") + "Pretende abrir o ficheiro para consultar os alertas/erros?", MsgBoxStyle.YesNo); if (abre) Process.Start(nomeFich); break; } default: { MsgBox(resp.mensagem, MsgBoxStyle.Information); break; } } } catch (Exception ex) { Interaction.MsgBox(ex.Message, MsgBoxStyle.Critical); } } Depois tens mais 2 serviços, um de consulta da situação do funcionário e outro de registo de vinculo do funcionário. Mas como digo são bastante básicos. Boas, podes-me ajudar? Eu gerei os serviços através da WSDL, no entanto estou com grandes dificuldades em colocá-los a funcionar. Após ter gerador os serviços, ao meu ficheiro de configuração (App.config) foi acrescentado o seguinte: <system.serviceModel> <bindings> <basicHttpBinding> <binding name="GestaoFicheiroWSPortBinding" messageEncoding="Mtom"> <security mode="Transport"> </security> </binding> <binding name="GestaoFicheiroWSPortBinding1" messageEncoding="Mtom" /> </basicHttpBinding> </bindings> <client> <endpoint address="https://app.seg-social.pt:443/ws/gr/v1/gestaoFicheiro" binding="basicHttpBinding" bindingConfiguration="GestaoFicheiroWSPortBinding" contract="ServiceReference2.GestaoFicheiroWS" name="GestaoFicheiroWSPort" /> </client> </system.serviceModel> No entanto, ao tentar realizar um request, por exemplo registar um ficheiro recebia uma mensagem a dizer "O pedido HTTP foi desautorizado com o esquema de autenticação de cliente 'Anonymous'. O cabeçalho de autenticação recebido a partir do servidor foi 'Basic realm="weblogic"'.". Após pesquisar, disseram-me para acrescentar o seguinte ao ficheiro: <transport clientCredentialType="Basic"/> Ficando este assim: <system.serviceModel> <bindings> <basicHttpBinding> <binding name="GestaoFicheiroWSPortBinding" messageEncoding="Mtom"> <security mode="Transport"> <transport clientCredentialType="Basic" /> </security> </binding> <binding name="GestaoFicheiroWSPortBinding1" messageEncoding="Mtom" /> </basicHttpBinding> </bindings> <client> <endpoint address="https://app.seg-social.pt:443/ws/gr/v1/gestaoFicheiro" binding="basicHttpBinding" bindingConfiguration="GestaoFicheiroWSPortBinding" contract="SegSocialWebServiceGestaoFicheiros.GestaoFicheiroWS" name="GestaoFicheiroWSPort" /> </client> </system.serviceModel> Mas agora recebo esta exceção "O servidor devolveu uma falha SOAP inválida. Consulte InnerException para obter mais detalhes. ---> System.Xml.XmlException: Prefixo desvinculado utilizado no nome qualificado 'S:Client'" e não sei como resolver. Já pesquisei bastante, mas não encontrei nada. Estou a começar a trabalhar com soap e ainda não percebo muito disto.
desconfiado Posted September 29, 2022 at 11:33 AM Author Report #627421 Posted September 29, 2022 at 11:33 AM (edited) Configuraste isso como um service ou com web reference no VS? Deves configurar como Web Reference e não como Service Reference. Parece-me, pela configuração que colocaste aí, que está como "Service Reference". Esse serviço é básico demais para isso. Edited September 29, 2022 at 11:37 AM by desconfiado
Rafael Faria Posted September 29, 2022 at 01:48 PM Report #627422 Posted September 29, 2022 at 01:48 PM 2 horas atrás, desconfiado disse: Configuraste isso como um service ou com web reference no VS? Deves configurar como Web Reference e não como Service Reference. Parece-me, pela configuração que colocaste aí, que está como "Service Reference". Esse serviço é básico demais para isso. Foi como um service, vou tentar com web reference, Muito Obrigado pela resposta.
Rafael Faria Posted September 29, 2022 at 05:11 PM Report #627423 Posted September 29, 2022 at 05:11 PM 5 horas atrás, desconfiado disse: Configuraste isso como um service ou com web reference no VS? Deves configurar como Web Reference e não como Service Reference. Parece-me, pela configuração que colocaste aí, que está como "Service Reference". Esse serviço é básico demais para isso. Testei com o serviço de consultar declarações e funcionou, vou ver com o de registar ficheiro. Muito Obrigado! 🙂
p3druh77 Posted October 4, 2022 at 05:24 PM Report #627468 Posted October 4, 2022 at 05:24 PM Boa tarde, O que consideram ser o campo Digest para a autenticação? Na documentação colocam o seguinte: Ks+Created+SenhaPF := São os bytes dos três campos concatenados; O Ks já é um random_bytes de 16, mas os outros 2 não, converteram para alguma tipo de array ou codificaram ? Obrigado
Rafael Faria Posted October 11, 2022 at 03:37 PM Report #627525 Posted October 11, 2022 at 03:37 PM (edited) Em 04/10/2022 às 18:24, p3druh77 disse: Boa tarde, O que consideram ser o campo Digest para a autenticação? Na documentação colocam o seguinte: Ks+Created+SenhaPF := São os bytes dos três campos concatenados; O Ks já é um random_bytes de 16, mas os outros 2 não, converteram para alguma tipo de array ou codificaram ? Obrigado Boas, fiz isto: byte[] ksBytes = ks.Key; byte[] time = Encoding.UTF8.GetBytes(timestamp); byte[] pwd = Encoding.UTF8.GetBytes("pass"); byte[] combined = new byte[ksBytes.Length + time.Length + pwd.Length]; Array.Copy(ksBytes, combined, ksBytes.Length); Array.Copy(time, 0, combined, ksBytes.Length, time.Length); Array.Copy(pwd, 0, combined, ksBytes.Length + time.Length, pwd.Length); Edited October 12, 2022 at 10:26 AM by Rafael Faria
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