Jump to content
cjulio

Utilizar Webservices da AT

Recommended Posts

AntonioPereira

Boas pessoal,

para quem tiver dúvidas quanto à comunicação em php


$client = new SoapClient("http://info.portaldasfinancas.gov.pt/NR/rdonlyres/A75E1110-7EB8-479E-BC09-6D5B726F6A1C/0/documentosTransporte.wsdl", array(
           'local_cert' => getcwd().'/key.pem',
           'passphrase' => "TESTEwebservice"
       ));


       $result = $client->__doRequest($this->xml,"https://servicos.portaldasfinancas.gov.pt:701/sgdtws/documentosTransporte","envioDocumentoTransporte",2,0);

Neste momento, está a dar o erro "A Data de início de transporte não pode ser anterior à data actual."

Eu não posso criar um documento com data de inicio de transporte igual à data em que emito o documento via webservice ??

Cumprimentos

Share this post


Link to post
Share on other sites
snake8856

Segundo o que já vi por aqui, a data dos transportes a comunicar deverá ser sempre futura e nunca hoje ou anterior...

O que a acontecer, é irreal, pois grande parte dos transportes apenas têm a guia no momento em que a carga é feita...

Entretanto eu ainda não saí do Erro Interno...

Estás a utilizar que utilizador?

Já criaste algum no site das finanças, ou estás a usar um de testes?

Relativamente à data/hora, quem irá usar o sistema, mesmo sendo no momento, pode sempre adiantar 2,3 min. Em termos logísticos é quase irrisório a diferença de minutos , na minha opiniao.

Em relação ao Erro Interno, é "Erro Interno" ou "Internal Error"?

Share this post


Link to post
Share on other sites
FernandoPereira

Relativamente à data/hora, quem irá usar o sistema, mesmo sendo no momento, pode sempre adiantar 2,3 min. Em termos logísticos é quase irrisório a diferença de minutos , na minha opiniao.

Em relação ao Erro Interno, é "Erro Interno" ou "Internal Error"?

É o Internal Error

Share this post


Link to post
Share on other sites
GonçaloRoque

Continuo com o Internal error, mesmo depois de ter copiado literalmente o xml do vjr12 e alterado todos os campos que o vrj12 disponibilizou... o meu xml está da seguinte forma:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
<S:Header>
<wss:Security xmlns:wss="http://schemas.xmlsoap.org/ws/2002/12/secext">
<wss:UsernameToken>
<wss:Username>512023530/1</wss:Username>
<wss:Password>ORVJYwlvPsuoHKQC+lo+IQ==
</wss:Password>
<wss:Nonce>OjKDlarC5uCph4RVhWPfCKir+dAB9KMYwQC2aR8CABR3INLb+xBVamqTC4ob1mCg8mNnRfxoD2TC
/AfvsB30uCM4ow1ZmU7/HqdRLf9KxfMxMCznSlOuBR0s/c2EQXSeZMVFQuxs7YabmLGZBziMehto
ZyZjZW3J1UNHX64e+o3l8vQmh9Q9z7/mO1gMUQHmuH2Vw9aMgWsFvCr39ZDg1aTavjvEXnUoMhng
/4DfXFb5YvsB9SmHDLcZvWqPv7xf/glrBAUP8+/uPFsaISSL9+iS61CFIh2klLFJj9k4ZpVz9rQW
4aOwUhhiOv/lAtENzzg+ICJ5Rc70joASv6MIJg==
</wss:Nonce>
<wss:Created>URZWgWZZivAgRyAu1+w6W3cqwm5pYqr/88gIYMJijhg=
</wss:Created>
</wss:UsernameToken>
</wss:Security>
</S:Header>
<S:Body>
<ns2:envioDocumentoTransporteRequestElem xmlns:ns2="https://servicos.portaldasfinancas.gov.pt/sgdtws/documentosTransporte/">
<TaxRegistrationNumber>50360....</TaxRegistrationNumber>
<CompanyName>informática</CompanyName>
<CompanyAddress>
<Addressdetail>Rua do Altor, N.1</Addressdetail>
<City>Lordelo</City>
<PostalCode>4815-178</PostalCode>
<Country>PT</Country>
</CompanyAddress>
<DocumentNumber>GT GT13/1</DocumentNumber>
<MovementStatus>N</MovementStatus>
<MovementDate>2013-03-20</MovementDate>
<MovementType>GT</MovementType>
<CustomerTaxID>999999990</CustomerTaxID>
<CustomerAddress>
<Addressdetail>teste</Addressdetail>
<City>teste</City>
<PostalCode>3333-333</PostalCode>
<Country>teste</Country>
</CustomerAddress>
<CustomerName>CustomerName</CustomerName>
<AddressTo>
<Addressdetail>teste</Addressdetail>
<City>teste</City>
<PostalCode>3333-333</PostalCode>
<Country>teste</Country>
</AddressTo>
<AddressFrom>
<Addressdetail>Rua do Alto</Addressdetail>
<City>Lordelo</City>
<PostalCode>4815-178</PostalCode>
<Country>PT</Country>
</AddressFrom>
<MovementEndTime>2013-03-20T23:59:59</MovementEndTime>
<MovementStartTime>2013-03-20T18:27:55</MovementStartTime>
<VehicleID>teste</VehicleID>
<Line>
<ProductDescription>Cafe C/ Leite</ProductDescription>
<Quantity>1</Quantity>
<UnitOfMeasure>Uni</UnitOfMeasure>
<UnitPrice>2.43902</UnitPrice>
</Line>
</ns2:envioDocumentoTransporteRequestElem>
</S:Body>
</S:Envelope>

