Jump to content
Fivewin Brasil

Envio de SMS


AcessoSoft

Recommended Posts

Há neste fórum e em outros mais, diversas postagens sobre envio de SMS. Gostaria de abrir aqui um tópico para debate recente do uso desta tecnologia que apesar de ser antiga, ainda é muito utilizada. Tenho necessidade de implementar este recurso.

1 - Códigos: classes, métodos e funções ;

2 - Qual hardaware usar ;

3 - Qual melhor provedor ou pacote de serviços.

Agradeço antecipadamente.

Link to comment
Share on other sites

Olá,

Segue:

////////////////////////////DADOS DA FUNCAO/////////////////////////////////////////////////////
// NOME       : EnviaSMS                                                                      //
// SINTESE    : Enviar SMS                                                                    //
// PARAMETROS : <1> aDados para envio ([1]='*', [2]=ID do cliente, [3]=celular, [4]=nome )    //
//              [2] cTexto da mensagem                                                        //    
// RETORNO    : Nada                                                                          //  
////////////////////////////////////////////////////////////////////////////////////////////////
function EnviarSMS(aDadosEnvio, cMens )

local aOcorr:={}, aSql, aMens:={} 
local cCmdSql, cDdd:='', cMensagem, cId, cContaSms, cCodeSms, cRmteSms, cCelular, cTexto:='', cMensTotal:='', cMethod:='POST'
local lOk:=.t.
local x, nEnviados:=0, z, nSoma:=0
local oWs

private cTitulo1:='', cTitulo2:='', cMensEnv:=''

cMens:=alltrim( cMens )

cTitulo1:='OCORRÊNCIAS ENVIO SMS'

//////////// informações cadastradas em um arquivo de configurações ///////////////////////////////
cContaSms  :=      //conta na operadora 
cCodeSms   :=      //senha na operadora
cRmteSms   :=      //remetente
nLimiteSms :=      //limite de caracteres
cOperSms   :=      //operadora
////////////////////////////////////////////////////////////////////////////////////////////////////

oWS := WebConnect():New()
              
