Autenticação Webservice com Delphi 7
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,
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
Curtidas 0
Melhor post
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/
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
11/06/2015
Ninguém ????
GOSTEI 0
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,
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
11/06/2015
tem que ser com THTTPRIO??
GOSTEI 0
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.
e estou tentando tbm com THTTPReqResp, mas tenho o mesmo erro em ambos.
GOSTEI 0
Dorivan Sousa
11/06/2015
eu fiz a importação do wsdl e realmente tem que ser com httprio
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';
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
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.
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
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.
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
11/06/2015
Aí esta, tento tbm no delphi XE5, e me ocorre o mesmo Erro,
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.
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
11/06/2015
coloca uma senha errada pra vc se a mensagem muda
GOSTEI 0
Felix Vier
11/06/2015
A mensagem continua a mesma
GOSTEI 0
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.
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
11/06/2015
na segunda eu vou tentar fazer, gostei da ideia da consulta no spc.
GOSTEI 0
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
11/06/2015
você não sabe se é necessário utilizar os métodos
e
para poder utilzar o webservice?
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
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
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...
posso estar falando besteira mais foi isso que entendi, só não sei como fazer isso...
GOSTEI 0
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
11/06/2015
Aí está coloco no componente mas parece que ele não monta no cabeçalho
GOSTEI 0
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.
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
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
11/06/2015
Vocês conseguiram resolver o problema da autenticação no HTTPRIO? Estou tendo o mesmo problema.
GOSTEI 0
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;
idHTTPRIO.HTTPWebNode.HttpClient.Request.BasicAuthentication := True;
e altere a funcao
function GetConsultaSpcScWSService(UseWSDL: Boolean; Addr: string; HTTPRIO: TIdHTTPRIO): ConsultaSpcScWSService;
GOSTEI 0
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;
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