Estou a encriptar o nonce e o created com a chavepublica tal como fiz para as faturas, e não tenho erro de handshake, pelo que assumo que o .pfx está a ser validado... Não sei mais que pensar, se algum de vós tiver ideia do que possa estar errado que me ajude....

O erro continua a ser:

<?xml version='1.0' ?>
<env:Envelope xmlns:env='http://schemas.xmlsoap.org/soap/envelope/'>
<env:Body>
<env:Fault>
<faultcode>env:Client</faultcode>
<faultstring>Internal Error</faultstring>
</env:Fault>
</env:Body>
</env:Envelope>

Obrigado,

Soraia Oliveira

Verifica o SoapAction, o qual deve ser : https://servicos.portaldasfinancas.gov.pt:701/sgdtws/documentosTransporte/

Share this post


Link to post
Share on other sites
radikal

Eu julgo que este erro "A Data de início de transporte não pode ser anterior à data actual." é facilmente ultrapassável, se lhe somarem 1 minuto à data do movimento.

O que se deve estar a passar, é que deve existir uma diferença de alguns segundos entre o momento em que a aplicação regista a hora/data do documento, e a hora/data quando comunica com o webservice.

Share this post


Link to post
Share on other sites
RFS

Boa tarde,

Rejected: | Codigo: 8 | Erro: Nonce: Não foi possível decifrar o campo | Tentativas Restantes: -1"

Alguem sabe como contornar este erro? pff

obrigado

Share this post


Link to post
Share on other sites
joao_inacio

Continuo com o Internal error, mesmo depois de ter copiado literalmente o xml do vjr12 e alterado todos os campos que o vrj12 disponibilizou... o meu xml está da seguinte forma:

.......

Obrigado,

Soraia Oliveira

VEJA O POST 532

Share this post


Link to post
Share on other sites
totalylouco

Estou aqui com umas dúvidas relativamente ao WS de transporte

Utilizo Java e tenho o seguinte código:

