Altiria Push HTTP
Altiria Push HTTP
Especificaciones de la Interfaz
HTTP para envı́o de SMS,
landings web y firma de documentos
Altiria TIC, S.L.U.
Versión: 2.9
Este documento sólo puede ser reproducido por completo o en parte, almacenado, recuperado o transmitido por medios
electrónicos, mecánicos, fotocopiado o cualquier otro medio con el consentimiento previo de los autores de acuerdo con
los términos que estos indiquen.
Historial de cambios
Versión Cambios
Eliminamos en la documentación la posibilidad de login con
dominio, usuario/e-mail y contraseña para todos los comandos.
2.9 Para las cuentas nuevas el login se realiza por apiKey y apiSe-
cret. Para cuentas antiguas se sigue permitiendo el login con
usuario/e-mail y password.
1
Historial de cambios
Versión Cambios
Se añade una nueva sección sobre los enlaces a web móvil (2.6) y
una subsección sobre la parametrización de webs móviles (2.6.1).
Se actualiza la información del parámetro “msg” y se añaden los
2.1 parámetros “landing”, “params” y “webParams” en el cuadro 2.1,
todo en relación a los enlaces a web móvil (sección 2.6).
Se añaden los códigos de error 035, 036, 037, 038 y 039 (sec-
ción 2.4.3).
2
Historial de cambios
Versión Cambios
Se incluye un nuevo ejemplo en ASP 3.0 y se corrige una errata
en el ejemplo en PHP (sección 2.10).
Se detalla el modo de codificar los caracteres si los parámetros de
la petición se envı́an en la URL (sección 2.2).
1.12 Se añaden dos parámetros opcionales al comando “sendsms” para
permitir especificar el puerto origen y destino del SMS a enviar
(sección 2.4.1).
Se añaden nuevos códigos de error correspondientes a los nuevos
parámetros: 033 y 034 (sección 2.4.3).
3
Interfaz HTTP para envı́o de SMS, landings web y firma de documentos
Índice general
1. Introducción 5
2. Descripción de la API 6
2.1. Envı́o de la petición . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
2.2. Codificación de caracteres . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
2.3. Respuesta a la petición . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
2.4. Comandos de la API de envı́o de SMS . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
2.4.1. Envı́o de un mensaje de texto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
2.4.2. Consulta del crédito disponible . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
2.4.3. Códigos de estado . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
2.5. Mensajes de texto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
2.5.1. Codificación por defecto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
2.5.2. Unicode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
2.5.3. Longitud del mensaje . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
2.6. Enlaces a web móvil . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
2.6.1. Parametrización de la web móvil . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
2.7. Confirmación de entrega . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
2.8. Comandos de la API de firma de contrato online . . . . . . . . . . . . . . . . . . . . . . 20
2.8.1. Firma de un documento PDF . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
2.8.2. Posicionamiento de las firmas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
2.8.3. Envı́o del documento PDF . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
2.8.4. Consulta del estado de firma de un documento PDF . . . . . . . . . . . . . . . . 26
2.8.5. Códigos de estado . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
2.9. Actualización del estado de firma de documentos . . . . . . . . . . . . . . . . . . . . . . 28
2.10. Ejemplos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
2.10.1. Envı́o de un mensaje mediante librerı́as . . . . . . . . . . . . . . . . . . . . . . . 30
2.10.2. Envı́o de un mensaje en PHP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
2.10.3. Envı́o y firma de documento PDF en PHP . . . . . . . . . . . . . . . . . . . . . . 37
2.10.4. Envı́o de un mensaje en JAVA . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
2.10.5. Envı́o y firma de documento PDF en JAVA . . . . . . . . . . . . . . . . . . . . . 45
2.10.6. Envı́o de un mensaje en VBA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
4
Interfaz HTTP para envı́o de SMS, landings web y firma de documentos
5
Interfaz HTTP para envı́o de SMS, landings web y firma de documentos
Capı́tulo 1
Introducción
En este documento se presenta la API disponible para el envı́o de mensajes cortos, landings web y
firma de documentos sobre la interfaz de Altiria a través de peticiones sobre el protocolo HTTP.
Para hacer uso de la interfaz HTTP el cliente enviará una petición HTTP POST y esperará la
respuesta del servidor.
El servicio de envı́o de mensajes cortos está disponible en muchos paises. Para conocer los paises
permitidos, las operadoras válidas en cada paı́s y las posibles restricciones geográficas (salvedades al
funcionamiento general detallado en este documento que pudieran aplicar en cada caso) se puede enviar
un correo electrónico a [email protected].
El servicio opcional de confirmación de entrega requiere que el cliente configure un servidor de
peticiones HTTP para recibir la información de confirmación (ver la sección 2.7).
Si durante la integración de la API se presentan problemas, se recomienda revisar la sección de
preguntas frecuentes ([FAQ]) de nuestro portal web.
6
Interfaz HTTP para envı́o de SMS, landings web y firma de documentos
Capı́tulo 2
Descripción de la API
nombre1=valor1&nombre2=valor2&nombre3=valor3
De acuerdo a lo indicado cada uno de los valores de los parámetros deberá codificarse en UTF-8
antes de incluirlo en la URL. Por ejemplo una “ñ” se codificarı́a como “ %C3 %B1”.
Esto es especialmente necesario en los siguientes casos (se indica el carácter y su codificación en la
URL en UTF-8):
7
Interfaz HTTP para envı́o de SMS, landings web y firma de documentos
+ => %2B
% => %25
& => %26
8
Interfaz HTTP para envı́o de SMS, landings web y firma de documentos
dest Número de teléfono móvil del destinatario del mensaje. Se especificará sı́
en formato de numeración internacional sin prefijo ’00’ ni el signo ’+’. Ej:
34645852126. Es fundamental incluir el prefijo del paı́s (34 para España)
para que el mensaje llegue al destino esperado. No debe superar los 16
dı́gitos.
msg Mensaje a enviar. La lista de caracteres válidos y la longitud máxima sı́
permitida se detalla en la sección 2.5. No puede estar vacı́o (cadena
vacı́a). Se pueden añadir identificadores de web móvil para gene-
rar enlaces acortados únicos en el texto del mensaje. Consultar la
sección 2.6 para conocer más detalles sobre las webs móviles.
senderId Remitente del mensaje a enviar, autorizado por Altiria . La posibilidad no
de personalizar el remitente depende del paı́s destinatario del mensaje.
Puede tomar dos posibles valores: 1) valor alfanumérico de hasta 11
caracteres (números y letras de la “a” a la “z” tanto mayúsculas como
minúsculas excluyendo la “Ñ” y la “ñ”); 2) valor numérico de hasta
15 dı́gitos decimales comenzando por el carácter “+”. Los caracteres
inválidos serán suprimidos automáticamente. Si se pretende que
el receptor pueda responder al mensaje corto recibido se deberı́a usar
un remitente numérico (opción 2) incluyendo el prefijo de paı́s. Si no se
incluye o el valor escogido es inválido, el mensaje se enviará con el
remitente por defecto seleccionado por Altiria.
landing Número con la suma de identificadores de web móvil (si se repiten tam- no
bién suman) que se utilizan en el texto del mensaje (parámetro “msg”)
para citar una web móvil (su uso es obligatorio en este caso). Con-
sultar la sección 2.6 para conocer más detalles sobre las webs móviles.
params Número de webs móviles (de las citadas en el texto del mensaje mediante no
el parámetro “msg”) para las que se remiten valores parametrizados. Su
uso es obligatorio en caso de definir el parámetro “landing” (se debe
fijar a 0 si no hay webs parametrizadas). En caso de remitir valores para-
metrizados debe incluirse también parámetros tipo “webParams”.
Consultar la sección 2.6.1 para conocer más detalles sobre la parametri-
zación de las webs móviles.
webParams Se debe añadir para cada web móvil parametrizada el parámetro “webPa- no
rams” cualificado con el identificador de la web móvil. Define los paráme-
tros particulares de cada web. Su uso es obligatorio en caso de que
“params” sea mayor que 0. Consultar la sección 2.6.1 para conocer más
detalles sobre la parametrización de las webs móviles.
ack Solicitud de confirmación de entrega de los mensajes enviados (ver sec- no
ción 2.7). Si vale ”true” solicita confirmación de entrega de los SMS
enviados. Si adicionalmente se solicita certificar la entrega de los SMS
enviados (ver parámetro “certDelivery”), se remitirá la URL de acceso
al documento del certificado. En su ausencia o si tiene otro valor no
se solicita ni la confirmación de entrega ni la URL del documento del
certificado.
idAck Código identificativo para la confirmación de entrega (ver sección 2.7). no
Valor alfanumérico de hasta 20 caracteres (números y letras de la “a” a
la “z” tanto mayúsculas como minúsculas sin incluir ni “Ñ” ni “ñ”). De
rebasar la longitud máxima permitida será truncado. Los caracteres no
permitidos serán eliminados. Solo será considerado si el parámetro ack
se envı́a con valor ”true”. Si se incluye explı́citamente este parámetro
y toma como valor cadena vacı́a, anula la solicitud de confirmación de
entrega.
urlAck URL del cliente a la que Altiria remitirá la información de confirmación no
de entrega del envı́o (ver sección 2.7).
9
Interfaz HTTP para envı́o de SMS, landings web y firma de documentos
dPort Puerto destino del SMS a enviar. Valor numérico entre 1 y 65535 (solo no
dı́gitos decimales). Solo necesario si se desea cambiar el valor habitual
de esta propiedad. Si se define, la longitud máxima del mensaje a enviar
(parámetro “msg”) se verá reducida (ver la sección 2.5.3) y se invalidará
la posibilidad de enviar mensajes concatenados (ver parámetro “con-
cat”). Si solo se define “sPort”, este tomará el valor 0.
sPort Puerto origen del SMS a enviar. Valor numérico entre 1 y 65535 (solo no
dı́gitos decimales). Solo necesario si se desea cambiar el valor habitual
de esta propiedad. Si se define, la longitud máxima del mensaje a enviar
(parámetro “msg”) se verá reducida (ver la sección 2.5.3) y se invalidará
la posibilidad de enviar mensajes concatenados (ver parámetro “con-
cat”). Si solo se define “dPort”, este tomará el valor 0.
encoding El único valor permitido es “unicode” para cambiar la codificación del no
SMS a Unicode (ver la sección 2.5.2). En su ausencia o si tiene otro valor
el SMS tomará la codificación por defecto.
concat Si vale “true” permite concatenar mensajes para enviar un mensaje corto no
de longitud mayor que la habitual (ver la sección 2.5.3). En su ausen-
cia, si tiene otro valor o si se define el parámetro “sPort” o “dPort” se
deshabilita la concatenación de mensajes.
certDelivery Si vale “true” solicita certificar la entrega del SMS enviado mediante no
un documento digital con sello certificado de tiempo. Este servicio tiene
sobrecoste y solo está disponible en Europa. Si tiene dudas contacte con
[email protected]. En su ausencia o si tiene otro valor no se solicita
el certificado. Si adicionalmente se solicita la confirmación de entrega del
SMS enviado (ver parámetro “ack”), se podrá recibir la URL de acceso
al documento del certificado.
Cuadro 2.1: Lista de parámetros para sendsms
Una lı́nea para cada destinatario, indicando alguna de las siguientes informaciones:
• En caso de éxito y de solicitar confirmacion de entrega (ver sección 2.7):
OK dest:xxxxxxxxxxx idAck:wwwwwwwwww
Si no se solicita la confirmación de entrega o si la petición de confirmación de entrega no es
aceptada, no aparecerá la parte del “idAck”.
• En caso de error:
ERROR dest:xxxxxxxxxxx errNum:yyy
Una única lı́nea informando de algún error general que afecta a todos los envı́os. Tendrá el
siguiente formato:
ERROR errNum:yyy
El valor de “dest”se corresponde con el número de teléfono del destinatario. Si se hubiese enviado
un mensaje concatenado (ver el parámetro “concat”) a un único destinatario le corresponderán varios
mensajes, tantos como fragmentos compongan el mensaje concatenado. En ese caso aparecerán lı́neas
independientes para cada fragmento siendo cualificado el valor de “dest” con un sufijo que diferencie
cada fragmento con un ı́ndice numérico comenzando por 0. Por ejemplo para un mensaje concatenado
de tres fragmentos enviado al número “xxxxxxxxxxx”:
10
Interfaz HTTP para envı́o de SMS, landings web y firma de documentos
OK dest:xxxxxxxxxxx(0) idAck:wwwwwwwwww
OK dest:xxxxxxxxxxx(1) idAck:wwwwwwwwww
OK dest:xxxxxxxxxxx(2) idAck:wwwwwwwwww
El valor de “errNum” se corresponde con uno de los códigos de estado del apartado 2.4.3.
El valor de “idAck” se corresponde con el código de identificación asociado a la solicitud de confir-
mación de entrega (ver sección 2.7).
La infomación de éxito para un destinatario concreto implica que el mensaje ha sido aceptado por
la pasarela, no que haya sido enviado y recibido por el destinatario. Un mensaje puede ser aceptado
aún cuando no se disponga de crédito suficiente para su envı́o (ver sección 2.4.2).
Para asegurar el adecuado funcionamiento de este comando se recomienda probar la correcta recep-
ción de todos los caracteres permitidos en un teléfono móvil antes de poner el sistema en producción.
Antes de comenzar con los envı́os, se calcula cuantos mensajes en total se desean enviar, por
ejemplo 5000.
Cuando el sistema haya finalmente enviado todos los mensajes, una nueva consulta del crédito
disponible ofrecerá el valor actualizado.
En cualquier caso la comprobación efectiva del saldo disponible para efectuar un envı́o se realiza en
un proceso interno justo antes de efectuar el envı́o. En caso de que no se disponga de crédito suficiente,
el mensaje no será enviado y el cliente será informado a través de correo electrónico. Si posteriormente
se adquiere más crédito disponible, se podrá avisar a Altiria para reintentar los envı́os pendientes.
11
Interfaz HTTP para envı́o de SMS, landings web y firma de documentos
En caso de éxito:
OK credit(0):xxxx
En caso de error:
ERROR errNum:yyyy
El valor de “credit(0)” se corresponde con el crédito disponible. Será un número con dos decimales.
El valor de “errNum” se corresponde con uno de los códigos de estado del apartado 2.4.3.
CÓDIGO DETALLE
001 Error interno. Contactar con el soporte técnico
002 Error de acceso al puerto seguro 443. Contactar con el soporte técnico
010 Error en el formato del número de teléfono
011 Error en el envı́o de los parámetros de la petición o codificación incorrecta.
013 El mensaje excede la longitud máxima permitida
014 La petición HTTP usa una codificación de caracteres inválida
015 No hay destinatarios válidos para enviar el mensaje
016 Destinatario duplicado
017 Mensaje vacı́o
018 Se ha excedido el máximo número de destinatarios autorizado
019 Se ha excedido el máximo número de mensajes autorizado
020 Error en la autentificación
033 El puerto destino del SMS es incorrecto
034 El puerto origen del SMS es incorrecto
035 La web móvil enlazada en el mensaje no pertenece al usuario
036 La web móvil enlazada en el mensaje no existe
037 Se ha excedido el máximo número de webs móviles enlazadas en el mensaje
038 Error de sintaxis en la definición del envı́o con enlace a web móvil
039 Error de sintaxis en la definición de los parámetros de la web móvil parametrizada
041 Error en la url para el ack, la url supera los 500 caracteres o bien no es una url válida
12
Interfaz HTTP para envı́o de SMS, landings web y firma de documentos
@ ( 4 L W h s Ú ù
cr1 ) 5 A M X i t á
lf2 * 6 B N Y j u é
Ç + 7 C Ñ Z k v ı́
sp3 , 8 D O ¿ l w ó
! - 9 E P a m x ú
” . : F Q b n y Ü
# / ; G R c ñ z ü
$ 0 < H S d o Á à
% 1 = I T e p É è
& 2 > J U f q Í ı̀
’ 3 ? K V g r Ó ò
Cuadro 2.4: Lista de caracteres permitidos para mensajes de texto en la codificación por defecto
[ ] \ ^ { } | ~ B
C
2.5.2. Unicode
La codificación UNICODE, forzada mediante el parámetro “unicode” (ver el cuadro 2.1), per-
mite todo el juego de caracteres UNICODE de 16bits.
La longitud máxima permitida se detalla en la sección 2.5.3, siendo siempre menor que usando
la codificación por defecto (ver la sección 2.5.1).
Con esta codificación serı́a posible por ejemplo el envı́o de vocales con tilde.
1 Retorno de carro
2 Nueva lı́nea
3 Espacio blanco
13
Interfaz HTTP para envı́o de SMS, landings web y firma de documentos
La longitud máxima de un mensaje corto con la codificación por defecto es de 160 carac-
teres (ver sección 2.5.1). Los caracteres extendidos (ver la tabla 2.5) ocupan el doble, por tanto
la longitud máxima se reduce. Por ejemplo si el texto del SMS contuviera el sı́mbolo del euro
“BC” y los corchetes “[ ]”, la longitud máxima del mensaje corto se reducirı́a a 157 caracteres.
La longitud máxima de un mensaje corto con la codificación UNICODE es de 70 caracteres
(ver sección 2.5.2).
En caso de definir puertos origen o destino del SMS (ver los parámetros sPort y dPort en el
cuadro 2.1) la longitud máxima se reduce de la siguiente forma:
152 caracteres para la codificación por defecto (ver sección 2.5.1). Igualmente hay que
considerar que los caracteres extendidos (ver la tabla 2.5) ocupan el doble.
66 caracteres para la codificación UNICODE (ver sección 2.5.2).
1530 caracteres para la codificación por defecto (ver sección 2.5.1). Igualmente hay que
considerar que los caracteres extendidos (ver la tabla 2.5) ocupan el doble.
670 caracteres para la codificación UNICODE (ver sección 2.5.2).
14
Interfaz HTTP para envı́o de SMS, landings web y firma de documentos
{$identificador$}
Se puede obtener el valor del identificador de cada web en el portal Altiria360, en la columna de
edición de la web, junto a su nombre.
Se ilustra a continuación los parámetros necesarios para la web móvil de la figura anterior con
identificador 15880:
cmd="sendsms"
apiKey="YYYYY"
apiSecret="ZZZZZ"
dest="346XXXXXXXX"
msg="Estimado cliente, acceda a la promoción en el siguiente enlace: {$15880$}"
landing="1"
params="0"
El el momento del envı́o del SMS a cada destinatario, el identificador de la web será reemplazado
por un enlace a un acortador de URLs.
Cada enlace consta de un dominio acortado y un código hash alfanumérico único e irre-
petible de 7 caracteres.
El dominio del acortador por defecto es “http://go2.re” aunque se puede solicitar uno distinto
(remitir la petición a [email protected]).
Cuando el destinatario recibe el SMS, podrı́a leer por ejemplo el siguiente mensaje:
15
Interfaz HTTP para envı́o de SMS, landings web y firma de documentos
Al tratarse de una URL única por destinatario, el portal Altiria360 guarda estadı́sticas precisas so-
bre qué destinatarios han visitado la web o rellenado un formulario dentro de la misma, pudiendo trazar
todo el proceso: envı́o SMS => entrega SMS => web visitada => formulario completado
Se deben satisfacer entonces los siguientes requisitos para añadir con éxito enlaces a webs móviles:
Cada identificador de web contenido en el parámetro “msg” debe ir precedido y seguido por al
menos un espacio, salto de lı́nea, inicio de mensaje o fin de mensaje. De esta forma se garantiza
que el terminal móvil que reciba el SMS reconocerá correctamente el enlace contenido y permitirá
la navegación por la web.
Se permite añadir hasta 10 identificadores distintos de web móvil en cada mensaje.
Añadir el parámetro “landing” (ver el cuadro 2.1) que es la suma total de identificadores de
web contenidos en el texto del SMS. Si alguna web se utiliza más de una vez, debe sumarse el
identificador correspondiente.
Añadir el parámetro “params” (ver el cuadro 2.1) indicando cuántas webs están parametrizadas
(ver el apartado siguiente 2.6.1). Se debe fijar a 0 si no hay webs parametrizadas.
Se observa que el editor del portal Altiria360 añade los parámetros al contenido de la web con el
siguiente formato;
{$parámetro$}
El enlace a la web móvil debe añadirse al SMS tal y como se ha detallado en el apartado anterior
(2.6). Además hay que satisfacer los siguientes requisitos adicionales:
Definir el parámetro “params” (ver el cuadro 2.1) para indicar cuántas de las webs móviles
enlazadas en el texto del SMS van a ser parametrizadas.
16
Interfaz HTTP para envı́o de SMS, landings web y firma de documentos
Añadir para cada web móvil parametrizada el parámetro “webParams” cualificado con el iden-
tificador de la web móvil. Este parámetro define en formato json los pares parámetro/valor
propios de la web. Si para algún parámetro se define un valor vacı́o, ası́ será representado al
visualizar la web móvil.
Se resalta que los caracteres del cuadro 2.6 deben ser representados de manera especial para
evitar errores de procesado del json en los parámetros “webParams”:
Carácter Representación
” \”
\ \\
Para el ejemplo de la web móvil de la figura anterior con identificador 15880 serı́an estos parámetros:
cmd="sendsms"
apiKey="YYYYY"
apiSecret="ZZZZZ"
dest="346XXXXXXXX"
msg="Estimado cliente, acceda a la promoción en el siguiente enlace: {$15880$}"
landing="1"
params="1"
webParams15880="{"nombre":"Pedro"}"
Como resultado, el receptor del SMS con el enlace a la web móvil parametrizada verá el siguiente
contenido:
Cada parámetro “webParams” puede contener tantos pares parámetro/valor como se hayan definido
a través del editor web. Basta añadirlos correctamente formateados en json de esta forma:
En caso de no remitir valores para todos los parámetros definidos a través del editor web, se usará
el valor por defecto propio de cada parámetro, también definido a través del editor web.
17
Interfaz HTTP para envı́o de SMS, landings web y firma de documentos
Si en el propio comando de envı́o se incluye el parámetro “idAck” (es opcional), contendrá ese
valor truncado a veinte caracteres y formado solo por caracteres válidos. Es importante constatar
que el identificador devuelto en este caso solo coincidirá con el suministrado en el correpondiente
comando de envı́o si cumple los criterios de composición explicados en la tabla 2.1
Si en el propio comando de envı́o no se incluye el parámetro “idAck”, contendrá un valor numérico
de diez dı́gitos como máximo generado por la pasarela automáticamente.
Las notificaciones del estado de entrega serán enviadas a través de peticiones HTTP POST
dirigidas a la URL donde el cliente habrá configurado previamente un servidor HTTP a la escucha. La
petición POST incluirá un solo parámetro, “notification=destination,idAck,status”.
El contenido detallado de la petición HTTP POST enviada será del tipo (content-type):
“application/x-www-form-urlencoded” codificado con el juego de caracteres “UTF-8”.
El parámetro “notification” incluye los datos del cuadro 2.7, separados por comas.
El estado “NO ENTREGADO” aparece cuando el mensaje no puede ser entregado al teléfono móvil.
Es un estado definitivo, por lo que ese mensaje particular nunca será entregado. Las causas pueden ser
múltiples, desde que el teléfono haya estado apagado durante un tiempo superior al periodo de validez,
hasta que el número no exista. En general no se puede conocer la causa.
El estado “ERROR 100” indica que el mensaje por el momento no ha podido ser entregado al
destinatario debido a algún problema en su teléfono móvil. Las causas más comunes son: mala cober-
tura, buzón de mensajes cortos lleno o teléfono apagado. El mensaje se intentará enviar varias veces
con posterioridad durante un tiempo limitado. Si el problema en el teléfono se subsana a tiempo, el
mensaje será finalmente entregado, recibiéndose la correspondiente confirmación.
18
Interfaz HTTP para envı́o de SMS, landings web y firma de documentos
Dato Valor
destination Número de teléfono móvil al que se refiere la información de es-
tado de entrega. Si esa información es relativa a un mensaje con-
catenado, el teléfono figurará cualificado con un sufijo que haga
referencia al fragmento particular del que se trate, por ejemplo
xxxxxxxxxxx(2) (ver la respuesta al enviar un mesaje concatena-
do en la sección 2.4.1).
idAck Identificador que coincidirá con el suministrado por Altiria al
cliente en la parte “idAck” de la respuesta al comando de envı́o.
El contenido de este campo se ha explicado en el inicio de esta
sección.
status Estado relativo a la entrega del mensaje. Podrá tomar los va-
lores: “ENTREGADO”, “NO ENTREGADO”, “ERROR 100”,
“ERROR 101”, “ERROR 114”, “ERROR 115” o “CERT(url)”.
El estado “ERROR 101” indica que el mensaje por el momento no ha podido ser entregado al des-
tinatario debido a algún problema en la red de telefonı́a móvil del operador. Habitualmente, cuando
el operador solvente los problemas, el mensaje será entregado, recibiéndose la correspondiente confir-
mación.
El estado “ERROR 114” indica que el mensaje ha sido enviado pero no ha podido ser entregado
porque el número de teléfono destinatario no existe.
El estado “ERROR 115” indica que el mensaje ha sido enviado pero no ha podido ser entregado
porque el destinatario no acepta mensajes.
El estado “CERT(url)” referencia la URL de acceso al documento del certificado de entrega del
SMS (parámetro “certDelivery”). El certificado será global y único para todos los fragmentos que
pudieran componer el SMS (en caso de ser concatenado).
Opcionalmente se podrı́a configurar el envı́o de las notificaciones de entrega mediante la llamada a
un recurso REST del cliente según la especificación relativa a la confirmación de entrega de la pasarela
REST de Altiria para el envı́o de SMS.
Otra alternativa serı́a configurar el envı́o de las notificaciones de entrega mediante la llamada a un
servicio web SOAP del cliente como también se detalla en la especificación relativa a la confirmación
de entrega de la pasarela de Altiria de servicios web para el envı́o de SMS.
Consultar al soporte técnico de Altiria ([email protected]) para concer más detalles sobre estas
posibilidades.
El servidor HTTP del cliente deberá responder a la petición POST con un código de estatus
200 y un cuerpo tipo “text/plain” con un contenido simple, preferentemente una cadena de texto vacı́a
o algo sencillo como “OK”.
Finalmente para clarificar todos los elementos de la funcionalidad de confirmación de entrega, se
esquematizan los procesos involucrados en el envı́o de un mensaje a dos destinatarios:
1. El cliente efectúa un envı́o de SMS a través de la pasarela de Altiria incluyendo entre otros los
siguientes parámetros:
dest=346xxxxxxxx.
dest=346yyyyyyyy.
ack=true.
idAck=zzzz.
19
Interfaz HTTP para envı́o de SMS, landings web y firma de documentos
OK dest:346xxxxxxxx idAck:zzzz
OK dest:346yyyyyyyy idAck:zzzz
4. El servidor HTTP del cliente, habilitado para recibir las notificaciones de estado de entrega, recibe
sendas peticiones HTTP POST desde la pasarela de Altiria , con el parámetro “notification”
conteniendo:
‘‘notification=346xxxxxxxx,zzzz,ENTREGADO’’
‘‘notification=346yyyyyyyy,zzzz,NO ENTREGADO’’
5. El servidor HTTP del cliente responde a cada petición POST el código de estatus 200 y una
cadena de texto vacı́a en formato “text/plain”.
6. Empleando el identificador zzzz, el cliente podrá asociar la confirmación de entrega con el mensaje
previamente enviado a cada uno de los destinatarios.
7. Si adicionalmente se solicitó certificar la entrega de los SMS a través del parámetro “certDeli-
very”, se recibirá también la URL de acceso al documento del certificado para el SMS entregado
con éxito:
‘‘notification=346xxxxxxxx,zzzz,CERT(http://...)’’
20
Interfaz HTTP para envı́o de SMS, landings web y firma de documentos
21
Interfaz HTTP para envı́o de SMS, landings web y firma de documentos
destination Número de teléfono móvil del destinatario del documento. Se especificará sı́*
en formato de numeración internacional sin prefijo ’00’ ni el signo ’+’. Ej:
34645852126. Es fundamental incluir el prefijo del paı́s (34 para España)
para que el mensaje llegue al destino esperado. No debe superar los 16
dı́gitos. Su uso es obligatorio si no se incluye el parámetro “email”
o si se escoge el método de firma por OTP SMS mediante el parámetro
“smsOtpSig”.
email Dirección de correo electrónico del destinatario del documento. Su uso sı́*
es obligatorio si no se incluye el parámetro “destination” o si se escoge
el método de firma por OTP email mediante el parámetro “emailOt-
pSig”.
type Tipo de firma de contrato online solicitada. Solo puede tomar dos valores: sı́
“premium” o “simple”. Consultar las caracterı́sticas y los costes de cada
tipo de servicio en [email protected].
smsOtpSig SMS en el Web de firma. Sólo si vale “true” se escoge como mecanismo no*
de firma el envı́o de un código OTP por SMS. Será entonces obligato-
rio definir el teléfono móvil de cada firmante mediante el parámetro
“destination”. Es obligatorio escoger al menos un mecanismo
de firma entre “smsOtpSig”, “emailOtpSig”, “webSig”, “ecertSig” y
“manSig”.
emailOtpSig Correo-E en el Web de firma. Sólo si vale “true” se escoge como me- no*
canismo de firma el envı́o de un código OTP por email. Será entonces
obligatorio definir la dirección de correo electrónico de cada firmante
mediante el parámetro “email”. Es obligatorio escoger al menos
un mecanismo de firma entre las siguientes posibilidades: “smsOt-
pSig”, “emailOtpSig”, “webSig”, “ecertSig” y “manSig”.
webSig Click-Wrap en el Web de firma. Sólo si vale “true” se escoge como me- no*
canismo de firma marcar varios “checkbox” en la página de firma del
documento. Es obligatorio escoger al menos un mecanismo de
firma entre las siguientes posibilidades: “smsOtpSig”, “emailOtpSig”,
“webSig”, “ecertSig” y “manSig”.
ecertSig Firma-E en el Web de firma. Sólo si vale “true” se escoge como meca- no*
nismo de firma el uso del certificado electrónico digital del destinatario.
Está opción no aparecerá disponible si el destinatario accede a la firma
del documento desde un teléfono móvil. Será necesario además que la
primera vez instale un componente de firma especı́fico en su navegador.
Es obligatorio escoger al menos un mecanismo de firma entre
“smsOtpSig”, “emailOtpSig”, “webSig”, “ecertSig” y “manSig”.
manSig Firma-D en el Web de firma. Sólo si vale “true” se escoge la firma ma- no*
nuscrita como mecanismo. Si el destinatario accede a la firma del docu-
mento desde un teléfono móvil tendrá que usar el dedo para firmar. En
otro caso se usará el puntero del ratón o el “touchpad”. Es obligato-
rio escoger al menos un mecanismo de firma entre “smsOtpSig”,
“emailOtpSig”, “webSig”, “ecertSig” y “manSig”.
senderId Remitente a utilizar en los SMS enviados al destinatario del documento, no
autorizado por Altiria . Solo tendrá uso si se define el teléfono móvil del
destinatario mediante el parámetro “destination”. La posibilidad de
personalizar el remitente depende del paı́s destinatario del mensaje. Se
admite un valor alfanumérico de hasta 11 caracteres (números y letras
de la “a” a la “z” tanto mayúsculas como minúsculas excluyendo la “Ñ”
y la “ñ”). Los caracteres inválidos serán suprimidos automática-
mente. Si no se incluye o el valor escogido es inválido, el mensaje se
enviará con el remitente por defecto seleccionado por Altiria.
22
Interfaz HTTP para envı́o de SMS, landings web y firma de documentos
23
Interfaz HTTP para envı́o de SMS, landings web y firma de documentos
Repitiendo el parámetro ”multiSig para definir desde un firmante hasta 15. De esta forma se
permite además determinar el orden de cada firmante y la posición de cada firma en el documento
(consultar la sección 2.8.2).
Envı́o de la notificación de firma del documento a un único destinatario a través de email y SMS.
Servicio de firma “premium” por OTP desde SMS.
serı́a este:
apiKey="YYYYY"
apiSecret="ZZZZZ"
destination="346XXXXXXXX"
email="[email protected]"
type="premium"
smsOtpSig="true"
callback="true"
Envı́o de la notificación de firma del documento a dos destinatarios a través de email y SMS.
Definición del orden para cada destinatario.
Servicio de firma “premium” por OTP desde SMS.
serı́a este:
apiKey="YYYYY"
apiSecret="ZZZZZ"
multiSig="{"destination":"346XXXXXXXX","email":"[email protected]","sequence":1}"
multiSig="{"destination":"346YYYYYYYY","email":"[email protected]","sequence":2}"
type="premium"
smsOtpSig="true"
callback="true"
Se observa que el parámetro ”multiSig”se repite por cada firmante. El valor del parámetro
se formatea en json de la forma:
La respuesta a este comando será un mensaje json con el elemento “status” representando un
código de estado general de los descritos en apartado 2.8.5
Si la operación ha resultado exitosa (código de estado “000”) la respuesta contendrá adicionalmente:
24
Interfaz HTTP para envı́o de SMS, landings web y firma de documentos
{
"status":"000",
"url":"http://...",
"id":"XXXXXXXX_YYYYYYYYYYYYYYY_ZZZZZZZZ"
}
{
"status":"020"
}
• Hasta dos firmantes: las firmas se ubican al pie de la última página con fondo transparente
para evitar tapar el texto en la medida de lo posible.
• Más de dos firmantes: se incluye una página final adicional en el documento; las firmas se
distribuyen en filas de tres en esa página con un fondo no transparente.
Si el documento ya está firmado previamente de forma electrónica:
• Hasta dos firmantes: las firmas se ubican al pie de la última página con fondo transparente
para evitar tapar el texto en la medida de lo posible.
• Más de dos firmantes: las firmas se distribuyen en la última página como aparecerı́an en la
página adicional del caso anterior. Serı́a recomendable que la última página del documento
estuviese vacı́a para que las firmas no tapen el texto.
25
Interfaz HTTP para envı́o de SMS, landings web y firma de documentos
sigLocX: valor entero que se corresponde con el posicionamiento en el eje horizontal del cuadro
de firma, tomando como referencia el borde izquierdo de la página. Si no es recibido, es menor
que cero o la firma saldrı́a fuera del documento (cálculo a partir del ancho de la página y del
ancho de la firma)), la firma se situará en el borde derecho de la página. En caso contrario, se
aplicará el valor especificado por el usuario.
sigLocY: valor entero que se corresponde con el posicionamiento en el eje vertical del cuadro
de firma, tomando como referencia el borde inferior de la página. Si no es recibido o es menor
que cero, la firma se ajustará al borde inferior de la página. En caso de que la firma se saliese
fuera del documento (cálculo a partir del alto de la página y de la altura de la firma), la firma se
situará en el borde superior de la página. Para el resto de casos se aplicará el valor especificado
por el usuario.
sigLocWidth: valor entero que se corresponde con el tamaño para el ancho de la firma. Si no
es recibido o es menor que el mı́nimo admisible (140pt) se aplicará el valor mı́nimo descrito. En
caso de que el valor supere el máximo admisible (280pt) se aplicará el valor máximo descrito.
Para el resto de casos se aplicará el valor especificado por el usuario. Es importante definirlo en
consonancia con el tamaño de la altura de la firma para que esta guarde su relación de aspecto.
Lo ideal es mantener una relación de aspecto de 2:1.
sigLocHeight: valor entero que se corresponde con el tamaño para la altura de la firma. Si no
es recibido o es menor que el mı́nimo admisible (70pt) se aplicará el valor mı́nimo descrito. En
caso de que el valor supere el máximo admisible (140 pt) se aplicará el valor máximo descrito.
Para el resto de casos se aplicará el valor especificado por el usuario. Es importante definirlo en
consonancia con el tamaño de la anchura de la firma para que esta guarde su relación de aspecto.
Lo ideal es mantener una relación de aspecto de 2:1.
sigLocPage: valor entero que se corresponde con la página en que aparecerá la firma del desti-
natario. Si no es recibido o es menor que uno la firma se aplicará en la primera página. En caso
de que el valor supere el número total de páginas del documento, la firma se aplicará en la última
página.
{
"status":"000"
}
{"message":"Not Found","status_code":404}
26
Interfaz HTTP para envı́o de SMS, landings web y firma de documentos
La respuesta a este comando será un mensaje json con el elemento “status” representando
un código de estado general de los descritos en apartado 2.8.5
Si la operación ha resultado exitosa (código de estado “000”) la respuesta contendrá adicionalmente:
fileStatus: estado global del proceso de firma del documento enviado. Ver la sección 2.9 para
consultar detalles sobre los posibles estados.
files: lista de ficheros descargables asociados al proceso de firma. Ver la sección 2.9 para consultar
detalles sobre los ficheros descargables. Además de los tipos detallados en esa sección figurará el
tipo “all” para acceder a un archivo comprimido con todos los ficheros disponibles. Cada elemento
de la lista se compone a su vez de los siguientes subelementos:
{
"status":"000",
"fileStatus":"signed",
"files":
[{"fileType":"source", "fileUrl":"https://..."},
{"fileType":"signed", "fileUrl":"https://..."},
{"fileType":"all", "fileUrl":"https://..."}]
}
{
"status":"020"
}
27
Interfaz HTTP para envı́o de SMS, landings web y firma de documentos
CÓDIGO DETALLE
000 Éxito
001 Error interno. Contactar con el soporte técnico
002 Error de acceso al puerto seguro 443. Contactar con el soporte técnico
003 No hay saldo suficiente para completar la operación
004 Servicio no disponible. Consultar con [email protected]
011 Error en el envı́o de los parámetros
012 Error en la definición del posicionamiento de alguna firma
013 Se ha superado el máximo número de firmantes del documento
020 Error en la autentificación
028 El identificador del documento no es válido o no existe
029 El documento no es un pdf válido
030 El documento está protegido con contraseña
031 No se admite un documento ya firmado electrónicamente en un contrato de tipo simple
032 El documento está protegido frente a escritura
040 Exceso de documentos pendientes de envı́o. Esperar unos minutos y reintentar
28
Interfaz HTTP para envı́o de SMS, landings web y firma de documentos
{"id":"XXXXXXXX_YYYYYYYYYYYYYYY_ZZZZZZZZ",
"fileStatus":"processing",
"fileType":"sentEmail",
"fileUrl":"http://..."}
Dato Valor
id Identificador alfanumérico del documento PDF remitido previa-
mente. Emitido como respuesta del comando de firma de docu-
mento PDF (ver 2.8.1).
fileStatus Estado global del proceso de firma del documento enviado. Ver a
continuación los posibles estados.
fileType Tipo del fichero descargable. Ver a continuación los posibles tipos
de ficheros.
fileUrl Url de descarga del fichero.
En cada notificación se informa del estado global del proceso de firma y se remite la URL
de acceso a un documento PDF asociado a dicho proceso.
Los posibles estados para fileStatus son:
29
Interfaz HTTP para envı́o de SMS, landings web y firma de documentos
sentEmail: evidencia electrónica del envı́o al correo electrónico del destinatario de la notificación
de documento pendiente de firma.
sentSms: evidencia electrónica del envı́o al teléfono móvil del destinatario de un SMS con la
notificación de documento pendiente de firma.
accessedFile: evidencia electrónica del visualización del documento pendiente de firma por parte
del destinatario.
sentSmsOtp: evidencia electónica del envı́o al teléfono móvil del destinatario de un SMS con la
clave para la firma OTP del documento.
sentEmailOtp: evidencia electónica del envı́o al correo electrónico del destinatario de la clave
para la firma OTP del documento.
signedFile: evidencia electrónica constatando la firma del documento por parte del destinatario.
Contendrá las posibles imágenes del DNI del destinatario (ver el parámetro “requestDni” en la
sección 2.8.1) y las posibles claúsulas adicionales remitidas (ver el parámetro “customClause” en
la sección 2.8.1).
signed: documento pdf ya firmado por el usuario.
record: acta final que recoge las evidencias de todo el proceso.
En caso de solicitar la firma de tipo “simple” (ver el parámetro “type” en la sección 2.8.1), tan solo
se podrán emitir los estados “source” y “signed”, no quedando constancia de ninguna otra evidencia
ni fichero relacionado.
Opcionalmente se podrı́a configurar el envı́o de las notificaciones mediante la llamada a un recurso
REST del cliente según la especificación relativa a la actualización del estado de firma de la pasarela
REST de Altiria para la firma de documentos.
Otra alternativa serı́a configurar el envı́o de las notificaciones mediante la llamada a un servicio
web SOAP del cliente como también se detalla en la especificación relativa a la actualización del estado
de firma de la pasarela de servicios web de Altiria para la firma de documentos.
Consultar al soporte técnico de Altiria ([email protected]) para concer más detalles sobre estas
posibilidades.
El servidor HTTP del cliente deberá responder a la petición POST con un código de estatus
200 y un cuerpo tipo “text/plain” con un contenido simple, preferentemente una cadena de texto vacı́a
o algo sencillo como “OK”.
30
Interfaz HTTP para envı́o de SMS, landings web y firma de documentos
2.10. Ejemplos
Se presentan extractos de programación en varios lenguajes.
El código fuente de todos los ejemplos se puede descargar de esta URL [CODIGOFUENTE]
Altiria no se responsabiliza del funcionamiento de los ejemplos presentados. Se deben considerar
como fragmentos de código ilustrativos del acceso a algunas funcionalidades de la pasarela documen-
tada.
Con objeto de facilitar la lectura algunas lı́neas del código han sido partidas con saltos de
lı́nea que podrı́an afectar al correcto funcionamiento del programa en su ejecución.
Librerı́a PHP
Se puede incorporar esta librerı́a a un proyecto PHP mediante composer. La librerı́a está disponible
en nuestro repositorio en GitHub a través de esta URL [SMSPHPCLIENT].
Librerı́a Java
Se puede incorporar esta librerı́a a un proyecto Java mediante maven. La librerı́a está disponible
en nuestro repositorio en GitHub a través de esta URL [SMSJAVACLIENT].
Librerı́a Python
Se puede incorporar este módulo a un proyecto Python mediante pip. La librerı́a está disponible
en nuestro repositorio en GitHub a través de esta URL [SMSPYTHONCLIENT].
Librerı́a NodeJS
Se puede incorporar este módulo a un proyecto NodeJS mediante npm. La librerı́a está disponible
en nuestro repositorio en GitHub a través de esta URL [SMSNODEJSCLIENT].
<?php
class AltiriaSMS {
protected $apikey;
protected $apisecret;
protected $senderId;
protected $encoding;
31
Interfaz HTTP para envı́o de SMS, landings web y firma de documentos
protected $concat;
protected $timeout=60;
protected $debug;
32
Interfaz HTTP para envı́o de SMS, landings web y firma de documentos
$return=false;
// Set the curl parameters.
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $this->url);
curl_setopt($ch, CURLOPT_VERBOSE, 1);
curl_setopt($ch, CURLOPT_HTTPHEADER,
array(’Content-type: application/x-www-form-urlencoded; charset=UTF-8’));
curl_setopt($ch, CURLOPT_HEADER, false);
// Max timeout in seconds to complete http request
curl_setopt($ch, CURLOPT_TIMEOUT, $this->getTimeout());
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, 1);
$COMANDO=’cmd=sendsms&apikey=’.$this->getApikey().’&apisecret=’.$this->getApisecret()
$COMANDO.=’&msg=’.urlencode($message);
33
Interfaz HTTP para envı́o de SMS, landings web y firma de documentos
}
else{
$COMANDO.=’&senderId=’.$senderId;
$this->logMsg("Add senderId ".$senderId);
}
curl_close($ch);
return $return;
}
34
Interfaz HTTP para envı́o de SMS, landings web y firma de documentos
$COMANDO=’cmd=getcredit&apikey=’.$this->getApikey().’&apisecret=’.$this->getApisecret();
curl_close($ch);
return $return;
}
}
?>
<?php
// YY y ZZ se corresponden con los valores de identificacion del
// usuario en el sistema.
35
Interfaz HTTP para envı́o de SMS, landings web y firma de documentos
include(’httpPHPAltiria.php’);
//$sDestination = ’346xxxxxxxx’;
$sDestination = ’346xxxxxxxx,346yyyyyyyy’;
//$sDestination = array(’346xxxxxxxx’,’346yyyyyyyy’);
if (!$response)
echo "El envı́o ha terminado en error";
else
echo $response;
?>
<?php
// sDestination: lista de numeros de telefono separados por comas.
// Cada numero debe comenzar por el prefijo internacional de pais.
// sMessage: hasta 160 caracteres
// debug: Si es true muestra por pantalla la respuesta completa del servidor
// sSenderId: no es posible utilizar el remitente en América pero sı́ en Espa~
na y Europa
// YY y ZZ se corresponden con los valores de identificacion del
// usuario en el sistema.
function AltiriaSMS($sDestination, $sMessage, $debug, $sSenderId){
$sData =’cmd=sendsms&’;
$sData .=’apikey=YY&’;
$sData .=’apisecret=ZZ&’;
//No es posible utilizar el remitente en América pero sı́ en Espa~
na y Europa
$sData .=’senderId=’.$sSenderId.’&’;
$sData .=’dest=’.str_replace(’,’,’&dest=’,$sDestination).’&’;
$sData .=’msg=’.urlencode(utf8_encode(substr($sMessage,0,160)));
36
Interfaz HTTP para envı́o de SMS, landings web y firma de documentos
37
Interfaz HTTP para envı́o de SMS, landings web y firma de documentos
?>
<?php
class AltiriaCert{
public $url;
public $debug;
public $apikey;
public $apisecret;
38
Interfaz HTTP para envı́o de SMS, landings web y firma de documentos
$return=false;
curl_setopt($ch, CURLOPT_HTTPHEADER,
array(’Content-type: application/x-www-form-urlencoded; charset=UTF-8’));
curl_setopt($ch, CURLOPT_HEADER, false);
// Max timeout in seconds to complete http request
curl_setopt($ch, CURLOPT_TIMEOUT, 60);
$COMANDO=’cmd=certpdffile&apikey=’.$this->getApikey().’&apisecret=’.$this->getApisecret();
$COMANDO.=’&destination=’.$destination;
$COMANDO.=’&type=’.$type;
$COMANDO.=’&websig=’.’true’;
39
Interfaz HTTP para envı́o de SMS, landings web y firma de documentos
return $return;
}
$return=false;
$json_parsed = json_decode($httpResponse);
$status = $json_parsed->status;
echo ’Código de estado Altiria: ’.$status.’<br/>’;
if ($status != ’000’){
$this->logMsg("Error upload cert pdf: ".$httpResponse);
return false;
}else
$return = $httpResponse;
}else{
$this->logMsg("Error upload cert pdf: ".curl_error($ch).
’(’.curl_errno($ch).’)’.$httpResponse);
$return = false;
}
curl_close($ch);
return $return;
}
<?php
include(’httpPHPAltiriaCert.php’);
40
Interfaz HTTP para envı́o de SMS, landings web y firma de documentos
if (!$response)
echo "El certificado ha terminado en error";
else {
echo "Response certpdffile: ".$response."\n";
$decodedJson = json_decode($response, true);
$responseUpload = $altiriaCert->uploadCertPdf($decodedJson[’url’],’file.pdf’);
if (!$responseUpload)
echo ’Error al subir el certificado’;
else
echo ’Response upload certPdf: ’.$responseUpload;
}
?>
<?php
// destination: destinatario.
// type: simple/premium
// debug: Si es true muestra por pantalla la respuesta completa del servidor
// YY y ZZ se corresponden con los valores de identificacion del
// usuario en el sistema.
function AltiriaCertPdfFile($destination, $type, $debug){
$sData =’cmd=certpdffile&’;
$sData .=’apikey=YY&’;
$sData .=’apisecret=ZZ&’;
$sData .=’destination=’.$destination.’&’;
$sData .=’type=’.$type.’&’;
$sData .=’websig=’.’true’.’&’;
41
Interfaz HTTP para envı́o de SMS, landings web y firma de documentos
$buf .= $sData;
fputs($fp, $buf);
$buf = "";
fclose($fp);
//Si la llamada se hace con debug, se muestra la respuesta completa del servidor
if ($debug){
return $buf;
}
$json_parsed = json_decode($buf);
$status = $json_parsed->status;
echo ’Código de estado Altiria: ’.$status.’<br/>’;
if ($status != ’000’){
$output = $buf."<br />\n";
$output .= " Ha ocurrido algun error. Compruebe la especificacion<br>";
return $output;
}else
42
Interfaz HTTP para envı́o de SMS, landings web y firma de documentos
return $output;
}
}
43
Interfaz HTTP para envı́o de SMS, landings web y firma de documentos
fclose($fp);
//Si la llamada se hace con debug, se muestra la respuesta completa del servidor
if ($debug){
return $buf;
}
if($decodedJson[’status’]==’000’) {
$resp= AltiriaCertPdfUpload($decodedJson[’url’],’file.pdf’,true);
echo "=>Response certPDf upload:\n".$resp."\n";
}
?>
44
Interfaz HTTP para envı́o de SMS, landings web y firma de documentos
En este ejemplo se utiliza Httpclient 4.5 como cliente HTTP (ver [HTTPCLIENT]).
Esta librerı́a depende de los siguientes paquetes:
//Se fija el tiempo máximo de espera para conectar con el servidor (5000)
//Se fija el tiempo máximo de espera de la respuesta del servidor (60000)
RequestConfig config = RequestConfig.custom()
.setConnectTimeout(5000)
.setSocketTimeout(60000)
.build();
try {
//Se fija la codificacion de caracteres de la peticion POST
post.setEntity(new UrlEncodedFormEntity(parametersList,"UTF-8"));
}
catch(UnsupportedEncodingException uex) {
System.out.println("ERROR: codificación de caracteres no soportada");
}
try {
System.out.println("Enviando petición");
//Se envı́a la petición
response = httpClient.execute(post);
//Se consigue la respuesta
45
Interfaz HTTP para envı́o de SMS, landings web y firma de documentos
//Se fija el tiempo máximo de espera para conectar con el servidor (5000)
46
Interfaz HTTP para envı́o de SMS, landings web y firma de documentos
try {
//Se fija la codificacion de caracteres de la peticion POST
post.setEntity(new UrlEncodedFormEntity(parametersList,"UTF-8"));
}catch(UnsupportedEncodingException uex) {
System.out.println("ERROR: codificación de caracteres no soportada");
}
47
Interfaz HTTP para envı́o de SMS, landings web y firma de documentos
System.out.println("Subiendo fichero");
//Se envı́a la petición
response = httpClient.execute(post);
//Se consigue la respuesta
resp = EntityUtils.toString(response.getEntity());
if (response.getStatusLine().getStatusCode() != 200)
System.out.println("ERROR AL SUBIR EL FICHERO:Código de error HTTP: "
+response.getStatusLine().getStatusCode());
else {
// Se procesa la respuesta capturada en la cadena ’response’
gson = new GsonBuilder().create();
map = gson.fromJson(resp, TreeMap.class);
status = map.get("status");
if(status.equals("000"))
System.out.println("Fichero subido correctamente: "+resp);
else
System.out.println("ERROR: Error al subir el fichero: "+resp);
}
}
}
}catch (Exception e) {
System.out.println("Excepción");
e.printStackTrace();
return;
}finally {
//En cualquier caso se cierra la conexión
post.releaseConnection();
if(response!=null) {
try {
response.close();
}catch(IOException ioe) {
System.out.println("ERROR cerrando recursos");
}
}
if(is!=null) {
try {
is.close();
}catch(IOException ioe) {
System.out.println("ERROR cerrando recursos");
48
Interfaz HTTP para envı́o de SMS, landings web y firma de documentos
}
}
}
// Se codifica en utf-8
byte[] lbPostBuffer = System.Text.Encoding.GetEncoding("utf-8").GetBytes(lcPostData);
loHttp.Method = "POST";
loHttp.ContentType = "application/x-www-form-urlencoded";
loHttp.ContentLength = lbPostBuffer.Length;
49
Interfaz HTTP para envı́o de SMS, landings web y firma de documentos
loPostData.Write(lbPostBuffer, 0, lbPostBuffer.Length);
loPostData.Close();
// Prepara el objeto para obtener la respuesta
HttpWebResponse loWebResponse = (HttpWebResponse)loHttp.GetResponse();
// La respuesta vendrı́a codificada en utf-8
Encoding enc = System.Text.Encoding.GetEncoding("utf-8");
StreamReader loResponseStream =
new StreamReader(loWebResponse.GetResponseStream(), enc);
// Conseguimos la respuesta en una cadena de texto
response = loResponseStream.ReadToEnd();
loWebResponse.Close();
loResponseStream.Close();
}
catch (WebException e) {
if (e.Status == WebExceptionStatus.ConnectFailure)
error = "Error en la conexión";
else if (e.Status == WebExceptionStatus.Timeout)
error = "Error TimeOut";
else
error = e.Message;
}
finally {
if (error != "")
Console.WriteLine(error);
else
Console.WriteLine(response);
}
50
Interfaz HTTP para envı́o de SMS, landings web y firma de documentos
content.Headers.ContentType.CharSet = "UTF-8";
request.Content.Headers.ContentType =
new MediaTypeHeaderValue("application/x-www-form-urlencoded");
HttpResponseMessage response = client.SendAsync(request).Result;
var responseString = response.Content.ReadAsStringAsync();
resp = responseString.Result;
}
catch (Exception e) {
err = e.Message;
}
finally {
if (err != "")
Console.WriteLine(err);
else
Console.WriteLine(resp);
}
loHttp.Method = "POST"
loHttp.ContentType = "application/x-www-form-urlencoded"
loHttp.ContentLength = lbPostBuffer.Length
’Envı́a la peticion
Try
Dim loPostData As System.IO.Stream = loHttp.GetRequestStream()
loPostData.Write(lbPostBuffer, 0, lbPostBuffer.Length)
loPostData.Close()
51
Interfaz HTTP para envı́o de SMS, landings web y firma de documentos
Catch e As WebException
If (e.Status = WebExceptionStatus.ConnectFailure) Then
err = "Error en la conexión"
ElseIf (e.Status = WebExceptionStatus.Timeout) Then
err = "Error Time Out"
Else
err = e.Message
End If
Finally
If (err <> "") Then
Console.WriteLine(err)
Else
Console.WriteLine(response)
End If
End Try
52
Interfaz HTTP para envı́o de SMS, landings web y firma de documentos
Catch e1 As Exception
err = e1.Message
Finally
If (err <> "") Then
Console.WriteLine(err)
Else
Console.WriteLine(resp)
End If
End Try
try
//Se fija la URL sobre la que enviar la petición POST
SUrl:=’https://www.altiria.net:8443/api/http’;
//Compone el mensaje a enviar
//YY y ZZ se corresponden con los valores de identificación del usuario en el sistema
Parametros := TStringList.Create();
Parametros.Add(’cmd=sendsms’);
Parametros.Add(’apikey=YY’);
Parametros.Add(’apisecret=ZZ’);
Parametros.Add(’dest=346xxxxxxxx’);
Parametros.Add(’dest=346yyyyyyyy’);
Parametros.Add(UTF8Encode(’msg=Mensaje de prueba’));
//No es posible utilizar el remitente en América pero sı́ en Espa~
na y Europa
//Descomentar la lı́nea solo si se cuenta con un remitente autorizado por Altiria
//Parametros.Add(’senderId=remitente’);
IdHTTP1:= TIdHTTP.Create(nil);
//Se fija el tiempo máximo de espera para conectar con el servidor (5000)
//Se fija el tiempo máximo de espera de la respuesta del servidor (60000)
IdHTTP1.ConnectTimeout := 5000;
IdHTTP1.ReadTimeout:=60000;
IdHTTP1.Request.ContentType :=’application/x-www-form-urlencoded’;
IdHTTP1.Request.Charset := ’UTF-8’;
IdHTTP1.Request.ContentEncoding := ’UTF-8’;
53
Interfaz HTTP para envı́o de SMS, landings web y firma de documentos
except
on E: Exception do
if E.ClassName=’EIdConnectTimeout’ then
WriteLn (’ERROR Connect Timeout’)
else if E.ClassName=’EIdReadTimeout’ then
WriteLn (’ERROR Response Timeout’)
else
Writeln(E.ClassName, ’: ’, E.Message);
end;
Parametros.Free;
IdHTTP1.Free;
end.
begin
try
client := TNetHTTPClient.Create(nil);
client.ContentType :=’application/x-www-form-urlencoded’;
//Se fija la URL sobre la que enviar la petición POST
SUrl:=’https://www.altiria.net:8443/api/http’;
//YY y ZZ se corresponden con los valores de identificación del usuario en el sistema
Parametros := TStringList.Create();
Parametros.Add(’cmd=sendsms’);
Parametros.Add(’apikey=YY’);
Parametros.Add(’apisecret=ZZ’);
Parametros.Add(’dest=346xxxxxxxx’);
Parametros.Add(’dest=346yyyyyyyy’);
Parametros.Add(UTF8Encode(’msg=Mensaje de prueba’));
//No es posible utilizar el remitente en América pero sı́ en Espa~
na y Europa
//Descomentar la lı́nea solo si se cuenta con un remitente autorizado por Altiria
//Parametros.Add(’senderId=remitente’);
Response:=client.Post(SUrl,Parametros);
on E: Exception do
Writeln(E.ClassName, ’: ’, E.Message);
end;
Parametros.Free;
Client.Free;
end.
54
Interfaz HTTP para envı́o de SMS, landings web y firma de documentos
#!/usr/bin/perl
use strict;
use warnings;
use LWP::UserAgent;
use utf8;
use Encode qw(decode encode);
$data = encode(’UTF8’,$data);
$req->content($data);
my $resp = $ua->request($req);
if ($resp->is_success) {
# $resp->code = 200
my $message = $resp->decoded_content;
print "\nRespuesta: \n$message\n";
}else {
print "HTTP POST error code: ", $resp->code, "\n";
print $resp->decoded_content;
}
#!/usr/bin/perl
use strict;
use warnings;
use LWP::UserAgent;
use utf8;
use Encode qw(decode encode);
55
Interfaz HTTP para envı́o de SMS, landings web y firma de documentos
use JSON;
use JSON::Parse ’parse_json’;
use Try::Tiny;
binmode(STDOUT, ":utf8");
try {
my $ua = new LWP::UserAgent();
# Timeout en segundos
$ua->timeout(60);
# Se fija la URL sobre la que enviar la petición POST
my $req = new HTTP::Request POST => "https://www.altiria.net:8443/api/http";
$req->header(’content-type’=>
’application/x-www-form-urlencoded;charset=UTF-8’);
$data = encode(’UTF8’,$data);
$req->content($data);
my $resp = $ua->request($req);
if ($resp->is_success) {
# $resp->code = 200
my $message = $resp->decoded_content;
print "\nRespuesta comando certPdfFile: \n$message\n";
my $status = $parsedJson->{status};
if ($status != ’000’) {
print "\nERROR COMANDO CERTPDFFILE: Código Altiria: \n$status\n";
}else {
print "\nSubiendo fichero\n";
$req->content($buf);
56
Interfaz HTTP para envı́o de SMS, landings web y firma de documentos
$resp = $ua->request($req);
if ($resp->is_success) {
$message = $resp->decoded_content;
print "\nRespuesta al subir certificado: \n$message\n";
$parsedJson = parse_json ($message);
$status = $parsedJson->{status};
if ($status != ’000’) {
print "\nERROR AL SUBIR FICHERO:".
" Código Altiria: \n$status\n";
}else {
print "\nProceso terminado con exito.\n";
}
}else {
print "HTTP POST error al subir el fichero.".
" Code: ", $resp->code, "\n";
print $resp->decoded_content;
}
}
}else {
print "HTTP POST error en la petición al comando. Code: ", $resp->code, "\n";
print $resp->decoded_content;
}
}catch { #Se capturan posibles errores en el lado cliente
print "Error inesperado: $_\n";
};
# encoding: UTF-8
require ’net/http’
require ’json’
require ’uri’
begin
57
Interfaz HTTP para envı́o de SMS, landings web y firma de documentos
if debug
unless response.code == "200" #Error en la respuesta del servidor
puts("ERROR GENERAL: #{response.code}")
puts("#{response.body}")
else #Se procesa la respuesta
puts("Código de estado HTTP: #{response.code}")
if "#{response.body}".include? "ERROR errNum:"
puts("Error de Altiria: #{response.body}")
else
puts("Cuerpo de la respuesta: \n#{response.body}")
end
end
end
return response
rescue Net::OpenTimeout
puts "Tiempo de conexión agotado"
rescue Net::ReadTimeout
puts "Tiempo de respuesta agotado"
rescue Exception => e
puts "Error interno: #{e.class}"
end
end
# encoding: utf8
require ’net/http’
require ’json’
require ’uri’
58
Interfaz HTTP para envı́o de SMS, landings web y firma de documentos
begin
#Se fija la URL sobre la que enviar la petición POST
url = "https://www.altiria.net:8443/api/http"
uri = URI.parse(url)
http = Net::HTTP.new(uri.host, uri.port)
#Se fija el tiempo máximo de espera para conectar con el servidor (5 segundos)
#Se fija el tiempo máximo de espera de la respuesta del servidor (60 segundos)
http.open_timeout = 5
http.read_timeout = 60
59
Interfaz HTTP para envı́o de SMS, landings web y firma de documentos
altiriaCert(’346xxxxxxxx’,’simple’)
En este ejemplo se utiliza la librerı́a Requests como cliente HTTP (ver [REQUESTS]).
import requests
try:
#Se crea la lista de parámetros a enviar en la petición POST
#YY y ZZ se corresponden con los valores de identificación del usuario en el sistema.
payload = [
(’cmd’, ’sendsms’),
(’apikey’, ’YY’),
(’apisecret’, ’ZZ’),
#No es posible utilizar el remitente en América pero sı́ en Espa~
na y Europa
(’senderId’, senderId),
(’msg’, message)
]
#add destinations
for destination in destinations.split(","):
payload.append((’dest’, destination))
60
Interfaz HTTP para envı́o de SMS, landings web y firma de documentos
url = ’https://www.altiria.net:8443/api/http’
if debug:
if str(r.status_code) != ’200’: #Error en la respuesta del servidor
print ’ERROR GENERAL: ’+str(r.status_code)
else: #Se procesa la respuesta
print ’Código de estado HTTP: ’+str(r.status_code)
if (r.text).find("ERROR errNum:"):
print ’Error de Altiria: ’+r.text
else:
print ’Cuerpo de la respuesta: \n’+r.text
return r.text
except requests.ConnectTimeout:
print "Tiempo de conexión agotado"
except requests.ReadTimeout:
print "Tiempo de respuesta agotado"
import requests
import json
try:
# Se crea la lista de parámetros a enviar en la petición POST
# YY y ZZ se corresponden con los valores de identificación
# del usuario en el sistema.
61
Interfaz HTTP para envı́o de SMS, landings web y firma de documentos
payload = [
(’cmd’, ’certpdffile’),
(’apikey’, ’YY’),
(’apisecret’, ’ZZ’),
(’destination’, destination),
(’type’, fType),
(’webSig’, ’true’)
]
62
Interfaz HTTP para envı́o de SMS, landings web y firma de documentos
else:
print "Error Altiria. Codigo de estado: "+status
else:
print "Error Altiria. Codigo de estado: "+status
except requests.ConnectTimeout:
print "Tiempo de conexión agotado"
except requests.ReadTimeout:
print "Tiempo de respuesta agotado"
altiriaCert(’346xxxxxxxx’,’simple’)
// Se efectua la petición
var post_req = https.request(post_options, function(res) {
63
Interfaz HTTP para envı́o de SMS, landings web y firma de documentos
res.setEncoding(’utf8’);
res.on(’data’, function (chunk) {
//Es necesario procesar la respuesta y los posibles errores
console.log(’Response: ’ + chunk);
});
});
// Se efectua la petición
64
Interfaz HTTP para envı́o de SMS, landings web y firma de documentos
65
Interfaz HTTP para envı́o de SMS, landings web y firma de documentos
Referencias
66
Interfaz HTTP para envı́o de SMS, landings web y firma de documentos
67