utilizando Sistema;
utilizando Sistema.Colecciones.Genérico;
utilizando Sistema.yo;
utilizando Sistema.Red;
utilizando Sistema.Texto;
utilizando Sistema.Web;
utilizando Gateway_Sample_Application.Propiedades;
utilizando Newtonsoft.jSON;
utilizando Newtonsoft.jSON.Linq;
espacio de nombres SMS
{
estático clase API
{
privado estático solo lectura cuerda Servidor = "Https://sms.sendapp.live"
privado estático solo lectura cuerda Llave = "6e1bdb4ed91f3b83071dd5a520c9d226ea19245e";
público enumeración Opción
{
USE_SPECIFIED = 0,
USE_ALL_DEVICES = 1,
USE_ALL_SIMS = 2
}
///
/// Enviar un solo mensaje a un número móvil especÃfico.
///
/// El número de móvil al que desea enviar el mensaje.
/// El mensaje que quieres enviar.
/// La identificación de un dispositivo que desea usar para enviar este mensaje.
/// Ajústelo a la marca de tiempo cuando desee enviar este mensaje.
/// Si hay un error al enviar un mensaje.
/// El diccionario que contiene información sobre el mensaje.
público estático Diccionario<cuerda, objeto> SendSingleMessage(cuerda número, cuerda mensaje, cuerda dispositivo = "0", largo? calendario = nulo)
{
var valores = nuevo Diccionario<cuerda, objeto>
{
{ "Número", número},
{ "Mensaje", mensaje},
{ "Calendario", calendario },
{ "Llave", Llave },
{ "Dispositivos", dispositivo }
};
regreso getMessages(Obtener una respuesta($"{Servidor} /services/send.php", valores)["Mensajes"])[0];
}
///
/// Enviar múltiples mensajes a diferentes números móviles.
///
/// La matriz que contiene números y mensajes.
/// Establezca esto en USE_SPECIFIED si desea usar dispositivos y SIMs especificados en el argumento de dispositivos.
/// Establezca esto en USE_ALL_DEVICES si desea usar todos los dispositivos disponibles y su SIM predeterminada para enviar mensajes.
/// Establezca esto en USE_ALL_SIMS si desea utilizar todos los dispositivos disponibles y todas sus SIM para enviar mensajes.
/// El conjunto de ID de dispositivos que desea usar para enviar estos mensajes.
/// Ajústelo a la marca de tiempo cuando desee enviar este mensaje.
/// Establézcalo en verdadero si desea enviar mensajes utilizando solo un dispositivo aleatorio de los dispositivos seleccionados.
/// Si hay un error al enviar mensajes.
/// La matriz que contiene mensajes.
público estático Diccionario<cuerda, objeto> [] Enviar mensajes(lista<Diccionario<cuerda, cuerda>> mensajes, Opción opciones = Opción.USE_SPECIFIED, cuerda[] dispositivos = nulo, largo? calendario = nulo, bool useRandomDevice = falso)
{
var valores = nuevo Diccionario<cuerda, objeto>
{
{ "Mensajes", JsonConvert.SerializeObject(mensajes)},
{ "Calendario", calendario },
{ "Llave", Llave },
{ "Dispositivos", dispositivos },
{ "Opción", (En t) opciones },
{ "UseRandomDevice", useRandomDevice }
};
regreso getMessages(Obtener una respuesta($"{Servidor} /services/send.php", valores)["Mensajes"]);
}
///
/// Enviar un mensaje a los contactos en la lista de contactos especificada.
///
/// El ID de la lista de contactos donde desea enviar este mensaje.
/// El mensaje que quieres enviar.
/// Establezca esto en USE_SPECIFIED si desea usar dispositivos y SIMs especificados en el argumento de dispositivos.
/// Establezca esto en USE_ALL_DEVICES si desea usar todos los dispositivos disponibles y su SIM predeterminada para enviar mensajes.
/// Establezca esto en USE_ALL_SIMS si desea utilizar todos los dispositivos disponibles y todas sus SIM para enviar mensajes.
/// El conjunto de ID de dispositivos que desea usar para enviar estos mensajes.
/// Ajústelo a la marca de tiempo cuando desee enviar este mensaje.
/// Si hay un error al enviar mensajes.
/// La matriz que contiene mensajes.
público estático Diccionario<cuerda, objeto> [] SendMessageToContactsList(En t listid, cuerda mensaje, Opción opciones = Opción.USE_SPECIFIED, cuerda[] dispositivos = nulo, largo? calendario = nulo)
{
var valores = nuevo Diccionario<cuerda, objeto>
{
{ "Listid", listid},
{ "Mensaje", mensaje},
{ "Calendario", calendario },
{ "Llave", Llave },
{ "Dispositivos", dispositivos },
{ "Opción", (En t) opciones }
};
regreso getMessages(Obtener una respuesta($"{Servidor} /services/send.php", valores)["Mensajes"]);
}
///
/// Recibe un mensaje usando la ID.
///
/// La identificación de un mensaje que desea recuperar.
/// Si hay un error al recibir un mensaje.
/// El diccionario que contiene información sobre el mensaje.
público estático Diccionario<cuerda, objeto> GetMessageByID(En t carné de identidad)
{
var valores = nuevo Diccionario<cuerda, objeto>
{
{ "Llave", Llave },
{ "Carné de identidad", carné de identidad }
};
regreso getMessages(Obtener una respuesta($"{Servidor} /services/read-messages.php", valores)["Mensajes"])[0];
}
///
/// Recibe mensajes usando la ID de grupo.
///
/// El ID de grupo de los mensajes que desea recuperar.
/// Si hay un error al recibir mensajes.
/// La matriz que contiene mensajes.
público estático Diccionario<cuerda, objeto> [] GetMessagesByGroupID(cuerda Identificación del grupo)
{
var valores = nuevo Diccionario<cuerda, objeto>
{
{ "Llave", Llave },
{ "Identificación del grupo", Identificación del grupo }
};
regreso getMessages(Obtener una respuesta($"{Servidor} /services/read-messages.php", valores)["Mensajes"]);
}
///
/// Recibe mensajes usando el estado.
///
/// El estado de los mensajes que desea recuperar.
/// Busque mensajes enviados o recibidos después de este tiempo.
/// Busque mensajes enviados o recibidos antes de este momento.
/// Si hay un error al recibir mensajes.
/// La matriz que contiene mensajes.
público estático Diccionario<cuerda, objeto> [] GetMessagesByStatus(cuerda estado, largo? startTimestamp = nulo, largo? endTimestamp = nulo)
{
var valores = nuevo Diccionario<cuerda, objeto>
{
{ "Llave", Llave },
{ "estado", estado },
{ "StartTimestamp", startTimestamp },
{ "EndTimestamp", endTimestamp }
};
regreso getMessages(Obtener una respuesta($"{Servidor} /services/read-messages.php", valores)["Mensajes"]);
}
///
/// Agregar un nuevo contacto a la lista de contactos.
///
/// El ID de la lista de contactos donde desea agregar este contacto.
/// El número de móvil del contacto.
/// El nombre del contacto.
/// Póngalo en verdadero si desea volver a suscribir este contacto si ya existe.
/// Un diccionario que contiene detalles sobre un contacto recién agregado.
público estático Diccionario<cuerda, objeto> Agregar contacto(En t listid, cuerda número, cuerda nombre = nulo, bool volver a suscribirse = falso)
{
var valores = nuevo Diccionario<cuerda, objeto>
{
{"Llave", Llave},
{"Listid", listid},
{"Número", número},
{"Nombre", nombre},
{"Volver a suscribirse", volver a suscribirse ? '1' : '0'},
};
bolsa de trabajo bolsa de trabajo = (bolsa de trabajo) Obtener una respuesta($"{Servidor} /services/manage-contacts.php", valores)["Contacto"];
regreso bolsa de trabajo.Al objeto<Diccionario<cuerda, objeto>> ();
}
///
/// Anular la suscripción de un contacto de la lista de contactos.
///
/// El ID de la lista de contactos de la que desea cancelar la suscripción de este contacto.
/// El número de móvil del contacto.
/// Un diccionario que contiene detalles sobre el contacto no suscrito.
público estático Diccionario<cuerda, objeto> Cancelar suscripciónContacto(En t listid, cuerda número)
{
var valores = nuevo Diccionario<cuerda, objeto>
{
{"Llave", Llave},
{"Listid", listid},
{"Número", número},
{"Cancelar suscripción", '1'}
};
bolsa de trabajo bolsa de trabajo = (bolsa de trabajo)Obtener una respuesta($"{Servidor} /services/manage-contacts.php", valores)["Contacto"];
regreso bolsa de trabajo.Al objeto<Diccionario<cuerda, objeto>> ();
}
///
/// Obtenga los créditos restantes del mensaje.
///
/// Si hay un error al obtener los créditos del mensaje.
/// La cantidad de créditos de mensaje restantes.
público estático cuerda GetBalance()
{
var valores = nuevo Diccionario<cuerda, objeto>
{
{"Llave", Llave}
};
JToken créditos = Obtener una respuesta($"{Servidor} /services/send.php", valores)["Créditos"];
Si (créditos.Tipo != JTokenType.Nulo)
{
regreso créditos.Encadenar();
}
regreso "Ilimitado";
}
privado estático Diccionario<cuerda, objeto> [] getMessages(JToken mensajesJToken)
{
JArray jArray = (JArray)mensajesJToken;
var mensajes = nuevo Diccionario<cuerda, objeto> [jArray.Contar];
para (var Ãndice = 0; Ãndice < jArray.Contar; Ãndice++)
{
mensajes[Ãndice] = jArray[Ãndice].Al objeto<Diccionario<cuerda, objeto>> ();
}
regreso mensajes;
}
privado estático JToken Obtener una respuesta(cuerda url, Diccionario<cuerda, objeto> postData)
{
var solicitud = (HttpWebRequest)WebRequest.Crear(url);
var cadena de datos = CreateDataString(postData);
var fecha = Codificación.UTF8.GetBytes(cadena de datos);
solicitud.Método = "ENVIAR";
solicitud.Tipo de contenido = "Aplicación / x-www-form-urlencoded";
solicitud.Largancia de contenido = fecha.Longitud;
ServicePointManager.Expect100Continue = falso;
ServicePointManager.Protocolo de seguridad = SecurityProtocolType.Tls12;
utilizando (var corriente = solicitud.GetRequestStream())
{
corriente.Escribir(fecha, 0, fecha.Longitud);
}
var respuesta = (HttpWebResponse)solicitud.Obtener una respuesta();
Si (respuesta.Código de estado == HttpStatusCode.bueno)
{
utilizando (StreamReader StreamReader = nuevo StreamReader(respuesta.GetResponseStream()))
{
var jsonResponse = StreamReader.ReadToEnd();
tratar
{
bolsa de trabajo bolsa de trabajo = bolsa de trabajo.Analizar gramaticalmente(jsonResponse);
Si ((bool)bolsa de trabajo["Éxito"])
{
regreso bolsa de trabajo["fecha"];
}
lanzar nuevo Excepción(bolsa de trabajo["Error"]["Mensaje"].Encadenar());
}
captura (JsonReaderException)
{
Si (cuerda.IsNullOrEmpty(jsonResponse))
{
lanzar nuevo InvalidDataException("Faltan datos en la solicitud. Proporcione toda la información necesaria para enviar mensajes".);
}
lanzar nuevo Excepción(jsonResponse);
}
}
}
lanzar nuevo WebException($"Error HTTP: {(int) response.StatusCode} {response.StatusCode}");
}
privado estático cuerda CreateDataString(Diccionario<cuerda, objeto> fecha)
{
StringBuilder cadena de datos = nuevo StringBuilder();
bool primero = falso;
para cada (var obj en fecha)
{
Si (obj.Valor != nulo)
{
Si (primero)
{
primero = falso;
}
más
{
cadena de datos.Adjuntar("&");
}
cadena de datos.Adjuntar(HttpUtility.UrlEncode(obj.Llave));
cadena de datos.Adjuntar("=");
cadena de datos.Adjuntar(obj.Valor es cuerda[]
? HttpUtility.UrlEncode(JsonConvert.SerializeObject(obj.Valor))
: HttpUtility.UrlEncode(obj.Valor.Encadenar()));
}
}
regreso cadena de datos.Encadenar();
}
}
}
Enviar mensaje individual
tratar
{
// EnvÃa un mensaje usando el dispositivo principal.
SMS.API.SendSingleMessage("+911234567890", "Esta es una prueba de mensaje único".);
// Enviar un mensaje usando la ID del dispositivo 1.
Diccionario<cuerda, objeto> mensaje = SMS.API.SendSingleMessage("+911234567890", "Esta es una prueba de mensaje único"., "1");
// EnvÃa un mensaje usando la SIM en la ranura 1 de la ID del dispositivo 1 (Representado como "1 | 0").
// La ranura SIM es un Ãndice, por lo que el Ãndice de la primera SIM es 0 y el Ãndice de la segunda SIM es 1.
// En este ejemplo, 1 representa la ID del dispositivo y 0 representa el Ãndice de la ranura SIM.
Diccionario<cuerda, objeto> mensaje = SMS.API.SendSingleMessage("+911234567890", "Esta es una prueba de mensaje único"., "1|0");
// Enviar mensaje programado utilizando el dispositivo primario.
largo marca de tiempo = (largo) Fecha y hora.UtcNow.Añadir minutos(2).Sustraer(nuevo Fecha y hora(1970, 1, 1)).segundos totales;
Diccionario<cuerda, objeto> mensaje = SendSingleMessage(textBoxNumber.Texto, textBoxMessage.Texto, nulo, marca de tiempo);
Caja de mensaje.mostrar("Se envió un mensaje correctamente".);
}
captura (Excepción excepción)
{
Caja de mensaje.mostrar(excepción.Mensaje, "! Error", MessageBoxButtons.bueno, MessageBoxIcon.error);
}
Enviar mensajes masivos
lista<Diccionario<cuerda, cuerda>> mensajes = nuevo lista<Diccionario<cuerda, cuerda>> ();
para (En t el = 1; el <= 12; el++)
{
var mensaje = nuevo Diccionario<cuerda, cuerda>
{
{ "Número", "+911234567890" },
{ "Mensaje", "Esta es una prueba # {$i} de la versión C#. Prueba de la funcionalidad de mensajes masivos". }
};
mensajes.Añadir(mensaje);
}
tratar
{
// Enviar mensajes usando el dispositivo primario.
SMS.API.Enviar mensajes(mensajes);
// Enviar mensajes usando la SIM predeterminada de todos los dispositivos disponibles. Los mensajes se dividirán entre todos los dispositivos.
SMS.API.Enviar mensajes(mensajes, SMS.API.Opción.USE_ALL_DEVICES);
// Enviar mensajes usando todas las SIM de todos los dispositivos disponibles. Los mensajes se dividirán entre todas las SIM.
SMS.API.Enviar mensajes(mensajes, SMS.API.Opción.USE_ALL_SIMS);
// Enviar mensajes utilizando solo dispositivos especificados. Los mensajes se dividirán entre dispositivos o SIM que haya especificado.
// Si envÃa 12 mensajes con este código, se enviarán 4 mensajes por ID de dispositivo 1, otros 4 por SIM en la ranura 1 de
// ID del dispositivo 2 (representado como "2 | 0") y 4 restantes por SIM en la ranura 2 de la ID del dispositivo 2 (representado como "2 | 1").
SMS.API.Enviar mensajes(mensajes, SMS.API.Opción.USE_SPECIFIED, nuevo [] {"1", "2|0", "2|1"});
// Enviar mensajes en horario utilizando el dispositivo principal.
largo marca de tiempo = (largo) Fecha y hora.UtcNow.Añadir minutos(2).Sustraer(nuevo Fecha y hora(1970, 1, 1)).segundos totales;
Diccionario<cuerda, objeto> [] mensajes = SMS.API.Enviar mensajes(mensajes, Opción.USE_SPECIFIED, nulo, marca de tiempo);
// Enviar un mensaje a los contactos en la lista de contactos con ID de 1.
Diccionario<cuerda, objeto> [] mensajes = SMS.API.SendMessageToContactsList(1, "Prueba", SMS.API.Opción.USE_SPECIFIED, nuevo [] {"1"});
// Enviar un mensaje según lo programado a los contactos en la lista de contactos con ID de 1.
Diccionario<cuerda, objeto> [] mensajes = SMS.API.SendMessageToContactsList(1, "Prueba #1", Opción.USE_SPECIFIED, nulo, marca de tiempo);
Caja de mensaje.mostrar("Éxito");
}
captura (Excepción excepción)
{
Caja de mensaje.mostrar(excepción.Mensaje, "! Error", MessageBoxButtons.bueno, MessageBoxIcon.error);
}
Obtenga créditos de mensajes restantes
tratar
{
cuerda créditos = SMS.API.GetBalance();
Caja de mensaje.mostrar($"Créditos restantes del mensaje: {créditos}");
}
captura (Excepción excepción)
{
Caja de mensaje.mostrar(excepción.Mensaje, "! Error", MessageBoxButtons.bueno, MessageBoxIcon.error);
}
Recibe mensajes y su estado actual
tratar
{
// Recibe un mensaje usando la ID.
Diccionario<cuerda, objeto> mensaje = SMS.API.GetMessageByID(1);
// Recibe mensajes usando la ID de grupo.
Diccionario<cuerda, objeto> [] mensajes = SMS.API.GetMessagesByGroupID(") * V5LxqyBMEbQrl9 J$5bb4c03e8a07b7.62193871");
// Recibe mensajes recibidos en las últimas 24 horas.
largo marca de tiempo = (largo) Fecha y hora.UtcNow.AddHours(-24).Sustraer(nuevo Fecha y hora(1970, 1, 1)).segundos totales;
GetMessagesByStatus("Recibido", marca de tiempo);
}
captura (Excepción excepción)
{
Caja de mensaje.mostrar(excepción.Mensaje, "! Error", MessageBoxButtons.bueno, MessageBoxIcon.error);
}
Gestionar contactos
tratar {
// Agregue un nuevo contacto a la lista de contactos 1 o vuelva a suscribir el contacto si ya existe.
Diccionario<cuerda, objeto> contacto = SMS.API.Agregar contacto(1, "+911234567890", "Prueba C#", falso);
// Anular la suscripción de un contacto utilizando el número de móvil.
Diccionario<cuerda, objeto> contacto = Cancelar suscripciónContacto(1, "+911234567890");
}
captura (Excepción excepción)
{
Caja de mensaje.mostrar(excepción.Mensaje, "! Error", MessageBoxButtons.bueno, MessageBoxIcon.error);
}