for x=1 to len( aDadosEnvio )
        if aDadosEnvio[x,1]='*' .and. !empty( SoNumeros( aDadosEnvio[x,3] ) )
                lOk:=.t.
                cCelular:=iif( cCelular<>SoNumeros( aDadosEnvio[x,3] ), alltrim( str( val( SoNumeros( aDadosEnvio[x,3] ) ), 14 ) ), cCelular )
                
                if lOk
                        aMens:={}
                        //Linhas acrescentadas para dividir as msgs caso ultrapasse o tamanho limite
                        if (len(cMens)/nLimiteSMS)>1
                                //Adiciona as mensagens
                                for z=1 to roundmax((len(rtrim(cMens))/nLimiteSMS))
                                       aadd(aMens,substr(cMens,1+nSoma,nLimiteSMS))
                                       nSoma:=nSoma+nLimiteSMS    
                                next
                                //Zera o nSoma
                                nSoma :=0 
                        else
                                //Adiciona somente uma msg
                                aadd(aMens, cMens)
                        endif
                        
                        //Envia todas as msg
                        for z=1 to len(aMens)
                                //Definindo id
                                cId:=strzero(x,4)+strzero(z,2)+SoNumeros( dtoc( oVS:hoje ) )+SoNumeros( substr( time(), 1, 9 ) )+aDadosEnvio[x,2]
                                
                                //Envia msg
                                if upper( cOperSms )='HUMAN'
                                        cMensEnv:='http://system.human.com.br:8080/GatewayIntegration/msgSms.do?dispatch=send&account='+cContaSms+'&code='+cCodeSms+'&from='+cRmteSms+'&to=55'+cCelular+'&id='+cId+'&msg='+aMens[z]
                                elseif upper( cOperSms )='COMTELE'
                                        cMensEnv:='https://sms.comtele.com.br/api/'+cCodeSms+'/sendmessage?sender='+oVI:vpcCodCoop+'&receivers='+cCelular+'&content='+aMens[z]
                                elseif upper( cOperSms )='MISTERPOSTMAN'
                                        cMensEnv:='http://www.misterpostman.com.br/gateway.aspx?UserID='+cContaSms+'&Token='+cCodeSms+'&NroDestino='+cCelular+'&Mensagem='+aMens[z]
                                elseif upper( cOperSms )='M2MOBILE'
                                        cMethod:='GET'
                                        cId:=SoNumeros( dtoc( oVS:hoje ) )+SoNumeros( substr( time(), 1, 9 ) )
                                        cMensEnv:='https://www.m2mobile.com.br/smsservice/api/Repository/SendSms?logon='+cContaSms+'&password='+cCodeSms+'&mobile='+cCelular+'&message='+aMens[z]+'&dateSend='+dtoc( date() )+'&timeSend='+substr( time(),1,8 )+'&smsId='+cId
                                elseif upper( cOperSms )='ICOOP'
                                        cMethod:='GET'
                                        cMensEnv:='http://apiweb.icoop-sms.com/index.php?validapi='+cCodeSms+'&acao=enviarSMS&telefone='+cCelular+'&mensagem='+aMens[z]
                                endif

                                cMensTotal+=cMensEnv+CR_LF
                                                      
                                cTexto := oWS:Open( cMensEnv, cMethod )
                                sysrefresh()
                        next

                        if substr( Caracter( cTexto ),1,3 )$'000' .or. 'SUCESSO'$upper( cTexto ) .or. cTexto='{"ResponseCode": "100"}' .or. cTexto='"OK"'
                                nEnviados++
                        else
                                cTexto:=Caracter( cTexto )
                                aadd( aOcorr, { aDadosEnvio[x,2], aDadosEnvio[x,4], cCelular, substr(cTexto,1,3), substr(cTexto,7 ) } )
                        endif
                endif
        endif
next

memowrit( 'sms.txt', cMensTotal )

if len( aOcorr )>0
        RelatFrh( 'Ocorrências', {}, 'sbr_sms_ocor', 'R', 'SBR_SMS', aOcorr, { 'Conta', 'Nome', 'Celular', 'Cod', 'Ocor' } )
endif

if nEnviados>0
        Msginfo( 'Enviadas '+alltrim( str( len(aMens), 3 ) )+' mensagens a cada cooperado.'+CR_LF+'Mensagem enviada a '+alltrim( str( nEnviados, 3 ) )+' cooperados'+CR_LF+'Total de mensagens enviadas '+alltrim( str( nEnviados*len(aMens), 3 ) ) )
        oWS:end()
end

return nEnviados

///////////////////
Class WebConnect
//////////////////
Data oWeb
Method New() Constructor
Method Open()
Method End() INLINE ::oWeb:=Self:=Nil
EndClass

Method New() Class WebConnect
Try
::oWeb := CreateObject('MSXML2.XMLHTTP')
Catch
::oWeb := CreateObject('Microsoft.XMLHTTP')
End
Return Self

Method Open( cUrl, cMethod ) Class WebConnect
Local cRet := ""

DEFAULT cMethod:='POST'

If ValType( cUrl ) == 'U'
Return cRet
EndIf
Try
::oWeb:Open( cMethod, cUrl,.f.)
::oWeb:Send()
cRet := ::oWeb:responseBody
Catch; End

Return cRet

 

Link to comment
Share on other sites

 

olá,


Evandro meu rei, sem querer abusar, cadê a tela(.RC) de INPUTS desta rotina?

Não tem tela para a rotina. Passo os parâmetros. Estas informações vão depender da rotina de origem.  

Ok Master. Entonces você passa tudo por dentro do programa(fixo) e se mudar a senha por ejemplo? O uçuário tpa laskado()?? kkkkkkkkkkkkkkkkk

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
×
×
  • Create New...