Exibir mensagem anterior :: Exibir próxima mensagem |
Autor |
Mensagem |
gustave Novato

Registrado: Quinta-Feira, 17 de Abril de 2014 Mensagens: 2
|
Enviada: Qui Abr 17, 2014 5:59 pm Assunto: Envio de SMS |
|
|
Boa tarde,
Estou implementando o envio de SMS em um módulo de nosso sistema. Por questões quem não devem ser ilustradas aqui, optou-se por enviar o SMS através do site da empresa COMTELE (essa empresa iria repassar códigos-fonte, etc para o desenvolvimento, o que não era verdade).
Para enviar o SMS a url é a seguinte:
'https://sms.comtele.com.br/api/{sua chave}/sendmessage?sender={Usuário}&receivers={telefone}&content={mensagem}
Após uma certa dor de cabeça, consegui implementar via componente idHTTP o envio.
Isso aqui:
Código: | lHTTP := TIdHTTP.Create(nil);
lSSL:= TIdSSLIOHandlerSocketOpenSSL.Create(nil);
// Definicao do lSSL
lSSL.SSLOptions.Method:=sslvTLSv1;
lSSL.SSLOptions.Mode:=sslmUnassigned;
lSSL.SSLOptions.VerifyMode:=[];
lSSL.SSLOptions.VerifyDepth:=0;
lSSL.Host:='';
lHTTP.IOHandler:=lSSL;
lHTTP.IOHandler.ReadTimeout:=86400;
lHTTP.Request.ContentType:='application/x-www-form-urlencoded';
lHTTP.AllowCookies:=true;
lHTTP.ProxyParams.BasicAuthentication := False;
lHTTP.ProxyParams.ProxyPort := 0;
lHTTP.Request.ContentLength := -1;
lHTTP.Request.ContentRangeEnd := 0;
lHTTP.Request.ContentRangeStart := 0;
lHTTP.Request.Accept := 'text/html, */*';
lHTTP.Request.BasicAuthentication := False;
lHTTP.Request.UserAgent := '';
lHTTP.MaxHeaderLines:=0;
lHTTP.HTTPOptions := [hoForceEncodeParams];
try
Result := lHTTP.Post(url, param);
except
FreeAndNil(lHTTP);
FreeAndNil(lSSL);
FreeAndNil(lParamList);
end; |
O SMS está sendo enviado corretamente, mas ao final, Ocorre erro:
Project Project1.exe raised exception class EIdConnClosedGracefully with message 'Connection Closed Gracefully.'. Process stopped. Use Step or Run to continue.
Já andei me informando por aqui, e vi que essa mensagem não é necessariamente um erro, mas simplesmente a desconexão após o envio.
Entrei no componente IdSocketHandle e comentei o trecho. O envio está ok. Tudo funciona. Mas acho que mexer em classe é solução lusitana. Gostaria de algumas idéias.
Já, eu já olhei no fórum.
Valeu pessoal. |
|
Voltar ao Topo |
|
 |
johnny-walker Moderador


Registrado: Sábado, 4 de Outubro de 2003 Mensagens: 10653 Localização: Contagem/MG - BRAZIL
|
Enviada: Qui Abr 17, 2014 9:50 pm Assunto: |
|
|
Você pode utilizar ApplicationEvents e utilizar o evento onexcept e desta forma tratar o erro:
eis aí:
Código: |
if E is EIdSocketError then
case EIdSocketError(E).LastError of
10054: begin
Application.MessageBox('Seu captcha e consequentemente sua sessão com o servidor peer da Receita Federal expirou.', 'Aviso do Sistema', mb_ok+mb_iconwarning);
LoadCapcha(IdHTTP1, Image1.Picture);
end;
10053: Application.MessageBox('Houve uma falha de conexão de número #10053 com a internet.', 'Aviso do Sistema', mb_ok+mb_iconwarning);
10060: Application.MessageBox('Ocorreu uma falha na conexão de "Tempo Esgotado" de número #10060.', 'Aviso do Sistema', mb_ok+mb_iconwarning);
10061: Application.MessageBox('Houve uma falha de "Conexão recusada" de número #10061 pelo servidor.', 'Aviso do Sistema', mb_ok+mb_iconwarning);
11004: Application.MessageBox('Houve uma falha na conexão de número #11004 com a internet.', 'Aviso do Sistema', mb_ok+mb_iconwarning);
end;
if E is EIdHTTPProtocolException then
case EIdHTTPProtocolException(E).ErrorCode of
403: Application.MessageBox('Ocorreu um Erro: "Acesso Proibido ou negado pelo servidor" de número #403.', 'Aviso do Sistema', mb_ok+mb_iconwarning);
405: Application.MessageBox('Ocorreu um Erro: "Método não permitido pelo servidor" de número #405.', 'Aviso do Sistema', mb_ok+mb_iconwarning);
411: Application.MessageBox('Ocorreu um Erro: "Tamanho Requerido pelo servidor" de número #403.', 'Aviso do Sistema', mb_ok+mb_iconwarning);
end; |
http://www.activedelphi.com.br/forum/viewtopic.php?t=83032&sid=32194119decf08efcfd4b0e98582cd99
http://www.activedelphi.com.br/forum/viewtopic.php?t=69363&sid=b287191eede26700bee58ae617b82159
bye _________________ P.O.W.E.R B.Y D.E.L.P.H.I |
|
Voltar ao Topo |
|
 |
