Enviar SMS con Procedure
Para enviar SMS mediante procedures en Oracle es necesario contar con un servidor de SMS, en este caso utilizamos https://ww.targetphone.com.mx. Ademas de ello es necesario conocer la cadena de conexión que el servidor utiliza para generar el POST de manera correcta. Cada servidor utiliza cadenas y variables distintas, en la peticion del POST se reconocen a las variables y sus valores separados por un &.
El POST se realiza por medio de la utileria UTL_HTTP de Oracle, como se muestra:
CREATE OR REPLACE PROCEDURE SCHEMA.enviaSMS
( numtel IN VARCHAR2
, msg IN VARCHAR2
)
IS
cte VARCHAR2(10) := '44026';
--encpwd VARCHAR2(100) := '222a2d1l5oe8f5167a55528x45d83719d987b8b88515pc56927ba12cc3eb8931';
--email VARCHAR2(30) := 'micorreo@miservidor.com';
/* En principio declarando las variables comentadas arriba, deberia funcionar, pero haciendo pruebas, genera caracteres raros al final de las mismas, por lo que la cadena de conexion se ve afectada y no es posible realizar la conexion al servidor de SMS, en este caso el servidor de SMS es el http://targetphone.com.mx, el password encriptado (encpwd) y el correo (email) al final en lugar de terminar como ...8931, termina como 8931F1 sustituyendo el & por F1 y la cadena de conexion muestra lo siguiente al tratar de realizar el POST: ERROR|Parámetros insuficientes. Por ello se dejan en claro y se anexa el & al final como se muestra mas adelante*/
mtipo VARCHAR2(10) := 'SMS';
idivr NUMBER(5) := '256';
auxiliar VARCHAR2(20) := 'pruebax02';
auxiliar VARCHAR2(20) := 'pruebax02';
/* Las variables declaradas necesarias para la conexion al POST dependen del servidor de SMS, en este caso targetphone en la pestana de Herramientas,Componentes API,HTTP nos muestra los datos necesarios:
URL de la transacción
/Controller.php/__a/sms.send.remote.ol.sa
Método de la transacción
POST
Petición de ejemplo con formulario html
<html>
<body>
<form method="POST" action="/Controller.php/__a/sms.send.remote.ol.sa">
<input type="hidden" name="cte" value="12345" />
<input type="hidden" name="encpwd" value="4c867bsdrb3b66ef802514f78fff6320a4ea8f" />
<input type="hidden" name="email" value="usuario@auronix.com" />
<input type="hidden" name="msg" value="Mensaje a través de petición HTTP" />
<input type="hidden" name="numtel" value="5500000000" />
<input type="hidden" name="mtipo" value="SMS" />
<input type="hidden" name="idivr" value="125" />
<input type="hidden" name="auxiliar" value="cta2345" />
<input type="submit" value="Enviar" />
</form>
</body>
</html>
*/
vRequest Utl_Http.req;
vPostText VARCHAR2(5000);
vResponse Utl_Http.resp;
vResponseText VARCHAR2(2000);
vErrorText VARCHAR2(2000);
BEGIN
------------------------------------------------------------
-- Construccion del POST
------------------------------------------------------------
vPostText :=
'cte=' ||Utl_Url.escape(cte, TRUE )||CHR(38)||
'encpwd=222a2d1l5oe8f5167a55528x45d83719d987b8b88515pc56927ba12cc3eb8931&' ||
'email=micorreo@miservidor.com&'||
'numtel=' ||Utl_Url.escape(numtel, TRUE )||CHR(38)||
'mtipo=' ||Utl_Url.escape(mtipo, TRUE )||CHR(38)||
'msg=' ||Utl_Url.escape(msg, TRUE )||CHR(38)||
'idivr=' ||Utl_Url.escape(idivr, TRUE )||CHR(38)||
'auxiliar=' ||Utl_Url.escape(auxiliar, TRUE );
------------------------------------------------------------
-- Si necesitas algun proxy, descomenta la linea.
------------------------------------------------------------
/*Utl_Http.set_proxy('proxy.it.micompania.com','micompania.com'); */
------------------------------------------------------------
-- Envio de SMS a traves de targetphone SMS service.
------------------------------------------------------------
vRequest := Utl_Http.begin_request
(url=> 'http://targetphone.com.mx/Controller.php/__a/sms.send.remote.ol.sa'
, method => 'POST'
);
Utl_Http.set_header
( r => vRequest
, name => 'Content-Type'
, value => 'application/x-www-form-urlencoded'
);
Utl_Http.set_header
( r => vRequest
, name => 'Content-Length'
, value => LENGTH(vPostText)
);
Utl_Http.write_text
( r => vRequest
, data => vPostText
);
vResponse := Utl_Http.get_response(vRequest);
IF vResponse.status_code = '200'
THEN
Utl_Http.read_text(vResponse, vResponseText);
IF vResponseText NOT LIKE 'OK%'
THEN
vErrorText := vResponseText;
END IF;
ELSE
vErrorText := 'HTTP status: '||vResponse.status_code||'-'||vResponse.reason_phrase;
END IF;
Utl_Http.end_response(vResponse);
IF vErrorText IS NOT NULL
THEN
RAISE_APPLICATION_ERROR(-20001, 'Envio de SMS fallido con '||vResponseText);
END IF;
END enviaSMS;
/
Forma de invocar:
BEGIN
SCHEMA.enviaSMS('2721390553','Esta es una prueba');
end;
/
No hay comentarios:
Publicar un comentario