Consumir webservice com certificado????

01/09/2009

Amigos,

Utilizo Delphi 6 em Windows XP

Como faço para consumir webservice com certificado digital?

Tenho o seguinte código:


   Memo1.Lines.Clear;
   Memo1.Lines.LoadFromFile( FileNameEdit1.FileName );

   defWSDL := 'https://wsh.orizonbrasil.com.br/wstiss/v20201/TransmiteMensagem?wsdl';
   defSvc  := 'tissTransmiteMensagem';
   defPrt  := 'tissTransmiteMensagem_Port';

   MyObj := CreateOleObject( 'MSSOAP.SoapClient30' );
   MyObj.ClientProperty('ServerHTTPRequest') := True;

   sc.MSSoapInit( defWSDL, defSvc, defPrt );

   sc.ConnectorProperty('Timeout') := 60000;

   r := TStringList.Create;
   r.Text := sc.tissTransmiteMensagem_Operation( Memo1.text );
   r.SaveToFile( 'resposta.xml' );


Só que acusa o seguinte erro:

---------------------------
Transmens_orizon
---------------------------
Connector:Bad certificate. HRESULT=0x800A1529 - Client:An unanticipated error occurred during the processing of this request. HRESULT=0x800A1529 - Client:Sending the Soap message failed or no recognizable response was received HRESULT=0x800A1529 - Client:Unspecified client error. HRESULT=0x800A1529.
---------------------------
OK  
---------------------------

Fico no aguardo

Obrigado

Edson



Edson Santos

Edson Santos

Curtidas 0

Respostas

Rodrigo Mourão

Rodrigo Mourão

01/09/2009

Oi amigo, desculpe a demora.

Eu não tenho o Delphi 6 aqui por isso não fiz o teste aqui. Mas me diz uma coisa, eu cosumo WebService importando o WSDL. Assim poderemos ver os metodos que serão disponibilizados.


Como eu falei não tenho aqui o Delphi 6 mas vrifique no menu File->New->Other na aba WebService verifique se há o WsdlImporter.  Se houver digite o endereço wsdl importe, gere a unit e me envie para eu analisar. Se quiser e puder claro me envie o endereço wsdl para eu verificar.

No delphi 2010 agora temo um utilitário que ao importar um WSDL com metodos que requerem o certificado digital ele já solicita o certificado. Em versões anteriores a coisa e mais complicada mas vamos ver se podemos lhe ajudar.

Ficarei no aguardo

Abs!!

Atenciosamente,
Rodrigo Carreiro Mourão
Borland Instructor Certified
Coordenador da Consultoria em Delphi


GOSTEI 0
Edson Santos

Edson Santos

01/09/2009

Rodrigo,

Desde já agradeço sua atenção.

Sim, conheço o WSDLImporter e tem me ajudado bastante em alguns casos, porém em alguns casos não consegue criar a unit ou a Unit é incompleta. Essa é uma outra dúvida, por que em alguns consegue outros não. Problema na versão? Utilizo o Delphi 6 Update Pack 2.

Só que fiz "caca" e meu Delphi não tem mais o recurso do WSDL Importer, não sei o que fiz de errado que a aba Webservices já não existe mais como opção no File\New\Other. Se puder me ajudar a recuperar........

O wsdl é https://wsh.orizonbrasil.com.br/wstiss/v20201/TransmiteMensagem?wsdl

E se não for pedir muito(rsrs). Tem muita diferença na Unit gerada no 2010 para a versão 6? Seria possível a adaptação no 6?

Obrigado










GOSTEI 0
Rodrigo Mourão

Rodrigo Mourão

01/09/2009

Opa sim tem diferença sim !!!

Os WebServices novos ja estou usando soap 1.2 se nao me engano, ou seja, versão mais nova e o importer do Delphi 6 nao contempla, as vezes so com Delphi 2007. O que eu posso fazer e gerar aqui o WSDL no Delphi 2010 e manda pra vc o .pas para ver se te ajuda.

Se der erro vc me diz qual é para ver se tentando juntos resolver. Não garanto o sucesso na operação mas e melhor do que não tentar.  Assim que chegar em casa importo. Não tenho o D2010 aqui onde estou .

Abs!


GOSTEI 0
Edson Santos

Edson Santos

01/09/2009

Rodrigo,

Se você puder gerar o .pas e me enviar, desde já agradeço. Quero tentar todas as possibilidades.

Se ainda você puder gerar a Unit nessa versão do Delphi que você tem agora e me enviar, já é um algo que posso ir adiantando aqui.