claudio.ferreira Profissional


Registrado: Quarta-Feira, 18 de Setembro de 2013 Mensagens: 667
|
Enviada: Seg Abr 21, 2014 12:19 pm Assunto: |
|
|
Primeiro mude seu codigo porque como está, deixa memoryleaks
Troque :
Código: | try
Result := lHTTP.Post(url, param);
except
FreeAndNil(lHTTP);
FreeAndNil(lSSL);
FreeAndNil(lParamList);
end; |
Por
Código: | try
Result := lHTTP.Post(url, param);
Finally
FreeAndNil(lHTTP);
FreeAndNil(lSSL);
FreeAndNil(lParamList);
end; |
Veja se para de dar a exceção assim. Se não parar experimente fazer assim :
Código: | try
Result := lHTTP.Post(url, param);
lHTTP.Disconnect;
Finally
FreeAndNil(lHTTP);
FreeAndNil(lSSL);
FreeAndNil(lParamList);
end; |
Nunca vi que um post necessite de disconnect, mas em todo caso não custa tentar.. _________________ Sistema SNGPC para farmácias
http://www.cmasistemas.com.br
Rastreabilidade de Medicamentos
https://www.sncm.com.br
Soluções em Delphi
https://delphisolutions.wordpress.com/
.
"E não sabendo que era impossível, foi lá e fez"
Mark Twain |
|
Voltar ao Topo |
|
 |
gustave Novato

Registrado: Quinta-Feira, 17 de Abril de 2014 Mensagens: 2
|
Enviada: Ter Abr 22, 2014 9:35 am Assunto: Envio de SMS |
|
|
Obrigado amigos,
Está funcionando. |
|
Voltar ao Topo |
|
 |
rodimilson Novato

Registrado: Quarta-Feira, 10 de Setembro de 2014 Mensagens: 7
|
Enviada: Qua Set 10, 2014 6:32 pm Assunto: envio de SMS via COMTELE |
|
|
Caro gustave, estou passando pelo mesmo problema e se puder me ajudar encaminhando o que passou nas variáveis url, param e o que definiu como lParamList agradeço e muito..abraços |
|
Voltar ao Topo |
|
 |
rodimilson Novato

Registrado: Quarta-Feira, 10 de Setembro de 2014 Mensagens: 7
|
Enviada: Sex Set 12, 2014 3:05 pm Assunto: envio de SMS via COMTELE |
|
|
segue exemplo funcional completo, pois também tive dificuldades com a COMTELE, e graças ao amigo gustave, consegui utilizar o exemplo dele e trago aqui o exemplo completo:
procedure TForm1.btnEnviaSMSClick(Sender: TObject);
var url : string;
param : TStringStream;
lclContent, lclSender, lclChave, lclReceivers : string;
gblSMSOk : boolean;
begin
lHTTP := TIdHTTP.Create(nil);
lSSL:= TIdSSLIOHandlerSocketOpenSSL.Create(nil);
// Definicao do lSSL
lSSL.SSLOptions.Method:=sslvTLSv1;
lSSL.SSLOptions.Mode:=sslmUnassigned;
lSSL.SSLOptions.VerifyMode:=[];
lSSL.SSLOptions.VerifyDepth:=0;
lSSL.Host:='';
lHTTP.IOHandler:=lSSL;
lHTTP.IOHandler.ReadTimeout:=86400;
lHTTP.Request.ContentType:='application/x-www-form-urlencoded';
lHTTP.AllowCookies:=true;
lHTTP.ProxyParams.BasicAuthentication := False;
lHTTP.ProxyParams.ProxyPort := 0;
lHTTP.Request.ContentLength := -1;
lHTTP.Request.ContentRangeEnd := 0;
lHTTP.Request.ContentRangeStart := 0;
lHTTP.Request.Accept := 'text/html, */*';
lHTTP.Request.BasicAuthentication := False;
lHTTP.Request.UserAgent := '';
lHTTP.MaxHeaderLines:=0;
lHTTP.HTTPOptions := [hoForceEncodeParams];
lclChave := mskCHAV_USUAR.Text;
lclSender := mskLOGI_USUAR.Text;
lclReceivers := mskNUME_CELUL.Text;
lclContent := TIdURI.ParamsEncode(Trim(mskSMS.Text));
url := 'https://sms.comtele.com.br/api/'+lclChave+'/sendmessage?sender='+lclSender+'&content='+lclContent+'&receivers='+lclReceivers;
param := TStringStream.Create;
gblSMSOk := true;
try
try
try
Result := lHTTP.Post(url, param);
finally
param.Free;
end;
finally
FreeAndNil(lHTTP);
FreeAndNil(lSSL);
end;
except
on E: Exception do
begin
gblSMSOk := false;
ShowMessage('Erro: '+E.Message);
end;
end;
if gblSMSOk = true then
showmessage('SMS encaminhado com sucesso!!!');
end; |
|
Voltar ao Topo |
|
 |
