Autenticação Webservice com Delphi 7

Delphi

11/06/2015

Olá.

importei pelo WSDL importer do Delphi 7, criando a unit, o endereço é https://spcpreproducao.cdl-sc.org.br/spc-web/ConsultaSpcscService?wsdl,
faço uma consulta faço o

var
ob_filtro : filtroConsultaConfirmeTelefoneWS;
ob_result : RespostaConsultaConfirmeTelefone;
serv : ConsultaSpcScWSService;
RIO : THTTPRIO;
begin
//EDT_CPF
ob_filtro := filtroConsultaConfirmeTelefoneWS.Create;
ob_result := RespostaConsultaConfirmeTelefone.Create;

serv := ConsultaSpcScService.GetConsultaSpcScWSService(True,'',htpr1);

ob_filtro.cpfCnpj := EDT_CPF.Text;

ob_result := serv.ConfirmeTelefone_91(ob_filtro);
end;

o problema que tenho é a autenticação.
tentei setar
Rio.HTTPWebNode.UserName := 'User';
RIO.HTTPWebNode.Password := 'Pass';

mas não funciona sempre me retorna --> Erro Autenticação WS.

Alguém teria alguma sugestão, uso HTTRIO,
Felix Vier

Felix Vier

Curtidas 0

Melhor post

Dorivan Sousa

Dorivan Sousa

19/06/2015

olha o delphi 7 nao funciona bem com os webservices mais recentes, tem que fazer uma jogada no proprio delphi substituindo umas units. sugiro vc testar em uma versao mais recente.

aqui tem a referencia da atualizacao do soap
http://www.activedelphi.com.br/forum/viewtopic.php?t=57184
http://www.tecnospeed.com.br/forum/componente-nfe/componente-soap-do-delphi7-altera-o-decimalseparator/
GOSTEI 1

Mais Respostas

Felix Vier

Felix Vier

11/06/2015

Ninguém ????
GOSTEI 0
Felix Vier

Felix Vier

11/06/2015

Obrigado amigo pela dica, até já tinha feito em parte, faltava só colocar, as propriedades ditas aqui -> http://www.tecnospeed.com.br/forum/componente-nfe/componente-soap-do-delphi7-altera-o-decimalseparator/, no meu projeto.

mas, continuo tendo o mesmo problema, a autenticação,
me retorna sempre -> <faultstring>Erro Autenticacao WS</faultstring> OU <faultcode>soap:Autenticação WS</faultcode>

n sei o que fazer testei o webservice no SOAP UI, e funcionou, no SOAP UI ele requer tipo de autenticação Preemptive, será que tem algo a ver.

Grato,
GOSTEI 0
Dorivan Sousa

Dorivan Sousa

11/06/2015

tem que ser com THTTPRIO??
GOSTEI 0
Felix Vier

Felix Vier

11/06/2015

Não, na verdade nunca trabalhei com webservice no delphi, vi um tutotial usando THTTPRIO,
e estou tentando tbm com THTTPReqResp, mas tenho o mesmo erro em ambos.
GOSTEI 0
Dorivan Sousa

Dorivan Sousa

11/06/2015

eu fiz a importação do wsdl e realmente tem que ser com httprio
function GetConsultaSpcScWSService(UseWSDL: Boolean; Addr: string; HTTPRIO: THTTPRIO): ConsultaSpcScWSService;


seguinte no seu codigo vc tem uma variavel Rio:THTTPrio e na hora que vc chama o GetConsultaSpcScWSService vc informa um htpr1.

vc ja configurou nesse htpr1 o usuario e a senha? pq vc mostra um codigo abaixo apontando pro RIO.
Rio.HTTPWebNode.UserName := 'User';
RIO.HTTPWebNode.Password := 'Pass';
GOSTEI 0
Felix Vier

Felix Vier

11/06/2015

Opa fiz um pouco de confusão ali.
mas já tentei na minha "tela", passando pelo htpr1 e
já tentei dentro da função GetConsultaSpcScWSService, onde tem uma variável RIO, que recebe este HTTRRIO (htpr1)

fiz um outro projeto do zero e neste outro projeto me da o erro

An invalid character was found in text content.
Line: 1
<soap:Envelope xmlns:soap="http://schema.
GOSTEI 0
Dorivan Sousa

Dorivan Sousa

11/06/2015

eu tive um problema com um webservice pra nota fiscal eletronica de serviço... o que fiz foi corrigir o request antes de enviar...

vc nao tem uma versao mais recente do delphi pra refazer essa importação do wsdl e testar nele... acredito que vai funcionar.
GOSTEI 0
Felix Vier

Felix Vier

11/06/2015

Aí esta, tento tbm no delphi XE5, e me ocorre o mesmo Erro,

Erro Autenticação WS.