Você saberia me dizer qual o arquivo do WSDLImporter?

Obrigado
GOSTEI 0
Rodrigo Mourão

Rodrigo Mourão

01/09/2009

Repare que o acesso é via HTTPS.

Para eu acessar e gerar eu preciso ter o certificado do cliente instalado na minha maquina. Oberve este link. Ele da uma noção geral sobre isso.

http://support.microsoft.com/kb/901183
GOSTEI 0
Edson Santos

Edson Santos

01/09/2009

Rodrigo,

Como faço para te enviar o certificado?

GOSTEI 0
Rodrigo Mourão

Rodrigo Mourão

01/09/2009

Utilize o disco virtual.

Mais informações aqui: https://www.devmedia.com.br/marcadores/abrir_chamado_video/video%20como%20abrir%20chamado%20com%20video.htm

Não esqueca de me passar o link para o Arquivo no Disco.


Abs!!

Atenciosamente,
Rodrigo Carreiro Mourão
Borland Instructor Certified
Coordenador da Consultoria em Delphi
GOSTEI 0
Edson Santos

Edson Santos

01/09/2009

Rodrigo,

Segue o link

http://video.devmedia.com.br/discovirtual/223186/certwork.zip


GOSTEI 0
Rodrigo Mourão

Rodrigo Mourão

01/09/2009

Blz,

Baixei e vou verificar


Abs !!!
GOSTEI 0
Rodrigo Mourão

Rodrigo Mourão

01/09/2009

Olá Edson desculpe a demora em responder.

Eu preciso da senha que usou para exportar a chave. A demora em te responder foi porque eu estava baixando o Delphi 2010. Como não tenho licença tiver qeu baixar o trial e e um pouco grande.
Assim ja irei gerar o .pas importando o wsdl com soap 1.2 e com o certificado que me enviou. Talvez isso possa ajuda-lo.

Fico no aguardo da senha !!

Abs!!
GOSTEI 0
Edson Santos

Edson Santos

01/09/2009

Rodrigo,


A senha é orizon312.


Obrigado pela sua atenção.


Edson
GOSTEI 0
Rodrigo Mourão

Rodrigo Mourão

01/09/2009

Olá Edson,

Gerei o WSDL com sucesso no Delphi 2010, e realmente e muito simples. Quando eu fui importar o wsdl o utilitario ja identificou que precisava de um certificado e localizou o certificado que vc me enviou e que eu havia isntalado. Muito simples.

Vem aqui esta o wsdl http://video.devmedia.com.br/rodrigocarreiro/Consultoria/TransmiteMensagem.zip
Esper que ajude. Eu acredito que possa dar erro na hora de compilar pois tem navos tipos e etc. Mas nao custa tentar e me post os erros para que juntos possamos tentar adaptar a sua versao do delphi.

Abs!!
GOSTEI 0
Edson Santos

Edson Santos

01/09/2009

Rodrigo,

Estou usando a Unit gerada TransmiteMensagem. Como você já antecipou, acusou uns probleminhas na hora de compilar, mas acredito que não interfere no processo. Nesses casos, coloquei como comentário.

Meu aplicativo de teste tem o seguinte código:

procedure TForm1.Button1Click(Sender: TObject);
Var Xml : tissTransmiteMensagem_PortType;
Resposta : String;
begin
   Memo1.Lines.Clear;
   Memo1.Lines.LoadFromFile( FileNameEdit1.Text );
   Xml := GettissTransmiteMensagem_PortType( False,'' );
   Resposta := Xml.tissTransmiteMensagem_Operation( Memo1.Text );
   ShowMessage( Resposta );
end;


Só que está acusando o erro abaixo:

XML document must have a top level element.
Line: 0

GOSTEI 0
Rodrigo Mourão

Rodrigo Mourão

01/09/2009

Edson est errro é comum quando a estrutura do XML esta errada. Eu precisaria ver o conteudo que vc esta enviando como parametro para saber se esta correto.

Qual o valor que vc esta enviando ?

Fico no aguardo.

abs!

Atenciosamente,
Rodrigo Carreiro Mourão
Borland Instructor Certified
Coordenador da Consultoria em Delphi


GOSTEI 0
Edson Santos

Edson Santos

01/09/2009

Rodrigo,

Desculpe, estou te passando tudo picado. rsrsrs

Segue o arquivo XML que estou enviando.

http://video.devmedia.com.br/discovirtual/223186/medial.zip

Este arquivo é válido.