Emanoella Novato

Registrado: Quarta-Feira, 28 de Setembro de 2005 Mensagens: 14
|
Enviada: Qui Out 30, 2014 2:21 pm Assunto: envio de sms |
|
|
Olá boa tarde,
Estou tentando fazer um programa para enviar SMS e então peguei o último exemplo de envio de sms e coloquei aqui na minha máquina porém quando vou compilar ele tá me dando o seguinte erro :
Não tá achando a variável lSSL do códig abaixo :
var url : string;
param : TStringStream;
lclContent, lclSender, lclChave, lclReceivers : string;
gblSMSOk : boolean;
begin
lHTTP := TIdHTTP.Create(nil);
lSSL := TIdSSLIOHandlerSocketOpenSSL.Create(nil);
// Definicao do lSSL
lSSL.SSLOptions.Method:=sslvTLSv1;
lSSL.SSLOptions.Mode:=sslmUnassigned;
lSSL.SSLOptions.VerifyMode:=[];
lSSL.SSLOptions.VerifyDepth:=0;
lSSL.Host:='';
Como defino essa variável ?
Preciso de algum componente ?
Na Paleta Indy não achei nenhum componente lSSL
Obrigada |
|
Voltar ao Topo |
|
 |
rodimilson Novato

Registrado: Quarta-Feira, 10 de Setembro de 2014 Mensagens: 7
|
Enviada: Qui Out 30, 2014 2:29 pm Assunto: Re: envio de sms |
|
|
Você precisa utilizar o componente da pasta Indy que se chama TIdSSLIOHandlerSocketOpenSSL e renomear para o lSSL |
|
Voltar ao Topo |
|
 |
Emanoella Novato

Registrado: Quarta-Feira, 28 de Setembro de 2005 Mensagens: 14
|
Enviada: Qui Out 30, 2014 2:37 pm Assunto: envio de sms |
|
|
Olá Rodimilson
obrigada por responder.
Eu não tenho esse componente TIdSSLIOHandlerSocketOpenSSL na minha pasta Indy. |
|
Voltar ao Topo |
|
 |
Emanoella Novato

Registrado: Quarta-Feira, 28 de Setembro de 2005 Mensagens: 14
|
Enviada: Qui Out 30, 2014 2:47 pm Assunto: envio de sms |
|
|
Olá Rodimilson
Encontrei aqui outras pastas de Indy e achei o componente, vou prosseguir aqui .
Obrigada |
|
Voltar ao Topo |
|
 |
rodimilson Novato

Registrado: Quarta-Feira, 10 de Setembro de 2014 Mensagens: 7
|
Enviada: Qui Out 30, 2014 2:48 pm Assunto: Re: envio de sms |
|
|
eu utilizo o Delphi XE5... talvez seja isto.. veja este componente similar a versão do seu Delphi.. acredito ter em todas as versões de Delphi |
|
Voltar ao Topo |
|
 |
Emanoella Novato

Registrado: Quarta-Feira, 28 de Setembro de 2005 Mensagens: 14
|
Enviada: Qui Out 30, 2014 2:57 pm Assunto: envio de sms |
|
|
Eu estou utilizando ainda o Delphi 7
Nessa versão do delphi 7 tem o componente TIdSSLIOHandlerSocket e não o TIdSSLIOHandlerSocketOpenSSL , eles são correspondentes ? |
|
Voltar ao Topo |
|
 |
rodimilson Novato

Registrado: Quarta-Feira, 10 de Setembro de 2014 Mensagens: 7
|
Enviada: Qui Out 30, 2014 3:09 pm Assunto: Re: envio de sms |
|
|
eu acho q sim |
|
Voltar ao Topo |
|
 |
Emanoella Novato

Registrado: Quarta-Feira, 28 de Setembro de 2005 Mensagens: 14
|
Enviada: Qui Out 30, 2014 4:27 pm Assunto: envio de sms |
|
|
Estou compilando o programa e na linha abaixo :
param := TStringStream.Create;
Está dando o seguinte erro :
Not enough actual parameters
Será que é versão do Delphi, eu estou usando o Delphi 7, será que tem outro documento desse compatível com o Delphi 7 ? |
|
Voltar ao Topo |
|
 |
rodimilson Novato

Registrado: Quarta-Feira, 10 de Setembro de 2014 Mensagens: 7
|
Enviada: Qui Out 30, 2014 4:34 pm Assunto: Re: envio de sms |
|
|
eu acho que o erro esta na linha anterior.. verifique os parametros que esta passando na variável url |
|
Voltar ao Topo |
|
 |
|