a senha e usuário estão corretos, o usuário e mandado assim XXXXX:XXXXXXXX e tem a senha ainda. Que são mais 6 caracteres
pois utilizei assim no SOAPUI e funciona certinho.
GOSTEI 0
Dorivan Sousa

Dorivan Sousa

11/06/2015

coloca uma senha errada pra vc se a mensagem muda
GOSTEI 0
Felix Vier

Felix Vier

11/06/2015

A mensagem continua a mesma
GOSTEI 0
Felix Vier

Felix Vier

11/06/2015

já procurei e tentei mudar métodos de autenticação, mas não encontrei nada,
talvez seja algo nessa questão. Pois como Disse no SOAP UI, funciona com o usuário e senha e me retorna dados.
GOSTEI 0
Dorivan Sousa

Dorivan Sousa

11/06/2015

na segunda eu vou tentar fazer, gostei da ideia da consulta no spc.
GOSTEI 0
Felix Vier

Felix Vier

11/06/2015

Sim é interessante, e preciso fazem em delphi 7, mas estou tendo este problema na autenticação.
GOSTEI 0
Felix Vier

Felix Vier

11/06/2015

você não sabe se é necessário utilizar os métodos

  
if not InternetSetOption(Data,
                           INTERNET_OPTION_PROXY_USERNAME,
                           PChar(FConfiguracoes.WebServices.ProxyUser),
                           Length(FConfiguracoes.WebServices.ProxyUser)) then
    GerarException('OnBeforePost: ' + IntToStr(GetLastError));

e
  if not InternetSetOption(Data,
                           INTERNET_OPTION_PROXY_PASSWORD,
                           PChar(FConfiguracoes.WebServices.ProxyPass),
                           Length(FConfiguracoes.WebServices.ProxyPass)) then
    GerarException('OnBeforePost: ' + IntToStr(GetLastError));


para poder utilzar o webservice?
GOSTEI 0
Dorivan Sousa

Dorivan Sousa

11/06/2015

ainda nao vi... eu uso webservice q eu criei em php, uso com um sistema de nota fiscal de serviço da prefeitura da minha cidade e ja fiz pra consulta de preço do sedex do correios... e outros testes... o que vi somente o delphi 7 a atualizacao do soap pra webservice mais atual.
GOSTEI 0
Felix Vier

Felix Vier

11/06/2015

Pelo que vi é necessário enviar primeiramente, o login digamos assim, e depois efetuar a consulta,
posso estar falando besteira mais foi isso que entendi, só não sei como fazer isso...
GOSTEI 0
Dorivan Sousa

Dorivan Sousa

11/06/2015

tem q olhar a assinatura do metodo, se na assinatura dele tiver o usuario e senha, mas é bem provável que nao tenha... faz mais sentido que o usuario e senha sejam colocados no cabecalho e nao nos dados. por isso é usar a opcao do proprio componente mesmo.
GOSTEI 0
Felix Vier

Felix Vier

11/06/2015

Aí está coloco no componente mas parece que ele não monta no cabeçalho
GOSTEI 0
Dorivan Sousa

Dorivan Sousa

11/06/2015

e ai resolveu a consulta..

eu tentei aqui e nao achei solucao ainda...


tem um projeto do pessoal do acbr que estavam fazendo um componente pra comunicar com o webservice do spc.
GOSTEI 0
Felix Vier

Felix Vier

11/06/2015

Não resolvi, já testei com o projeto deles e da o mesmo erro... fiz uma pergunta la também mas nada até o momento.
GOSTEI 0
Fabiane

Fabiane

11/06/2015

Vocês conseguiram resolver o problema da autenticação no HTTPRIO? Estou tendo o mesmo problema.
GOSTEI 0
Benhur

Benhur

11/06/2015

Felix, use um TIdHTTPRIO ao invez de um THTTPRIO
idHTTPRIO.HTTPWebNode.HttpClient.Request.BasicAuthentication := True;

e altere a funcao
function GetConsultaSpcScWSService(UseWSDL: Boolean; Addr: string; HTTPRIO: TIdHTTPRIO): ConsultaSpcScWSService;
GOSTEI 0
Benhur

Benhur

11/06/2015

Utilize no evento HTTPWebNode1BeforePost a autenticação;


procedure TForm1.HTTPRIO1HTTPWebNode1BeforePost(const HTTPReqResp: THTTPReqResp; Data: Pointer);
var
auth:string;
S:string;
b64 : TIdEncoderMIME;
begin
b64 := TIdEncoderMIME.Create(nil);


{autenticação, (Monta base64 e seta no Header HTTP)}
auth := 'Authorization: Basic ' + b64.EncodeString('cliente:user' + ':'+ 'senha');
HttpAddRequestHeaders(Data, PChar(auth), Length(auth), HTTP_ADDREQ_FLAG_ADD);
end;
GOSTEI 0
POSTAR