Enviar SMS desde Visual Foxpro mediante LleidaNET

Posted on julio 2, 2015

0



El siguiente ejemplo muestra cómo se envía un SMS desde Visual Foxpro. Para ello utilizo vfpconnection.fll y el proveedor de SMS LleidaNET, que dispone de una API para conectar a su servicio a través de Internet.

Requisitos

En primer lugar, debemos tener un crédito de mensajes SMS adquiriéndolos a LleidaNET. Este crédito se puede comprar aquí. El alta en su sistema nos facilitará un código de usuario y una contraseña, necesarias para hacer la autenticación. En mi ejemplo uso las variables lcUsuario y lcPassword prespectivamente. LleidaNET además permite envío de SMS Certificados, MMS, control de mensajes no entregados, etc.

Obtener la librería VFPConnection.FLL. Creada por Craig Boyd, permite hacer un Callback desde la función FLL, para saber el progreso del envío. La librería puede descargarse desde el blog de Kevin Ragsdale aquí.

¿Cómo funciona?

Se crea una cadena XML con la información del mensaje a enviar. Se puede enviar a varios destinatarios simultáneamente, simplemente hay que poner cada nuevo número de teléfono dentro de <num></num>.

Si el mismo mensaje lo enviamos a 3 destinatarios diferentes dentro del nivel <dst>:

<dst>
<num>numerodestinatario1</num>
<num>numerodestinatario2</num>
<num>numerodestinatario3</num>
</dst>

En mi ejemplo, para simplificar, sólo he puesto una sección <num>.

En el ejemplo, uso la función MYTRACE para saber cómo ha ido la operación, para lo que relleno la variable pública m.PcRespuestaSMS.

Las funciones de la API de LleidaNet se pueden consultar en:
http://sms.lleida.net/dtd/sms/v1/es/index.html

Si la API de LleidaNet devuelve 100, es que el mensaje ha sido enviado.

smsenviocorrecto

Programa de Ejemplo

* http://sms.lleida.net/xmlapi/smsgw.cgi

Public m.PcRespuestaSMS
m.PcRespuestaSMS=””

lcUsuario = “xxxxxxxxxxxxx”
lcPassword= “contraseña”

lcNumero= “+34666666666”
lcRemitente=”miremitente”
lcMensajeSMS =”Texto del mensaje”

lcXMLPet = [<?xml version=”1.0″ encoding=”iso-8859-1″ ?>]
lcXMLPet=lcXMLPet+”<sms>”
lcXMLPet=lcXMLPet+”<user>”+lcUsuario +”</user>”
lcXMLPet=lcXMLPet+”<password>”+lcPassword+”</password>”
lcXMLPet=lcXMLPet+”<src>”+lcRemitente+”</src>”
lcXMLPet=lcXMLPet+”<dst>”
lcXMLPet=lcXMLPet+”<num>”+lcNumero+”</num>”
lcXMLPet=lcXMLPet+”</dst>”
lcXMLPet=lcXMLPet+”<txt>”+lcMensajeSMS+”</txt>”
lcXMLPet=lcXMLPet+”</sms>”

? lcXMLPet

Set Library To Libra\vfpconnection.fll

Local Array aryPost(1,2)
aryPost(1,1) = “xml”
aryPost(1,2) = lcXMLPet

Httppost(“http://sms.lleida.net/xmlapi/smsgw.cgi&#8221;, @aryPost, “”, “MyTrace()”)

* desglosar devuleto
lcsmsaccion = Strextract(m.PcRespuestaSMS ,”<action>”,”</action>”)
lcsmsstatus = Strextract(m.PcRespuestaSMS ,”<status>”,”</status>”)
lcsmsmsg = Strextract(m.PcRespuestaSMS ,”<msg>”,”</msg>”)
lcsmsnewcredit = Strextract(m.PcRespuestaSMS ,”<newcredit>”,”</newcredit>”)

If lcsmsstatus ==”100″
   Messagebox(“Envio correcto”+Chr(13)+”Nuevo saldo:”+lcsmsnewcredit,64 )
Else
   Messagebox(“Envio incorrecto”+Chr(13)+”Error:”+lcsmsstatus+Chr(13)+”Mensaje:”+lcsmsmsg+Chr(13)+lcXMLPet,16 )
Endif

Release Library vfpconnection.fll

*!* Código Significado lcsmsstatus
*!* 100 Correcto
*!* 0 Error desconocido
*!* -1 XML invalido
*!* -2 Usuario invalido
*!* -3 Credito insuficiente
*!* -4 No hay destinatarios
*!* -5 Texto invalido
*!* -6 Error temporal. Reintentar
*!* -7 Sesión duplicada
*!* -8 Correo invalido
*!* -9 MT ID no encontrado
*!* -10 Destinatario invalido
Return

***********************
Function MyProgress() && Callback from the FLL – can be used to track operation progress
***********************
*!* You can create your own function, procedure or method to handle this and name it whatever you want.
*!* The nConnectTotalBytes and nConnectBytesSoFar are private variables created on-the-fly by the FLL
? m.nConnectTotalBytes
? m.nConnectBytesSoFar
Endfunc

***********************
Function MyTrace() && Callback from the FLL – used to provide a detailed trace of the operation
***********************
*!* You can create your own function, procedure or method to handle this and name it whatever you want.
*!* The nTraceDataType and cTraceData are private variables created on-the-fly by the FLL
#Define TYPE_TEXT 0
#Define TYPE_HEADER_IN 1
#Define TYPE_HEADER_OUT 2
#Define TYPE_DATA_IN 3
#Define TYPE_DATA_OUT 4
#Define TYPE_SSL_DATA_IN 5
#Define TYPE_SSL_DATA_OUT 6
#Define TYPE_END 7

?Icase(m.nTraceDataType = TYPE_TEXT, “STATUS:”, ;
m.nTraceDataType = TYPE_HEADER_IN, “<RECV HEADER: “, ;
m.nTraceDataType = TYPE_HEADER_OUT, “>SEND HEADER: “, ;
m.nTraceDataType = TYPE_DATA_IN, “<RECV DATA: “, ;
m.nTraceDataType = TYPE_DATA_OUT, “>SEND DATA: “, ;
m.nTraceDataType = TYPE_SSL_DATA_IN, “<RECV SSL DATA: “, ;
m.nTraceDataType = TYPE_SSL_DATA_OUT, “>SEND SSL DATA: “, ;
m.nTraceDataType = TYPE_END, “END: “, “UNKNOWN: “)

? m.cTraceData
If m.nTraceDataType = TYPE_DATA_IN Or m.nTraceDataType = TYPE_SSL_DATA_IN
m.PcRespuestaSMS = m.cTraceData
Endif

Endfunc

 

Posted in: Foxpro, SMS