private void setSSLConnection(WSBindingProvider bp) throws KeyStoreException, IOException, NoSuchAlgorithmException, CertificateException,
	 UnrecoverableKeyException, KeyManagementException {
 char[] testeWSPass = "TESTEwebservice".toCharArray();//$NON-NLS-1$
 KeyStore ks = KeyStore.getInstance("pkcs12"); //$NON-NLS-1$
 ks.load(this.getClass().getClassLoader().getResourceAsStream("wsdl/TestesWebServicesTransport.pfx"), //$NON-NLS-1$
		 testeWSPass);
 KeyManagerFactory kmf = KeyManagerFactory.getInstance("SunX509"); //$NON-NLS-1$
 kmf.init(ks, testeWSPass);
 SSLContext sslContext = SSLContext.getInstance("TLS"); //$NON-NLS-1$
 // indica um conjunto de certificados confiaveis para estabelecer a ligacao SSL
 KeyStore ts = KeyStore.getInstance("JKS"); //$NON-NLS-1$
 System.out.println(testeWSPass);
 ts.load(this.getClass().getClassLoader().getResourceAsStream("wsdl/trustStore"), testeWSPass); //$NON-NLS-1$
 TrustManagerFactory tmf = TrustManagerFactory.getInstance("SunX509"); //$NON-NLS-1$
 tmf.init(ts);
 sslContext.init(kmf.getKeyManagers(), tmf.getTrustManagers(), null);
 bp.getRequestContext().put(JAXWSProperties.SSL_SOCKET_FACTORY, sslContext.getSocketFactory());
}

O que se passa é que quando utilizo a mesma trust store que utilizo para a faturação, ele devolve:

java.io.IOException: Keystore was tampered with, or password was incorrect

E quando utilizo uma trusted store gerada com o ficheiro cer que as finanças enviaram

HTTP transport error: javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: No trusted certificate found

Alguem me pode dar uma dica.

Obrigado

Edited by Rui Carlos
geSHi
  • Vote 1

Share this post


Link to post
Share on other sites
Soraia Oliveira

Obrigado pelas respostas.

Neste momento tenho o seguinte:

URL

https://servicos.portaldasfinancas.gov.pt:701/sgdtws/documentosTransporte

SOAPAction

https://servicos.portaldasfinancas.gov.pt:701/sgdtws/documentosTransporte/

Continuo com o mesmo erro.....

Este erro é o mesmo que obtemos pelo browser quando tentamos ir para o URL que coloquei acima, tal deve acontecer porque não é enviado nenhum xml quando o testamos no browser... O que me faz pensar que algo está mal com o xml, no entanto copiei o xml do vrj12 que está a funcionar neste momento e estou com o internal error.... Alguma sugestão agradeço.

Obrigado pela ajuda.

Share this post


Link to post
Share on other sites
davdew05