Obrigado
GOSTEI 0
Rodrigo Mourão

Rodrigo Mourão

01/09/2009

Se eu precisar testar, tipo enviar pelo webservice eu posso ???

Preciso da sua autorização pois não sei as consequencias que isto pode causar cado o arquivo seja enviado.

No aguardo !!

Abs!!

Atenciosamente,
Rodrigo Carreiro Mourão
Borland Instructor Certified
Coordenador da Consultoria em Delphi
GOSTEI 0
Edson Santos

Edson Santos

01/09/2009

Rodrigo,

Sem problema.

Caso tenha êxito, não haverá problema, pois lá é um ambiente de testes.

O que ocorrerá se tudo der certo, é vc receber uma string contendo um XML.

Se vc puder salvar esse xml de retorno e me enviar, agradeço.


Obrigado

Edson
GOSTEI 0
Edson Santos

Edson Santos

01/09/2009

Rodrigo,

Alguma novidade?


GOSTEI 0
Rodrigo Mourão

Rodrigo Mourão

01/09/2009

Esdon eu estou recebendo o memso erro. Estou fazendo os testes com o XML que me enviou.

A principio ele esta correto, validei no W3c mas o erro persiste qo enviar.

Estou procedendo com algumas alterações para tentar resolver. Voce tem alguma documentação, algo que fale sobre mensagem de erro, campos obrigatorios ou tem o DTD deste XML? Isso ajudaria.

Fico no Aguardo !!

Atenciosamente,
Rodrigo Carreiro Mourão
Borland Instructor Certified
Coordenador da Consultoria em Delphi
GOSTEI 0
Edson Santos

Edson Santos

01/09/2009

Rodrigo,

Vou te colocar a par do que é tudo isso. Esse é um arquivo contendo contas médicas do prestador para a operadora(Orizon). Na verdade a Orizon é uma empresa de conectividade e só repassa esse arquivo para seus clientes os convênios de saúde.

Essa troca de arquivos é um padrão definido pela ANS, se chama TISS(Troca de Informações em Saúde Suplementar). E no padrão está definido o consumo de ws, porém são poucas as operadoras que estão disponibilizando esse serviço. A Orizon me chamou para testar esse serviço, pois temos alguns clientes que já trabalham com os clientes da Orizon, exemplo: Maritima, Porto Seguro, Unimeds, etc.....

Conseguí explicar? rsrsrs

Esse mesmo arquivo já tinha enviado como teste para a Orizon e eles mesmo validaram. Está correto a estrutura. O problema é que não estou tendo êxito no consumo desse serviço, eles por outro lado dizem que está tudo ok com a parte deles, só faltando a minha parte.

Os schemas estão no site da ANS, você poderá acessar por este link: http://www.ans.gov.br/padroes/tiss/schemas/

Uma coisa que notei foi uma pequena diferença do wsdl da ANS com o da Orizon, mas não sei se isso poderia representar algum problema.

Obrigado pela tua atenção e fico na torcida por uma solução.


Edson


GOSTEI 0
Rodrigo Mourão

Rodrigo Mourão

01/09/2009

Edson temos um problema.

Deixa ver se eu entendi: Este WebService foi feito pela Orizon, certo. E segundo eles funciona, correto ? Se foi isto mesmo então não adianta os Schemas da ANS, temos que ter os Schemas da Oziron, e a documentação.

PQ a principio esta tudo correto sim mas por algum motivo ele nao esta validando o XML, pode ser uma coisa boba, como por exemplo o enconding. Eu precisaria de alguma documentação ou od DTD mas de quem fez os WebServices, ou seja, da Oziron.

Fico no aguardo.

Abs!!

GOSTEI 0
Rodrigo Mourão

Rodrigo Mourão

01/09/2009

Olá Edson,

FIz mais alguns testes, minha ultima cartada foi usar um  TXMLDocument para poder carregar e enviar o XML. Não adiantou, recebi o mesmo erro.

Alguma novidade quanto a documentação ou schemas DTD desta emrpesa?

No Aguardo !!


Abs !
GOSTEI 0
Rodrigo Mourão

Rodrigo Mourão

01/09/2009

Olá Edson, posso ajudar em algo mais ???

Atenciosamente,
Rodrigo Carreiro Mourão
Borland Instructor Certified
Coordenador da Consultoria em Delphi
GOSTEI 0
Edson Santos

Edson Santos

01/09/2009

Rodrigo,

Obrigado pela ajuda, mas não deu.

Quem sabe na próxima.


GOSTEI 0
POSTAR