ActiveDelphi - Índice do Fórum ActiveDelphi
.: O site do programador Delphi! :.
 
 FAQFAQ   PesquisarPesquisar   MembrosMembros   GruposGrupos   RegistrarRegistrar 
 PerfilPerfil   Entrar e ver Mensagens ParticularesEntrar e ver Mensagens Particulares   EntrarEntrar 

Envio de SMS
Ir à página 1, 2  Próximo
 
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Delphi
Exibir mensagem anterior :: Exibir próxima mensagem  
Autor Mensagem
gustave
Novato
Novato


Registrado: Quinta-Feira, 17 de Abril de 2014
Mensagens: 2

MensagemEnviada: Qui Abr 17, 2014 5:59 pm    Assunto: Envio de SMS Responder com Citação

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
Ver o perfil de Usuários Enviar Mensagem Particular
johnny-walker
Moderador
Moderador


Registrado: Sábado, 4 de Outubro de 2003
Mensagens: 10653
Localização: Contagem/MG - BRAZIL

MensagemEnviada: Qui Abr 17, 2014 9:50 pm    Assunto: Responder com Citação

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
Ver o perfil de Usuários Enviar Mensagem Particular MSN Messenger
claudio.ferreira
Profissional
Profissional


Registrado: Quarta-Feira, 18 de Setembro de 2013
Mensagens: 667

MensagemEnviada: Seg Abr 21, 2014 12:19 pm    Assunto: Responder com Citação

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
Ver o perfil de Usuários Enviar Mensagem Particular Visitar a homepage do Usuário
gustave
Novato
Novato


Registrado: Quinta-Feira, 17 de Abril de 2014
Mensagens: 2

MensagemEnviada: Ter Abr 22, 2014 9:35 am    Assunto: Envio de SMS Responder com Citação

Obrigado amigos,

Está funcionando.
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
rodimilson
Novato
Novato


Registrado: Quarta-Feira, 10 de Setembro de 2014
Mensagens: 7

MensagemEnviada: Qua Set 10, 2014 6:32 pm    Assunto: envio de SMS via COMTELE Responder com Citação

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
Ver o perfil de Usuários Enviar Mensagem Particular
rodimilson
Novato
Novato


Registrado: Quarta-Feira, 10 de Setembro de 2014
Mensagens: 7

MensagemEnviada: Sex Set 12, 2014 3:05 pm    Assunto: envio de SMS via COMTELE Responder com Citação

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
Ver o perfil de Usuários Enviar Mensagem Particular
Emanoella
Novato
Novato


Registrado: Quarta-Feira, 28 de Setembro de 2005
Mensagens: 14

MensagemEnviada: Qui Out 30, 2014 2:21 pm    Assunto: envio de sms Responder com Citação

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
Ver o perfil de Usuários Enviar Mensagem Particular
rodimilson
Novato
Novato


Registrado: Quarta-Feira, 10 de Setembro de 2014
Mensagens: 7

MensagemEnviada: Qui Out 30, 2014 2:29 pm    Assunto: Re: envio de sms Responder com Citação

Você precisa utilizar o componente da pasta Indy que se chama TIdSSLIOHandlerSocketOpenSSL e renomear para o lSSL
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
Emanoella
Novato
Novato


Registrado: Quarta-Feira, 28 de Setembro de 2005
Mensagens: 14

MensagemEnviada: Qui Out 30, 2014 2:37 pm    Assunto: envio de sms Responder com Citação

Olá Rodimilson

obrigada por responder.

Eu não tenho esse componente TIdSSLIOHandlerSocketOpenSSL na minha pasta Indy.
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
Emanoella
Novato
Novato


Registrado: Quarta-Feira, 28 de Setembro de 2005
Mensagens: 14

MensagemEnviada: Qui Out 30, 2014 2:47 pm    Assunto: envio de sms Responder com Citação

Olá Rodimilson

Encontrei aqui outras pastas de Indy e achei o componente, vou prosseguir aqui .

Obrigada
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
rodimilson
Novato
Novato


Registrado: Quarta-Feira, 10 de Setembro de 2014
Mensagens: 7

MensagemEnviada: Qui Out 30, 2014 2:48 pm    Assunto: Re: envio de sms Responder com Citação

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
Ver o perfil de Usuários Enviar Mensagem Particular
Emanoella
Novato
Novato


Registrado: Quarta-Feira, 28 de Setembro de 2005
Mensagens: 14

MensagemEnviada: Qui Out 30, 2014 2:57 pm    Assunto: envio de sms Responder com Citação

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
Ver o perfil de Usuários Enviar Mensagem Particular
rodimilson
Novato
Novato


Registrado: Quarta-Feira, 10 de Setembro de 2014
Mensagens: 7

MensagemEnviada: Qui Out 30, 2014 3:09 pm    Assunto: Re: envio de sms Responder com Citação

eu acho q sim
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
Emanoella
Novato
Novato


Registrado: Quarta-Feira, 28 de Setembro de 2005
Mensagens: 14

MensagemEnviada: Qui Out 30, 2014 4:27 pm    Assunto: envio de sms Responder com Citação

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
Ver o perfil de Usuários Enviar Mensagem Particular
rodimilson
Novato
Novato


Registrado: Quarta-Feira, 10 de Setembro de 2014
Mensagens: 7

MensagemEnviada: Qui Out 30, 2014 4:34 pm    Assunto: Re: envio de sms Responder com Citação

eu acho que o erro esta na linha anterior.. verifique os parametros que esta passando na variável url
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
Mostrar os tópicos anteriores:   
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Delphi Todos os horários são GMT - 3 Horas
Ir à página 1, 2  Próximo
Página 1 de 2

 
Ir para:  
Enviar Mensagens Novas: Proibido.
Responder Tópicos Proibido
Editar Mensagens: Proibido.
Excluir Mensagens: Proibido.
Votar em Enquetes: Proibido.


Powered by phpBB © 2001, 2005 phpBB Group
Traduzido por: Suporte phpBB