Continuo com o Internal error, mesmo depois de ter copiado literalmente o xml do vjr12 e alterado todos os campos que o vrj12 disponibilizou... o meu xml está da seguinte forma:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
<S:Header>
<wss:Security xmlns:wss="http://schemas.xmlsoap.org/ws/2002/12/secext">
<wss:UsernameToken>
<wss:Username>512023530/1</wss:Username>
<wss:Password>ORVJYwlvPsuoHKQC+lo+IQ==
</wss:Password>
<wss:Nonce>OjKDlarC5uCph4RVhWPfCKir+dAB9KMYwQC2aR8CABR3INLb+xBVamqTC4ob1mCg8mNnRfxoD2TC
/AfvsB30uCM4ow1ZmU7/HqdRLf9KxfMxMCznSlOuBR0s/c2EQXSeZMVFQuxs7YabmLGZBziMehto
ZyZjZW3J1UNHX64e+o3l8vQmh9Q9z7/mO1gMUQHmuH2Vw9aMgWsFvCr39ZDg1aTavjvEXnUoMhng
/4DfXFb5YvsB9SmHDLcZvWqPv7xf/glrBAUP8+/uPFsaISSL9+iS61CFIh2klLFJj9k4ZpVz9rQW
4aOwUhhiOv/lAtENzzg+ICJ5Rc70joASv6MIJg==
</wss:Nonce>
<wss:Created>URZWgWZZivAgRyAu1+w6W3cqwm5pYqr/88gIYMJijhg=
</wss:Created>
</wss:UsernameToken>
</wss:Security>
</S:Header>
<S:Body>
<ns2:envioDocumentoTransporteRequestElem xmlns:ns2="https://servicos.portaldasfinancas.gov.pt/sgdtws/documentosTransporte/">
<TaxRegistrationNumber>50360....</TaxRegistrationNumber>
<CompanyName>informática</CompanyName>
<CompanyAddress>
<Addressdetail>Rua do Altor, N.1</Addressdetail>
<City>Lordelo</City>
<PostalCode>4815-178</PostalCode>
<Country>PT</Country>
</CompanyAddress>
<DocumentNumber>GT GT13/1</DocumentNumber>
<MovementStatus>N</MovementStatus>
<MovementDate>2013-03-20</MovementDate>
<MovementType>GT</MovementType>
<CustomerTaxID>999999990</CustomerTaxID>
<CustomerAddress>
<Addressdetail>teste</Addressdetail>
<City>teste</City>
<PostalCode>3333-333</PostalCode>
<Country>teste</Country>
</CustomerAddress>
<CustomerName>CustomerName</CustomerName>
<AddressTo>
<Addressdetail>teste</Addressdetail>
<City>teste</City>
<PostalCode>3333-333</PostalCode>
<Country>teste</Country>
</AddressTo>
<AddressFrom>
<Addressdetail>Rua do Alto</Addressdetail>
<City>Lordelo</City>
<PostalCode>4815-178</PostalCode>
<Country>PT</Country>
</AddressFrom>
<MovementEndTime>2013-03-20T23:59:59</MovementEndTime>
<MovementStartTime>2013-03-20T18:27:55</MovementStartTime>
<VehicleID>teste</VehicleID>
<Line>
<ProductDescription>Cafe C/ Leite</ProductDescription>
<Quantity>1</Quantity>
<UnitOfMeasure>Uni</UnitOfMeasure>
<UnitPrice>2.43902</UnitPrice>
</Line>
</ns2:envioDocumentoTransporteRequestElem>
</S:Body>
</S:Envelope>

Estou a encriptar o nonce e o created com a chavepublica tal como fiz para as faturas, e não tenho erro de handshake, pelo que assumo que o .pfx está a ser validado... Não sei mais que pensar, se algum de vós tiver ideia do que possa estar errado que me ajude....

O erro continua a ser:

<?xml version='1.0' ?>
<env:Envelope xmlns:env='http://schemas.xmlsoap.org/soap/envelope/'>
<env:Body>
<env:Fault>
<faultcode>env:Client</faultcode>
<faultstring>Internal Error</faultstring>
</env:Fault>
</env:Body>
</env:Envelope>

Obrigado,

Soraia Oliveira

Um dos Erros pode estar na tag CustomerName que tem que aparecer antes da CustomerAddress.

Share this post


Link to post
Share on other sites
vrj12

Boas

Só por curiosidade.. neste momento estou a receber

<faultcode>3</faultcode>

<faultstring>Já foi inserido um Documento de Transporte com o número fornecido.</faultstring>

O que diz no documento da AT do dia 4 ..

3 - NIF inválido;

Mas no caso de comunicar faturas que já existam, sei que o código de erro é -3

Isto é o que faz fazer as coisas em cima do joelho...

Share this post


Link to post
Share on other sites
desconfiado

Em relação á chave simétrica aleatória estamos todos (ou quase todos) a utilizar um Random. Mas isto não garante que a chave não se repita.

No documento da AT refere:"Cada invocação do Webservice deverá conter esta chave gerada aleatoriamente e a qual não pode ser repetida.".

Será que isto não poderá vir a provocar problemas?

Qual a melhor solução de geração da chave simétrica? GUID, talvez...?

Share this post


Link to post
Share on other sites
davdew05

Em relação á chave simétrica aleatória estamos todos (ou quase todos) a utilizar um Random. Mas isto não garante que a chave não se repita.

No documento da AT refere:"Cada invocação do Webservice deverá conter esta chave gerada aleatoriamente e a qual não pode ser repetida.".

Será que isto não poderá vir a provocar problemas?

Qual a melhor solução de geração da chave simétrica? GUID, talvez...?

Eu criei uma função que gera a chave simétrica através da data, hora, ..., milissegundos + Utilizador do PC. Assim, na minha opinião é muito difícil repetir...

Share this post


Link to post
Share on other sites
vrj12

Um dos Erros pode estar na tag CustomerName que tem que aparecer antes da CustomerAddress.

Tens razão os valores que estão no CustomerName e CustomerAddress não são validos.. mas posso dizer que geram erro específicos (código postal invalido por exemplo) ma não é isso que está a fazer dar

<faultcode>env:Client</faultcode>

< faultstring>Internal Error</faultstring>

Soraia vi que estas a usar o meu XML

Diz-me o que está no teu URI e o teu soapAction

Share this post


Link to post
Share on other sites
miguel.lima

Só uma nota, no meu caso o erro 99-erro interno era causado por estar a colocar no campo MovementDate uma data inferior a 2013-04-01.

cmps

Share this post


Link to post
Share on other sites
davdew05

Tens razão os valores que estão no CustomerName e CustomerAddress não são validos.. mas posso dizer que geram erro específicos (código postal invalido por exemplo) ma não é isso que está a fazer dar

<faultcode>env:Client</faultcode>

< faultstring>Internal Error</faultstring>

Soraia vi que estas a usar o meu XML

Diz-me o que está no teu URI e o teu soapAction

Penso que não percebestes, não estava a referir-me aos valores, no teu XML as tags estão ao contrário primeiro vem a tag do CustomerName e depois o CustomerAddress

Qualquer Erro de estrutura retorna o erro acima referido. Mesmo assim, abaixo envio o que me pediste.

Soap Action: https://servicos.portaldasfinancas.gov.pt:701/sgdtws/documentosTransporte/

endereço serviço: https://servicos.portaldasfinancas.gov.pt:701/sgdtws/documentosTransporte

Boa tarde,

Por acaso, alguém já tem algum exemplo de código (vb.net) para fazer o parse do xml de resposta da AT? Agradeço qualquer ajuda.

Edited by davdew05

Share this post


Link to post
Share on other sites
crisleiria

Boa tarde,

Já integrei umas boas dezenas de guias com sucesso, algumas com erros vários justificados.

Mas volta e meia tenho um Erro Interno 99 numa ou noutra guia.

Também vos acontece? Já estive a analisar essas guias e não vejo nada de errado.

Share this post


Link to post
Share on other sites
fakada

Muito obrigado VRJ12!

Já agora, quer o CER quer o PFX só é um por produtor de software certo ? Ou é um certificado por cliente que usa a aplicação?

E mais uma vez obrigado!!!!

Cumprimentos

Fabio

.PFX É o certificado usado para comunicar.

Pass Certificado = "TESTEwebservice";

.CER É a Chave Publica para a cifra da password de acesso.

Já existem vários exemplos neste tópico de como usar a chave publica e o certificado.

Aproveito para agradecer a todas as pessoas que partilharam o seu código aqui...

Share this post


Link to post
Share on other sites
Sergio.

Muito obrigado VRJ12!

Já agora, quer o CER quer o PFX só é um por produtor de software certo ? Ou é um certificado por cliente que usa a aplicação?

E mais uma vez obrigado!!!!

Cumprimentos

Fabio

Boas

fakada

Como resolveste a questão do nonce com o openssl?

Share this post


Link to post
Share on other sites
GonçaloRoque

Muito obrigado VRJ12!

Já agora, quer o CER quer o PFX só é um por produtor de software certo ? Ou é um certificado por cliente que usa a aplicação?

E mais uma vez obrigado!!!!

Cumprimentos

Fabio

Julgo ser só um, senão era um problema grande...

Share this post


Link to post
Share on other sites

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 account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.